目录
3.3、TCC模式(Try-Confirm-Cancel)----这个像 【两阶段提交协议】
一、解题思路:
【最终一致性】:是指系统中的所有数据副本经过一段时间后,最终能够达到一致的状态。这里所说的一段时间,也要是用户可接受范围内的一段时间。
eg: 第一阶段----完成某项业务;第二阶段----n个dataSource的数据都进行更新并保证一定成功;
第一阶段好说,但你如何保证第二阶段的n个dataSource更新一定都成功?比如就有1个dataSource没更新呢?你凭什么保证,如何代码控制?
- 事务:n个dataSource要么全部更新成功,要么全部都不更新;
eg: 两阶段提交协议,三阶段提交协议;
- 非事务: 不用事务概念后搞不好就有某个dataSource失败的,真这样了只能补偿;
但凭什么保证补偿一定成功?
要么我暴力的“不停重试,直到成功”;eg:事务型消息队列
要么“第二阶段失败的概率比较小”,我稍微补偿一下就可以;eg:补偿任务
ps: 还有小概率真的不会成功,那怎么办?第二阶段每隔一段时间主动汇报执行结果;
二、最终一致性的常用做法
1、单数据库事务