这是我参与「第五届青训营 」伴学笔记创作活动的第7天
本节课重点内容
- 分布式概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
本节详细内容
分布式概述
分布式是什么
分布式系统定义:跨多个节点的计算机程序的集合
使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高
分布式系统的挑战:故障、网络、环境、安全
系统模型
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:节点停止响应,持续性的故障
- Fail-stop failure:错误可检测,是最容易处理的故障
拜占庭将军问题
问: 两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识 答: 两支军队理论上永远无法达成共识,因为无法确定对方发送的信息是否为伪造信息
那问题推广到三个将军的情况呢?
两个“忠将”A和B,一个“叛徒”C,互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”(即出现拜占庭故障)时,整个系统无法达成一致。由于“叛徒”C的存在,将军A和将军B获得不同的信息。这样将军A获得2票进攻1票撤退的信息,将军B获得1票进攻2票撤退的信息,产生了不一致。
那么多少个将军才能保证信息一定不会被篡改呢?
事实上, 对于三个将军中存在一个叛徒的场景, 想要总能达到一致的行动方案是不可能的. 详细的证明可参看Leslie Lamport的论文. 此外, 论文中给出了一个更加普适的结论: 如果存在m个叛将, 那么至少需要3m+1个将军, 才能最终达到一致的行动方案.