这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天 今天课程的主要内容如下:
- 概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
- 分布式实践
1、概述
1.1 什么是分布式?
- 分布式系统定义:跨多个节点的计算机程序的集合
- 使用分布式系统的五大优势:去中心化、低成本、弹性、资源共享、可靠性高
- 分布式系统的挑战:故障、网络、环境、安全
1.2 常见的分布式系统
- 分布式存储:GFS、Ceph、HDFS、Zookeeper
- 分布式数据库:Spanner、TiDB、HBase、MangoDB
- 分布式计算:Hadoop、YARN、Spark
2、系统模型
2.1 两将军问题
定义:
两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识
结论:
两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识
TCP是两将军问题的一个工程解
2.2 三将军问题:
两个“忠将”A和B,一个“叛徒”C,互相传递消息,消息可能丢失,也可能被篡改,当有一个将军是“叛徒”(即出现拜占庭故障)时,整个系统无法达成一致。
由于“叛徒”C的存在,将军A和将军B获得不同的信息。这样将军A获得2票进攻1票撤退的信息,将军B获得1票进攻2票撤退的信息,产生了不一致
2.3 四将军问题:
将军D作为消息分发中枢,约定如果没收到消息则执行撤退
步骤:
如果D为“叛徒”,ABC无论收到任何消息,总能达成一致 D为“忠将”,ABC有2人将D的消息进行正确的传递,同样能保证最终决策符合大多数。
进而能够证明,当有3m+1个将军,m个“叛徒”时,可以进行m轮协商,最终达成一致
2.4 共识和一致性
不同客户端A和B看到客户端C写入,因为时机的不同,产生数据读取的偏差。引导出最终一致性的详细说明 要保证所有客户端看到相同的值,需要多节点进行“协商”,达成共识,来保证线性一致性 一致性和可用性是对矛盾
3、理论基础
有三大理论:
- CAP
- ACID理论
- BASE理论
3.1 CAP理论
-
CAP的定义,分别代表一致性、可用性、分区容错性。三者无法同时达到
-
CAP诞生了三类系统:
- CA系统:传统数据库的代表
- AP系统:放弃强一致性,保证高可用,不少nosql存储系统采用
- CP系统:放弃可用性,保证数据一致性
-
举例说明两个分布式进程之间同步数据,当出现故障的时候,如何选择不同的CAP系统,以及带来的影响
- CP系统:故障发生时,为了避免读到不一致的数据,可能拒绝访问
- AP系统:故障发生时,为了保证可用性,允许不同进程读到不同的数据
-
针对故障场景,可以通过故障转移的方式,做一个相对较优的解决方式:
- 允许一个进程作为Master,其他进程作为Backup,当故障时将请求转移给Backup进行处理
4、 共识协议
共识协议分为Quorum NWR模型和RAFT协议。其中Raft协议是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。Raft是使用较为广泛的分布式协议。
Paxos算法与RAFT算法区别:
Multi-Paxos 可以并发修改日志,而Raft写日志操作必须是连续的
Multi-Paxos 可以随机选主,不必最新最全的节点当选Leader
5、总结
今天学习了分布式理论基础,涉及到了一些比较复杂的协议和模型,这方面之前没有接触过,这些内容还需要好好消化。