[ 后端与 Go | 青训营笔记 ]
这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
课内:Go 分布式理论 - 现代架构基石
分布式计算是计算机科学中一个研究方向,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。
重点
- 分布式概述;
- 系统模型;
- 理论基础;
- 分布式事务;
- 共识协议;
- 分布式实践;
细节
分布式概述
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算机资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等等。
-
优点
- 去中心化;
- 低成本;
- 弹性;
- 资源共享;
- 可塑性高;
-
挑战
- 普遍的节点故障;
- 不可靠的网络;
- 异构的机器与硬件环境;
- 安全;
Why - How - What
使用者视角
-
why
- 数据爆炸,对存储和计算有大规模运用的述求;
- 成本低;
-
how
- 分布式框架;
- 成熟的分布式系统;
-
what
- 理清规模,负载,一致性要求等;
- 明确稳定性要求,制定技术方案;
学习者视角
-
why
- 后端必备技能;
- 帮助了解后台服务器之间协助的机理;
-
how
- 掌握分布式理论;
- 了解一致性协议;
-
what
- 知识点深入展开;
- 实践;
常见的分布式系统
- 分布式存储
- 分布式数据库
- 分布式计算
系统模型
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障;
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据;
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚;
- Omission failure:节点收到数据的时间无限晚,即收不到数据;
- Crash failure:节点停止响应,持续性的故障;
- Fail-stop failure:错误可检测,是最容易处理的故障;
拜占庭将军问题
两将军问题
-
定义:
- 两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识;
-
结论:
- 两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识;
-
TCP是两将军问题的一个工程解;
三将军问题:
- 两个“忠将”A和B,一个“叛徒”C,互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”(即出现拜占庭故障)时,整个系统无法达成一致;
- 由于“叛徒”C的存在,将军A和将军B获得不同的信息。这样将军A获得2票进攻1票撤退的信息,将军B获得1票进攻2票撤退的信息,产生了不一致;
四将军问题:
-
将军D作为消息分发中枢,约定如果没收到消息则执行撤退;
-
步骤:
- 如果D为“叛徒”,ABC无论收到任何消息,总能达成一致;
- D为“忠将”,ABC有2人将D的消息进行正确的传递,同样能保证最终决策符合大多数;
-
进而能够证明,当有3m+1个将军,m个“叛徒”时,可以进行m轮协商,最终达成一致;
共识与一致性
- 不同客户端A和B看到客户端C写入,因为时机的不同,产生数据读取的偏差。称为 Eventually consistent (最终一致性);
- 要保证所有客户端看到相同的值,需要多节点进行“协商”,达成共识,来保证 Linearizability(线性一致性);
- 一致性和可用性是对矛盾;
时间与事件顺序
1978年Leslie Lamport发表《Time, Clocks, and the Ordering of Events in a Distributed System》
- 定义了计算机系统中的时间和事件顺序,引入happened before和并发的定义,可以以此对分布式系统中的事件进行推导;
- 根据上述推导,创造了Lamport逻辑时钟的概念,这个概念在分布式理论中具有革命性的意义,帮助我们在一系列分布式事件当中梳理出逻辑的先后关系。利用逻辑时钟,我们可以对整个系统中的事件进行全序排序;
理论基础
CAP 理论
C (Consistence):一致性;
A (Availability):可用性;
P (Network):分区容错性;
ACID 理论
事务是数据库系统中非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事物中的所有操作要么全部执行,要么全部不执行。
BASE 理论
BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。
分布式事务
两阶段提交
为了使基于分布式系统架构下的所有节点在进行事物提交时保持一致性而设计的一种演算法。
三阶段提交
将二阶段提交中的 Prepare 阶段拆成两部分:CanCommit 和 PreCommit 机制。
MVCC
MVCC 是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。MVCC 为每个修改保存一个版本,和事务的时间戳相关联。
共识协议
Quorum NWR 模型
三要素
- N:在分布式存储系统中,有多少份备份数据
- W:代表一次成功的更新操作要求至少有w份数据写入成功
- R: 代表一次成功的读数据操作要求至少有R份数据成功读取
- 为了保证强一致性,需要保证 W+R>N
Quorum NWR模型将CAP的选择交给用户,是一种简化版的一致性模型
引起的并发更新问题
- 如果允许数据被覆盖,则并发更新容易引起一致性问题
RFAT 协议
概述
- Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。
三种角色
- Leader - 领导者:Leader 负责处理所有的客户端请求,并向Follower同步请求日志,当日志同步到大多数节点上后,通知Follower提交日志;
- Follower - 跟随者:接受并持久化Leader同步的日志,在Leader告知日志可以提交后,提交日志;
- Candidate - 备选者:Leader选举过程中的临时角色。向其他节点发送请求投票信息;
四种定义
- Log(日志):节点之间同步的信息,以只追加写的方式进行同步,解决了数据被覆盖的问题;
- Term(任期号):单调递增,每个Term内最多只有一个Leader;
- Committed:日志被复制到多数派节点,即可认为已经被提交;
- Applied:日志被应用到本地状态机:执行了log中命令,修改了内存状态;
Paxos 协议
分布式实践
MapReduce
分布式KV
总结
对分布式理论有了一定的了解。