分布式相关理论

104 阅读4分钟

1.png 图片来源

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

分布式相关理论

CAP定理

思想:一个分布式系统不可能同时满足一致性、可用性、分区容错性这三个基本需求,最多只能同时满足其中的2个

  1. 一致性:Consistency

解释:一致性分布式系统当中的一致性指的是所有节点的数据一致,或者说是所有副本的数据一致

示例:写入主数据库后,在向从数据库同步期间要将从数据库锁定, 等待同步完成后在释放锁

  1. 可用性:Availability

解释:系统一直可用,而且服务一直保持正常

示例:写入主数据库后,要向从数据库同步,数据未同步成功时,也要返回查询数据,不能返回错误和超时

  1. 分区容错性:Partition tolerance

解释:分区容错性系统在遇到一些节点或者网络分区故障的时候,仍然能够提供满足一致性和可用性的服务

示例:使用异步数据从主数据同步到从数据库,添加数据库节点。一个节点挂掉,从其它节点同步

BASE 理论

思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性

  1. Basically Available(基本可用)

解释:系统出现故障时,损失部分可用性,整体依然可以运行

  1. Soft state(软状态)

解释:允许系统中的数据存在中间状态,该状态不影响系统的整体可用性,即允许副本在不同的多个节点同步时存在延迟

  1. Eventually consistent(最终一致性)

解释:数据最终一定能够达到一致的状态

分布式事务

2PC

两阶段提交,将事务的提交过程分为资源准备和资源提交两个阶段,并且由事务协调者来协调所有事务参与者,如果准备阶段所有事务参与者都预留资源成功,则进行第二阶段的资源提交,否则事务协调者回滚资源

  1. 资源准备
  • 协调者向所有参与者发送事务内容,询问是否可以提交事务,并等待答复
  • 各参与者执行本地事务操作,将 undo 和 redo 信息记入事务日志中(但不提交事务)
  • 如参与者执行成功,给协调者反馈同意,否则反馈中止,表示事务不可以执行
  1. 资源提交
  • 事务提交

    • 协调者节点向所有参与者节点发出正式提交的 commit 请求
    • 收到协调者的 commit 请求后,参与者正式执行事务提交操作,并释放在整个事务期间内占用的资源
    • 参与者完成事务提交后,向协调者节点发送ACK消息
    • 协调者节点收到所有参与者节点反馈的ACK消息后,完成事务
  • 事务回滚

    • 协调者向所有参与者发出 rollback 回滚操作的请求
    • 参与者利用阶段一写入的undo信息执行回滚,并释放在整个事务期间内占用的资源
    • 参与者在完成事务回滚之后,向协调者发送回滚完成的ACK消息
    • 协调者收到所有参与者反馈的ACK消息后,取消事务
  1. 缺点
    • 性能问题:执行过程中,所有参与节点都是事务阻塞性的,当参与者占有公共资源时,其他第三方节点访问公共资源就不得不处于阻塞状态,为了数据的一致性而牺牲了可用性,对性能影响较大,不适合高并发高性能场景
    • 可靠性问题:2PC非常依赖协调者,当协调者发生故障时,尤其是第二阶段,那么所有的参与者就会都处于锁定事务资源的状态中,而无法继续完成事务操作
    • 数据一致性问题:在阶段二中,当协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交

3PC

改进点:把2PC的准备阶段拆分成CanCommit和PreCommit两个阶段,同时引入超时机制来解决2PC的同步阻塞问题

缺点:数据不一致问题依然存在

  1. CanCommit 准备阶段

    • 协调者向参与者发送 canCommit 请求,参与者如果可以提交就返回Yes响应,否则返回No响应
  2. PreCommit 阶段

    • 协调者根据参与者的反应情况来决定是否可以进行事务的 PreCommit 操作

总结

本次笔记记录部分分布式相关理论,有兴趣的同学可以自行百度