这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
分布式概述
什么是分布式
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算资源来实现共同的目标。
可以分为分布式计算、分布式存储、分布式数据库等。
常见分布式系统
分布式存储
- GFS:google 分布式文件系统
- Ceph:统一的分布式存储系统
- HDFS:基于 GFS 架构的开源分布式文件系统
- Zookeeper:高可用的分布式数据管理与系统协调框架
分布式数据库
- Spanner:google 可扩展的、全球分布式的数据库
- TiDB:开源分布式关系型数据库
- HBase:开源 Nosql 数据库
- MangoDB:文档数据库
分布式计算
- Hadoop:基于 MapReduce 分布式计算框架
- YARN:在 Hadoop 基础之上,使用内存来存储数据
- Spark:分布式资源调度
系统模型
故障模型
- Byzantine failure:节点可以任意篡改发送给其他节点的数据,是最难处理的故障
- Authentication detectable byzantine failure (ADB):节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段内收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:节点停止响应,持续性的故障
- Fail-stop failure:错误可检测,是最容易处理的故障
拜占庭将军问题
定义
两支军队的将军只能派信使穿越敌方领土互相通信,以此约定进攻时间。该问题希望求解如何在两名将军派出的任
何信使都可能被俘虏的情况下,就进攻时间达成共识
结论
两将军问题是被证实无解的电脑通信问题,两支军队理论上永远无法达成共识
共识和一致性
线性一致性:后面的客户端发起读请求不可能比前面的客户端发起的读请求读到的版本更久远
时间和事件顺序
具体见 Leslie Lamport 的《Time, Clocks, and the Ordering of Events in a Distributed System》
理论基础
CAP 理论
- C:一致性
- A:可用性
- P:分区容错性
CAP 不能同时 100% 达到
ACID 理论
- A:原子性(Atomicity)
- C:一致性(Consistency)
- I:隔离性(Isolation)
- D:持久性(Durability)
BASE 理论
针对 AP 系统,是大型互联网分布式实践的总结
分布式事务
二阶段提交
Prepare 阶段和 Commit 阶段
三阶段提交
在二阶段提交的基础上增加 CanCommit 阶段
MVCC
多版本并发控制
共识协议
Quorum NWR 模型
- N:在分布式存储系统中,有多少份备份数据
- W:代表一次成功的更新操作要求至少有w份数据写入成功
- R: 代表一次成功的读数据操作要求至少有R份数据成功读取
- 为了保证强一致性,需要保证 W+R>N
RAFT 协议
分布式一致性算法(共识算法)
深入了解建议学习 MIT 6.824 课程,后续我将发布 lab 笔记于专栏 6.824
Paxos 协议
为 RAFT 协议的前身,更复杂
分布式实践
MapReduce
MIT 6.824 lab1 即设计一个 MapReduce 系统,可见专栏 6.824
分布式 KV
设计一个简易的分布式键值系统,要求具备弹性的能力和达成线性一致