这是我参与「第五届青训营」伴学笔记创作活动的第 9 天
今日学习
- 分布式概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
分布式概述
分布式系统是计算机程序的集合,这些程序利用跨多个独立计算节点的计算计算资源来实现共同的目标。可以分为分布式计算、分布式存储、分布式数据库等。
- 优点:
- 去中心化
- 低成本
- 弹性
- 资源共享
- 可靠性高
- 挑战:
- 普遍的节点故障
- 不可靠的网络
- 异构的机器与硬件环境
- 安全
系统模型
-
故障模型
- Byzantine failure:节点可以任意篡改发给其他节点的数据
- Authentication detectable byzantine failure:Byzantine failure 的特例;节点可以篡改数据,但不能伪造其他节点的数据
- Performance failure:节点未在特定时间段收到数据,即时间太早或太晚
- Omission failure:节点收到数据的时间无限晚,即收不到数据
- Crash failure:在 omissions failure 的基础上,增加了节点停止响应的假设,也即持续性的 omission failure
- Fail-stop failure:在 Crash failure 的基础上增加了错误检测的假设
-
共识和一致性
-
时间 和 事件 顺序
理论基础
-
CAP 理论
- Consistence:一致性
- Availability:可用性
- Network partitioning:分区容错性
-
ACID 理论
- Atomicity:原子性
- Consistency:一致性
- Isolation:隔离性
- Durability:持久性
-
BASE 理论
分布式事务
-
二阶段提交:为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种演算法。
-
三个假设
- 引入协调者(Coordinator)和参与者(Participants),互相进行网络通信
- 所有节点都在用预写式日志,且日志被写入后即被保持在可靠的存储设备上
- 所有节点不会永久性损坏,即使损坏后仍然可以恢复
-
需要注意的问题:
- 性能问题:二阶段提交需要多次节点间的网络通信,耗时过大,资源需要进行锁定徒增资源等待时间。
- 协调者单点故障问题:如果事务协调者节点宕机,需要另起新的协调者,否则参与者处于中间状态无法完成事务
- 网络分区带来的数据不一致:一部分参与者收到了 Commit 消息,另一部分参与者没收到 Commit 消息,会导致节点之间数据不一致
-
-
三阶段提交:将二阶段提交中的 Prepare 阶段拆成两部分:CanCommit 和 PreCommit 机制
- 解决的两个问题:单点故障问题和阻塞问题
- 依然存在的问题:性能问题,网络分区场景带来的一致性问题
-
MVCC
- 乐观锁与悲观锁
- MVCC 是一种并发数控制的方法,维持一个数据的多个版本使读写操作没有冲突。所以既不会阻塞写,也不阻塞读。MVCC 为每个修改保存一个版本,和事务的时间戳相关联。可以提高并发性能,解决脏读的问题。
共识协议
-
Quorum NWR 模型
-
三要素
- N:在分布式存储系统中,有多少备份数据
- W:一次成功的更新操作至少有 w 份数据成功写入
- R:一次成功的读数据操作至少有 R 份数据成功读取
-
为保证强一致性,需要保证 W+R>N
-
-
RAFT 协议
-
-
一种分布式一致性的算法(共识算法),即使出现部分节点故障,网络延迟等情况,也不影响各节点,进而提高系统的整体可用性。
- Leader:领导者,通常一个系统中是一主多从。Leader 负责处理所有的客户端请求,并向 Follower 同步请求日志,当日志同步到大多数节点上后,通知 Follower 提交日志。
- Follower:跟随者,不会发送任何请求,接受并持久化 Leader 同步的日志,在 Leader 告知日志可以提交后,提交日志。当 Leader 出现故障时,主动推荐自己为 Candidate。
- Candidate:备选者,Leader 选举过程中的临时角色。向其他节点发送请求投票信息。如果获得大多数选票,则晋升为 Leader。
-
Log:节点之间同步的信息,以只追加写的方式进行同步,解决了数据被覆盖的问题
-
Term:单调递增,每个 Term 内最多只有一个 Leader
-
Committed:日志被复制到多数派节点,即可认为已经被提交
-
Applied:日志被应用到本地状态机:执行了 log 中命令,修改了内存状态
-