这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
本堂课主要内容是分布式理论,下面是我个人听课时的一些笔记,本篇笔记主要是关于分布式理论中的分布式概述和系统模型两部分。
个人笔记
分布式概述
-
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
分布式的优势在于:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
分布式的挑战在于:
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
-
常见的分布式系统:
分布式存储:
- Google File System (GFS) : google分布式文件系统
- Ceph : 统一的分布式存储系统
- Hadoop HDFS : 基于GFS架构的开源分布式文件系统
- Zookeeper : 高可用的分布式数据管理与系统协调框架
分布式数据库:
- Google Spanner: google可扩展的、全球分布式的数据库。
- TiDB:开源分布式关系型数据库
- HBase:开源NoSQL数据库
- MongoDB:文档数据库
分布式计算:
- Hadoop:基于MapReduce分布式计算框架
- Spark:在Hadoop基础之上,使用内存来存储数据
- YARN:分布式资源调度
系统模型
-
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据
- Authentication detectable byzantine failure(ADB): Byzantine failure的特例;节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure: 节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure: 节点收到数据的时间无限晚,即收不到数据
- Crash failure: 在omission failure的基础上,增加了节点停止响应的假设,也即持续性地omission failure
- Fail-stop failure:在Crash failure的基础上增加了错误可检测的假设
-
拜占庭将军问题:
两将军问题(Two Generals' Problem) : 两支军队的将军贝能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。
结论是,两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识。
应对方案一: 同时发送N个信使,任何一个达到对方军队,都算成功。
应对方案二: 设置超时时间,发送后未在一定时间返回,则加派信使。
该问题的另一个场景是引入“叛徒”的存在,叛徒会传递错误的信息,此时需要引入协商,结论是:当有3m+1个将军,其中m个"叛徒”时,可以增加m轮协商,最终达成一致
-
共识 和 一致性
-
最终一致性:
客户端A读到x=0,当客户端C正在写入时,客户端A和B可能读到0或者1。但是当C写入完成后,A和B最终能读到一致的数据。 我们称这样的一致性为Eventualy consistent (最终一致性)
-
线性一致性:
当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1。我们称这样的一致性为Linearizability (线性一致性)
线性一致性会导致延迟的增加,使得系统可用性受损。
-
-
时间和事件顺序
Lamport逻辑时钟
参考
- 字节直播课 —【分布式理论 - 现代架构基石】