这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天
一、本堂课重点内容:
- 分布式概述
- 系统模型
- 理论基础
- 分布式事务
- 共识协议
- 分布式实践
二、详细知识点介绍:
-
分布式系统
- 优势
- 去中心化 多台服务器相较于单台服务器的计算能力的提升
- 低成本
- 弹性 服务的扩缩容
- 资源共享
- 可靠性高 多副本冗余的存储
- 挑战
- 节点故障
- 网络的不可靠性
- 异构的机器与硬件环境
- 安全
- 优势
-
分布式系统的故障模型(故障程度递减)
- 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连接)
-
共识和一致性
- 最终一致性与线性一致性(强一致性)
- 最终一致性 在写入完成之前可能读到新数据也可能读到旧数据;在写节点完成写入后,最终其他节点可以读取一致的数据
- 线性一致性 在写入完成之前如果读到新数据就及时同步给其他节点,但是需要节点之间的协商,增加系统的延迟,可用性降低
-
CAP理论
- Consistence 一致性 数据在多个副本之间保持一致的特性(强一致性)
- Availability 可用性 系统提供的服务处于可用的状态,每次请求都有非错的响应,但不保证是最新的数据
- Network Partitioning 分区容错性 在网络分区出现故障的时候,仍然能够提供一致性与可用性的服务,除非整个网络服务出现故障
- CAP在分布式存储中永远无法满足CAP三个特性同时满足的情况
- CA 放弃分区容错性 往往是单机数据库
- AP 放弃一致性(强一致性)追求A与P 注重用户体验
- CP 放弃可用性 追求C与P 例如一些与钱财相关的财务系统
-
ACID理论
- 事务的ACID原则 是数据库执行过程中的一个逻辑单元
- 要注意事务的一致性与CAP中的一致性的区别
-
BASE理论
- Basically Available (基本可用):假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:响应时间上的损失,或功能上的损失
- Soft state(软状态):允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。
- Eventually consistent (最终一致性):系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。
-
两阶段提交
- 引入协调者与参与者 互相进行网络通信
- 所有节点采用预写式日志,且日志被写入后可以保存在存储设备上
- 所有节点不会损坏,损坏后可以恢复
- 可能出现的问题
- 协调者不宕机、参与者宕机 必须执行回滚操作
- 协调者宕机、参与者不宕机 重新选取协调者,查询状态继续执行
- 两个都宕机 无法确认状态 需要管理员介入
- 要注意的问题
- 性能问题 需要多次网络通信耗时过大
- 协调者单点故障问题 需要快速选取新的协调者
- 网络分区带来的数据不一致问题 一部分收到commit 另一部分未收到commit
- 三阶段提交
- prepare阶段分成了两部分 CanCommit与PreCommit
- 解决单点故障以及阻塞问题
- 引入超时机制 在等待超时后会继续进行事务提交
-
MVCC
- 维持一个数据的多版本 使读写操作没有冲突
- 为每个修改都保存一个版本,根据事务的时间戳相关联
-
共识协议
- Quorum NWR模型
- N 分布式系统中的副本数量
- W 每次写入同步改变的副本数量 其余副本异步修改
- R 每次读取同步读取的副本数量
- 若 W+R>N 则表示该系统为强一致性系统
- 可以将选择权交给用户 是一种简化版的一致性模型
- Quorum NWR模型