分布式系统架构(二)——一致性协议
来源:互联网 发布:关闭端口的命令 编辑:程序博客网 时间:2024/06/06 03:03
分布式系统各个节点都在各自执行自己的事务操作,无法直接获取其他节点执行结果。为保证ACID特性,就需引入一个协调者统一调度分布式节点的执行逻辑。被调度的节点称为参与者。
一、两阶段提交协议:
阶段一:投票
协调者------->参与者发送事务内容,寻味是否可执行事务提交操作
协调者<-------参与者执行事务,并返回事务执行结果(成功or失败) ,并将redo、undo信息记录日志
阶段二:执行
协调者根据参与者事务执行返回结果情况,来决定最终是否进行事务提交操作。
1、执行事务提交
发送commit请求给参与者,参与者提交事务,返回Ack,协调者接收Ack,完成事务
2、不执行,中断事务
发送rollback请求给参与者,参与者利用记录的undo信息执行事务回滚,完成回滚后发送Ack到协调者,协调者接收,完成事务中断。
对每个事务都采用先尝试后提交的方式。
优点:
1、原理简单,实现方便
缺点:
1、同步阻塞:二阶段提交过程中,所有参与者的事务执行都处于阻塞状态,等待响应过程中无法进行其他任何操作
2、协调者单点问题
3、数据不一致:在协调者发送commit请求后,如果发生网络故障,只有部分参与者收到commit请求,则导致分布式系统中出现数据不一致问题。太过保守
二、三阶段提交协议:
将二阶段两步走
阶段一:询问canCommit
协调者------->参与者发送包含事务内容的canCommit请求
协调者<-------参与者判断自身是否可以顺利执行事务,ok则返回yes,反之。
阶段二:预提交preCommit
协调者根据返回结果情况判断是否进行预提交操作(假如任一参与者返回no,或等待超时,就进行事务中断。)。
1、执行事务预提交
协调者------->参与者发送preCommit请求,参与者接收,执行事务操作,记录undo、redo到事务日志
参与者执行成功---返回Ack,并等待commit或abort终止命令。
阶段三:执行提交doCommit
协调者接收了所有参与者执行完成preCommit并返回的Ack,则发送doCommit请求,参与者执行,完成之后,再次返回Ack消息。协调者接收到所有的Ack后,完成事务。
如果有任一参与者返回no response,则发送abort中断指令。
优点:相较于2PC,最大的优点就是降低了参与者阻塞范围。
缺点:并未解决2PC中网络故障导致的数据不一致问题。
三、Paxos算法《待解》:
一种基于消息传递的高容错一致性算法。“拜占庭帝国将军问题”
引入“过半”理念,支持分布式节点间角色轮换,避免分布式单点问题。
- 分布式系统架构(二)——一致性协议
- 分布式系统---分布式一致性协议
- 分布式系统与一致性协议
- 【分布式2】——一致性协议
- 分布式系统常见问题总结(三)- 一致性协议和算法
- 分布式系统中的一致性协议总结
- 分布式系统基本概念(一致性、数据分布、复制策略、分布式协议)
- 分布式系统(三)——分布式共享内存和顺序一致性
- 分布式架构中一致性解决方案——Zookeeper集群搭建
- 分布式架构中一致性解决方案——Zookeeper集群搭建
- 分布式架构中一致性解决方案——Zookeeper集群搭建
- 分布式一致性协议
- 分布式一致性协议paxos
- 2-分布式一致性协议
- 【分布式】一致性协议
- 【分布式】一致性协议
- Raft分布式一致性协议
- 李艳鹏:分布式一致性协议
- 搭建springMVC环境并且写一个helloWorld实例
- java框架基础 静态代理和动态代理
- Log4j日志的输出使用
- [leetcode]123. Best Time to Buy and Sell Stock III(Java)
- HTML5中的两种web存储
- 分布式系统架构(二)——一致性协议
- this指针
- 实现背景颜色随着ScrollView滑动改变的ActionBar
- python list的一些特性
- 巧用郑州SEO九个小技巧 提高网站流量
- Java_基础—集合框架(练习)
- 逆置/反转单链表+查找单链表的倒数第k个节点
- 一个案例 用异步的方式获取内容和图片
- Codeforces346B Lucky Common Subsequence(KMP+dp)