zk分布式一致性

2019-10-31  本文已影响0人  指尖架构141319

1.两阶段提交(2PC)

2pc:两阶段提交算法,需要保证任何一个资源都成功,整个分布式事务才成功;

它本身是一致强一致性算法,所以很适合用作数据库的分布式事务。其实数据库的经常用到的 TCC 本身就是一种 2PC。

1.1 优点:

操作简单

1.2 缺点:

2.三阶段提交(3pc)

由于二阶段提交存在着诸如同步阻塞、单点问题,所以,研究者们在二阶段提交的基础上做了改进,提出了三阶段提交


image.png
2.1 第一阶段 canCommit

确认所有的资源是否都是健康、在线的,以约女孩举例,你会打个电话问下她是不是在家,而且可以约个会。

就因为有了这一阶段,大大的减少了 2 段提交的阻塞时间,在 2 段提交,如果有 3 个数据库, 恰恰第三个数据库出现问题,其他两个都会执行耗费时间的事务操作,到第三个却发现连接 不上。3 段优化了这种情况

2.2 第二阶段 PreCommit

如果所有服务都 ok,可以接收事务请求,这一阶段就可以执行事务了,这时候也是每个资源都回写 redo 与 undo 日志,事务执行成功,返回 ack(yes),否则返回 no

2.3 第三阶段 doCommit

这阶段和前面说的 2 阶段提交大同小异,这个时候协调者发现所有提交者事务提交者事务都正常执行后,给所有资源发送 commit 指令。

和二阶段提交有所不同的是,他要求所有事务在协调者出现问题,没给资源发送 commit 指令的时候,三阶段提交算法要求资源在一段时间超时后回默认提交做 commit 操作
这样的要求就减少了前面说的单点故障,万一事务管理器出现问题,事务也回提交。
但回顾整个过程,不管是 2pc,还是 3pc,同步阻塞,单点故障,容错机制不完善这些问题都 没本质上得到解决,尤其是前面说得数据一致性问题,反而更糟糕了。
所有数据库的分布式事务一般都是二阶段提交,而者三阶段的思想更多的被借鉴扩散成其他 的算法。

2.4 和2pc对比
2.5 优点
2.6 缺点

3.Paxos

image.png
核心:少数服从多数
协议要求:
1.如果接收者没有收到过提案编号,他必须接受第一个提案编号
2.如果接收者没有收到过其他协议,他必须接受第一个协议
3.1 第一阶段

少数服从多数后,进行下一阶段

3.2 第二阶段
上一篇 下一篇

猜你喜欢

热点阅读