这是我参与「第五届青训营 」笔记创作活动的第 8 天
本节课重点:系统模型、分布式事务、共识协议
本节课难点:分布式实战
1、分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等
优点:去中心化;低成本;有弹性;资源共享;可靠性高
缺点:普遍的节点故障;不可靠的网络;异构的机器与硬件环境;安全问题
1.1 常见分布式系统
分布式存储:GFS(Google File System)、Ceph、Hadoop HDFS、Zookeeper
分布式数据库:Google Spanner、TiDB、HBase、MongoDB
分布式计算:Hadoop、Spark、YARN
2、系统模型
2.1 故障模型
Byzantine故障:节点可以任意篡改发送给其他节点的数据。例网络故障、软件故障
ADB故障(Authentication detectable byzantine failure):节点可以篡改数据但不能伪造其他节点的数据。例磁盘坏道/块、内存故障
Performance故障:节点未在特定时间段内收到数据。例网络分区出问题、线缆故障
Omission故障:节点收到数据的时间无限晚。例网络故障、线缆故障、CPU故障、电源故障
Crash故障:在Omission故障的基础上,增加了节点停止响应的假设。例服务器主板/板卡故障、内核崩溃、软件故障
Fail-stop故障:在Crash故障的基础上增加了错误可检测的假设。例磁盘故障、磁盘坏道/块
2.2 拜占庭将军问题(Two Generals' Problem)
两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识
结论:两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识
方案一:同时发送N个信使,任何一个到达对方军队,都算成功
方案二:设置超时时间,发送后未在一定时间返回,则加派信使
TCP三次握手是该问题的一个工程解
2.3 共识和一致性
不同客户端A和B看到客户端C写入,因为时机的不同,产生数据读取的偏差。引导出最终一致性的详细说明;要保证所有客户端看到相同的值,需要多节点进行“协商”,达成共识,来保证线性一致性;一致性和可用性是对矛盾
2.4 时间和事件顺序
定义了计算机系统中的时间和事件顺序,引入happened before和并发的定义,可以以此对分布式系统中的事件进行推导;根据上述推导,创造了Lamport逻辑时钟的概念,这个概念在分布式理论中具有革命性的意义,帮助我们在一系列分布式事件当中梳理出逻辑的先后关系。利用逻辑时钟,我们可以对整个系统中的事件进行全序排序
3、理论基础
3.1 CAP理论
C、A、P分别代表一致性、可用性、分区容错性。一般可达到CA、AP、CP,CAP不可能同时达到
3.2 ACID理论
数据库事务拥有四个特性ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)
3.3 BASE理论
BASE理论是针对AP系统而言的,其来源于对大型互联网分布式实践的总结。 Basically Available(基本可用):假设系统,出现了不可预知的故障,但还是能用。 Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性。Eventually consistent(最终一致性):数据最终一定能够达到一致的状态
4、分布式事务
4.1 二阶段提交
为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
三个假设:协调者和参与者进行通信;预写式日志被保持在可靠的存储设备上;所有节点不会永久性损坏,即使损坏后仍然可以恢复
亟待解决问题:需要多次网络通信,资源需要等待并锁定;如何确定状态选出新协调者;非所有节点都收到Commit请求
4.2 三阶段提交
针对两阶段提交的补充,将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制 CanCommit阶段:询问是否可以执行;PreCommit阶段:重新确认是否可以执行;DoCommit阶段:向所有人提交事务
4.2.1 MVCC
多版本并发控制的方法。维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。提高并发性能的同时也解决了脏读的问题
5、共识协议
5.1 Quorum NWR三要素
N:在分布式存储系统中,有多少份备份数据
W:代表一次成功的更新操作要求至少有w份数据写入成功
R: 代表一次成功的读数据操作要求至少有R份数据成功读取
为了保证强一致性,需要保证 W+R>N
其将CAP的选择交给用户,是一种简化版的一致性模型
允许数据被覆盖,并发更新容易引起一致性问题
5.2 RAFT协议
一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性
5.2.1 三种角色
领导者(Leader)、跟随者(Follower)、候选者(Candidate)
5.2.2 四种定义
日志、任期号(Term)、Committed、Applied
5.2.3 Leader选举过程
5.2.4 Log Replication过程
5.2.5 切主
5.2.6 Stale读
5.3 Paxos协议
优点:写入并发性能高,所有节点都能写
缺点:没有一个节点有完整的最新的数据,恢复流程复杂,需要同步历史记录
5.3.1 与RAFT的区别
Multi-Paxos可以并发修改日志,而Raft写日志操作必须是连续的;可以随机选主,不必最新最全的节点当选Leader
6、分布式实战
MapReduce:设计一个简易的MapReduce系统,思考如何应对故障?
分布式KV:设计一个简易的分布式键值系统,要求具备弹性的能力和达成线性一致
课后个人总结
本节课学习了分布式理论,分布式是现代架构的基石,这节课主要是学习分布式基础知识,了解分布式系统、系统模型、理论基础、分布式事务、共识协议,后面还提到了分布式实战,收获还是很多的