[分布式理论|青训营笔记]
这是我参与「第五届青训营 」伴学笔记创作活动的第 8 天
一 本课重点内容
- 分布式概述
- 什么是分布式
- Why-How-What
- 常见的分布式系统
- 系统模型
- 故障模型
- 拜占庭将军问题
- 共识和一致性
- 时间和事件顺序
- 理论基础
- CAP 理论
- ACID 理论
- BASE 理论
- 分布式事务
- 两阶段提交
- 三阶段提交
- MVCC
- 共识协议
- Quorum NWR 模型
- RAFT 协议
- Paxos 协议
- 分布式实践
- MapReduce
- 分布式 KV
二 详细知识点介绍
2.1 分布式概述
分布式系统是计算机程序的集合。这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
Why-How-What
使用者视角
- Why
- 数据爆炸,对存储和计算有大规模运用的需求
- 成本低,构建在廉价服务器之上
- How
- 分布式框架
- 成熟的分布式系统
- what
- 理清规模、负载、一致性需求等
- 明确稳定性要求,制定技术方案
学习者视角
- Why
- 后端开发必备技能
- 帮助理解后台服务器之间协作的理解
- How
- 掌握分布式理论
- 了解一致性协议
- What
- 把要点深入展开,针对难点搜索互联网资料进行学习
- 将所学知识应用于实践
常见分布式系统
- 分布式存储
- GFS
- Ceph
- Hadoop HDFS
- Zookeeper
- 分布式数据库
- Google Spanner
- TiDB
- HBase
- MongoDB
- 分布式计算
- Hadoop
- Spark
- YARN
2.2 系统模型
- 故障模型
- Byzantine failure:节点可以任意篡改发送给其节点的数据
- ADB:Byzantine failure的特例,节点可以篡改数据但不能伪造数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据时间无限晚,即收不到数据
- Crash failure:持续性 Omission failure
- Fail-stop failu:在Crash failure的基础上增加了错误可检测的假设
- 拜占庭将军问题
- 共识和一致性
- 时间和事件顺序
- happened before 顺序
- Lamport 逻辑时钟
2.3 理论基础
CAP 理论
- C:一致性
- A:可用性
- P:分区容错性 往往运用于数据库领域,同样可以适用于分布式存储方向
在网络发生分区的情况下,必须在可用性和一致性之间做出抉择。近似解决办法:把故障节点的负载转移给备用节点负责
ACIP 理论
数据库事务拥有四个特性:
- A:原子性
- C:一致性
- I:隔离性
- D:持久性
BASE 理论
是对 CAP 中一致性和可用性权衡的结果,其来源于对大部分互联网分布式实践的总结,是基于 CAP 定理逐步演化来的。
- Basically available:出现了不可预知的故障但是还能用
- Soft state:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性
- Eventually consistent:系统能够保证在没有新的更新操作下,数据最终能达到一致的状态
2.4 分布式事务
二阶段提交
为了使基于分布式系统架构下所有节点在事务提交时保持一致性而设计的一种演算法。
三个假设
- 引入协调者和参与者,互相进行网络通信
- 所有节点都采用预写式日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会永久性损坏
需要注意的问题:
- 性能问题
- 协调者单点故障问题
- 网络分区带来的数据不一致
三阶段提交
将两阶段提交中的 Prepare 阶段拆成两部分:Cancommit 和 Precommit 机制。解决了单点故障问题和阻塞问题。另外引入超时机制,在等待超时后会继续事务的提交。
MVCC
是一种并发控制的方法,维持一个数据的多个版本使读写操作没有冲突,所以既不会阻塞写也不会则苏读。MVCC为每个修改保存一个版本,和事务的时间戳相关联。可以提高并发性能,解决脏读的问题。
2.5 共识协议
Quorum NWR 模型
Quorum NWR 三要素:
- N:在分布式存储系统中,有多少备份数据
- W:代表一次成功的更新操作要求至少有 W 份数据写入成功
- R:代表一次成功的读数据操作至少有 R 份数据成功读取 为保持强一致性,需要保证 W+R>N。将 CAP 的选择交给用户,是简化版的一致性模型。
RAFT 协议
是一种分布式一致性算法。既是出现部分节点故障,网络延时等情况,也不影响各节点,进而提高系统的整体可用性。是使用较为广泛的分布式协议,一定意义上使用了 Quarum 机制。
Paxos 协议
与 RAFT 算法的区别:
- 可以并发修改日志
- 可以随机选主
- 优势:写入并发性能高
- 劣势:没有一个节点有完整的最新数据,恢复流程复杂
三 实践练习例子
分布式实践
- MapReduce
- 分布式 KV