这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
一、本堂课重点内容
- 分布式概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
- 分布式实践
二、详细知识点介绍
2.1 分布式概述
2.1.1 基本介绍
定义:分布式系统是利用跨多个独立计算节点的计算资源来实现共同的目标的计算机程序的集合。
优势:去中心化、低成本、弹性、资源共享、可靠性高 挑战:节点故障、不可靠的网络、异构的机器与硬件环境、安全
2.1.2 常见的分布式系统
- 分布式文件系统:
- GSF:google分布式文件系统
- Ceph:统一的分布式存储系统
- Hadoop HDFS:基于GFS架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
- 分布式数据库:
- Google Spanner:google可扩展的、全球分布式的数据库
- TiDB:开源分布式关系型数据库
- HBase:开源Nosql数据库
- MongoDB:文档数据库
- 分布式计算:
- Hadoop:基于MapReduce分布式计算框架
- Spark(基于hadoop):在Hadoop基础之上,使用内存来存储数据
- YARN:分布式资源调度
2.2 系统模型
-
故障模型
- Byzantine failure :节点可以任意篡改发送给其他节点的数据
- Authentication detectable byzantine failure (ADB) :Byzantine failure的特例;节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure :节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure :节点收到数据的时间无限晚,即收不到数据
- Crash failure :在omission failure的基础上,增加了节点停止响应的假设,也即持续性地omission failure
- Fail-stop failure :在Crash failure的基础上增加了错误可检测的假设
-
拜占庭将军问题
- 两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任何信使都可能被俘虏的情况下,就进攻时间达成共识。
- 结论是,两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识。
- 方案:
- 同时发送N个信使,任何一个达到对方军队,都算成功。
- 设置超时时间发送后未在一 定时间返回,则加派信使。
- 共识与消息传递的不同:即使保证了消息传递成功,也不能保证达成共识
- TCP三次握手是在两个方向确认包的序列号,增加了超时重试,是两将军问题的一个工程解。
-
共识和一致性
- Eventually consistent (最终一致性):客户端A读到x=0,当客户端C正在写入时,客户端A和B可能读到0或者1。但是当C写入完成后, A和B最终能读到一致的数据。
- Linearizability (线性一致性):当客户端A读到更新的版本x=1后,及时将消息同步给其他客户端,这样其他客户端立即能获取到x=1。
-
时间和事件顺序
- Lamport逻辑时钟,利用逻辑时钟我们可以对整个系统中的事件进行全序排序
2.3 基础理论
- CAP理论
- 往往运用于数据库领域,同样可以适用于分布式存储方向
- ACID理论
- 数据库事务拥有的四个特性ACID,原子性(A)、一致性(C)、隔离性(I)和持久性(D)
- BASE理论
- 是对CAP中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于CAP定理逐步演化而来的
2.4 分布式事务
- 二阶段提交
- 是为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法---Prepare阶段和Commit阶段。
- 三阶段提交
- 将两阶段提交中的Prepare阶段,拆成两部分:CanCommit和PreCommit机制,解决了单点故障问题和阻塞问题。
- MVCC
- 是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。MVCC为每个修改保存一个版本,和事务的时间戳相关联。可以提高并发性能,解决脏读的问题。
2.5 公识协议
- Quorum NWR模型
- 将CAP的选择交给用户,是是一种简化版的一致性模型。
- RAFT协议
- 是一种分布式一致性算法(共识算法),即使出现部分节点故障,网络延时等情况,也不影响各结点,进而提高系统的整体可用性。也使用了Quorum机制。
- Paxos协议
- 并发随机选主,所有节点都能写入。
三、个人总结
今天学了很多关于分布式的服务过程、基本的分布式框架和协议以及所需的模型,了解了分布式的基本理论概念。对开发过程和分布式有了更深刻的了解。