分布式理论丨青训营笔记
这是我参与「第五届青训营」笔记创作活动的第 14 天。
一、本堂课重点内容
本堂课共从概述、系统模型、理论基础、分布式事务、共识协议、分布式实践这六个方面展开对分布式理论的详细介绍,分布式系统设计需要综合考虑这些方面,以实现一个高性能、高可用、高可靠的分布式系统。本堂课的内容由浅入深,详略得当,能够很好地帮助大家全面具体地认识分布式理论。
二、详细知识点介绍
1. 概述
分布式(Distributed)是指将计算机系统或应用程序的处理和存储功能分布到多个独立的计算机节点中。每个节点都有自己的计算能力、存储能力和通信能力,并且它们相互协作来完成特定的任务。
在分布式系统中,各个节点可以在不同的地理位置上,通过网络连接进行通信和协调。这种设计方式的好处在于,可以提高系统的可靠性、可扩展性和性能。例如,如果某个节点发生故障,其他节点可以接替它的任务,从而保证系统的正常运行;同时,当系统需要扩展处理能力时,可以通过添加更多节点来实现。
分布式系统广泛应用于云计算、大数据、物联网、区块链等领域,这些领域对处理和存储大量数据以及对高性能和可扩展性的需求非常高。
- 使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高
- 分布式系统的挑战:故障、网络、环境、安全
常见的分布式系统如下图所示:
2. 系统模型
故障模型
-
六种故障模型,从处理的难易程度分类
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:节点停止响应,持续性的故障
- Fail-stop failure:错误可检测,是最容易处理的故障
-
故障模型举例,按照模型分类
- 磁盘、主板、交换机、网络分区、cpu、内存、线缆、电源等故障详细说明
拜占庭将军问题
-
两将军问题
-
定义:
- 两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识
-
结论:
- 两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识
-
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写入,因为时机的不同,产生数据读取的偏差。引导出最终一致性的详细说明
- 要保证所有客户端看到相同的值,需要多节点进行“协商”,达成共识,来保证线性一致性
- 一致性和可用性是对矛盾
时间和事件顺序
-
1978年Leslie Lamport发表《Time, Clocks, and the Ordering of Events in a Distributed System》
- 定义了计算机系统中的时间和事件顺序,引入happened before和并发的定义,可以以此对分布式系统中的事件进行推导
- 根据上述推导,创造了Lamport逻辑时钟的概念,这个概念在分布式理论中具有革命性的意义,帮助我们在一系列分布式事件当中梳理出逻辑的先后关系。利用逻辑时钟,我们可以对整个系统中的事件进行全序排序
三、课后个人总结
通过对分布式理论的概述、系统模型进行学习,初步认识到分布式理论在当前的计算机应用中的重要性,有着较为显著的优势,但是同时也面临也巨大的挑战,还需要不断完善改进。