分布式一致性(2pc/3pc/tcc)--极简总结

CAP:

一致性

可用性

分区容错性

最多只能满足2个,

 

BASE:

Basic Avialle / Sofe state/consistent

可用、0.5ms  变成1-2秒

软状态:中间状态,事后补齐数据

一致性:最终一致性

 

 

2PC

第一阶段:预提交,参与者写redo undo /更新数据,但是不提交事务(事务等待,可能会造成大事务

第二阶段:提交数据

分布式一致性(2pc/3pc/tcc)--极简总结

3PC

第一阶段:准备阶段,做一些校验得的事情(超时终止

第二阶段:预提交(超时自动提交

第三阶段:提交()

这里与两阶段提交协议有两个主要的不同:

  • 增加了一个询问阶段,询问阶段可以确保尽可能早的发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生。
  • 增加了等待超时的处理逻辑,如果在询问阶段等待超时,则自动中止;如果在准备阶段之后等待超时,则自动提交。这也是根据概率统计上的正确性最大。

分布式一致性(2pc/3pc/tcc)--极简总结

来自 <https://blog.51cto.com/14528283/2446329>

 

TCC

Try-confirm-cancel

1:try:检查并预留资源

如有资源不够的,则调用cancel;

2:如果都检查OK,则直接提交所有事务(一次性提交,不会有事务等待造成的大事务问题

3:如果comfirm失败一个,则调用所有的cancel

4:网络原因等导致没有收到响应,则重试,重试一定次数还失败的,事务补充

分布式一致性(2pc/3pc/tcc)--极简总结

 

总结一下,相比于二阶段提交协议,TCC 主要有以下区别:

  • 2PC 位于资源层而 TCC 位于服务层。
  • 2PC 的接口由第三方厂商实现,TCC 的接口由开发人员实现。
  • TCC 可以更灵活地控制资源锁定的粒度。
  • TCC 对应用的侵入性强。业务逻辑的每个分支都需要实现 try、confirm、cancel 三个操作,应用侵入性较强,改造成本高。

 

来自 <https://blog.51cto.com/14528283/2446329>