技术编程|分布式一致性算法,你确定不了解一下( 二 )


Basically Available基本可用:指分布式系统在出现不可预知的故障的时候 , 允许损失部分可用性——但不是系统不可用 。响应时间上的损失:假如正常一个在线搜索0.5秒之内返回 , 但由于故障(机房断电或网络不通) , 查询结果的响应时间增加到1—2秒 。 功能上的损失:如果流量激增或者一个请求需要多个服务间配合 , 而此时有的服务发生了故障 , 这时需要进行服务降级 , 进而保护系统稳定性 。
Soft state软状态:允许系统在不同节点的数据副本之间进行数据同步的过程存在延迟 。
Eventually consistent最终一致:最终数据是一致的就可以了 , 而不是时时高一致 。
BASE思想主要强调基本的可用性 , 如果你需要High 可用性 , 也就是纯粹的高性能 , 那么就要以一致性或容错性为牺牲 。 一致性协议
一致性协议:为了使基于分布式系统架构下的所有节点进行事务处理过程中能够保持原子性和一致性而设计的一种算法 。 通常有二阶段提交协议、三阶段提交协议、Paxos、Zookeeper的ZAB协议、Raft、Pbft等 。
2PC、3PC引入了两个概念 。
**协调者:**负责统一调度分布式节点的执行逻辑
参与者:被调度的分布式节点2PC:Two-Phase Commit二阶段提交协议
二阶段主要采取:先尝试 , 后提交 。

技术编程|分布式一致性算法,你确定不了解一下
本文插图


技术编程|分布式一致性算法,你确定不了解一下
本文插图


技术编程|分布式一致性算法,你确定不了解一下
本文插图

2PC优缺点
二阶段优点:原理简单 , 实现方便;解决分布式事务的原子性 , 要么全部执行成功 , 要么全部执行失败
二阶段缺点: 同步阻塞:在提交执行过程中 , 各个参与者都在等待其他参与者响应的过程中 , 将无法执行其他操作 。 单点问题:只有一个协调者 , 协调者挂掉 , 整个二阶段提交流程无法执行;更为严重是 , 在阶段二时 , 协调者出现问题 , 那参与者将会一直处于锁定事务状态中 , 无法继续完成事务操作 。 数据不一致:在阶段二 , 协调者发送了Commit请求后 , 发生了网络故障 , 导致只有部分参与者收到commit请求 , 并执行提交操作 , 就导致数据不一致问题 。 太过保守:阶段一中 , 若参与者出现故障 , 协调者无法收到参与者的询问反馈 , 只能通过自身超时机制来中断事务 。 这样的策略显得过于保守 。 3PC:Three-phase Commit 三阶段提交协议
因为2PC有很多问题 , 所以在2PC基础上 , 改进为3PC:canCommit、preCommit、doCommit三个阶段 。
改进点:
3PC是将2PC的第一阶段分为两个阶段 , 先发起事务询问 , 再执行事务 。
同时在协调者、参与者中引入超时机制 。

技术编程|分布式一致性算法,你确定不了解一下
本文插图

3PC-第一阶段

技术编程|分布式一致性算法,你确定不了解一下
本文插图

3PC-事务中断1

技术编程|分布式一致性算法,你确定不了解一下
本文插图

3PC-第三阶段

技术编程|分布式一致性算法,你确定不了解一下
本文插图

3PC优缺点
三阶段优点: 降低了二阶段的同步阻塞范围(在第二阶段 , 只要参与者收到preCommit请求 , 就会执行事务 , 此后 , 不管能不能收到协调者的doCommit请求,都会执行事务提交 , 不会出现阻塞问题)解决单点问题:进入阶段三会出现两种情况: 1:协调者出现问题; 2:协调者与参与者之间出现网络故障; 都导致参与者无法收到doCommit请求 , 但参与者在超时之后都会提交事务


推荐阅读