分布式一致性(2pc/3pc/tcc)--极简总结
CAP:
一致性
可用性
分区容错性
最多只能满足2个,
BASE:
Basic Avialle / Sofe state/consistent
可用、0.5ms 变成1-2秒
软状态:中间状态,事后补齐数据
一致性:最终一致性
2PC
第一阶段:预提交,参与者写redo undo /更新数据,但是不提交事务(事务等待,可能会造成大事务)
第二阶段:提交数据
3PC
第一阶段:准备阶段,做一些校验得的事情(超时终止)
第二阶段:预提交(超时自动提交)
第三阶段:提交()
这里与两阶段提交协议有两个主要的不同:
- 增加了一个询问阶段,询问阶段可以确保尽可能早的发现无法执行操作而需要中止的行为,但是它并不能发现所有的这种行为,只会减少这种情况的发生。
- 增加了等待超时的处理逻辑,如果在询问阶段等待超时,则自动中止;如果在准备阶段之后等待超时,则自动提交。这也是根据概率统计上的正确性最大。
来自 <https://blog.51cto.com/14528283/2446329>
TCC
Try-confirm-cancel
1:try:检查并预留资源
如有资源不够的,则调用cancel;
2:如果都检查OK,则直接提交所有事务(一次性提交,不会有事务等待造成的大事务问题)
3:如果comfirm失败一个,则调用所有的cancel
4:网络原因等导致没有收到响应,则重试,重试一定次数还失败的,事务补充
总结一下,相比于二阶段提交协议,TCC 主要有以下区别:
- 2PC 位于资源层而 TCC 位于服务层。
- 2PC 的接口由第三方厂商实现,TCC 的接口由开发人员实现。
- TCC 可以更灵活地控制资源锁定的粒度。
- TCC 对应用的侵入性强。业务逻辑的每个分支都需要实现 try、confirm、cancel 三个操作,应用侵入性较强,改造成本高。
来自 <https://blog.51cto.com/14528283/2446329>