最终一致性 - 图1

1 定义与优缺点

和强一致性相对,在某一时刻用户或者进程查询到的数据可能都不同,但是最终成功更新的数据都会被所有用户或者进程查询到。当前主流的nosql数据库都是采用这种一致性策略。

2 模型

2.1 可查询

2.2 幂等

保证消息的幂等性一般有两种方法:

  • 在业务逻辑中保证,有些业务逻辑天生就是幂等性的,比如 Redis 的 set,重复 set 一条记录并没有影响。但业务数据库的库表里重复插入一条记录就有可能有问题,我们可以使用主键,重复插入相同的主键数据库会报错。库表字段的更新一般来说也能保证幂等性,重复更新同一个字段影响不大。
  • 如果无法在业务中保证幂等性,可以增加一个更新记录表来记录已经处理过的消息。

    2.3 TCC

    TCC方案是二阶段提交的一种改进。将整个业务逻辑的每个分支显示的分成了Try、Confirm、Cancel三个操作。Try完成业务的准备工作,Confirm完成业务的提交,Cancel完成事务的回滚。
    TCC方案让应用自己定义数据库操作的粒度,使得降低锁冲突、提高吞吐量成为可能。
    缺点集中表现在以下两个方面:

  • 对应用的侵入性强。业务逻辑的每个分支都需要实现try、confirm、cancel三个操作,应用侵入性较强,改造成本高。

  • 实现难度较大。需要按照网络状态、系统故障等不同的失败原因实现不同的回滚策略。为了满足一致性的要求,confirm和cancel接口必须实现幂等

上述原因导致TCC方案大多被研发实力较强、有迫切需求的大公司所采用。微服务倡导服务的轻量化、易部署,而TCC方案中很多事务的处理逻辑需要应用自己编码实现,复杂且开发量大。

2.4 可补偿

引用资料

作者:Fix12138
链接:https://www.jianshu.com/p/cf036a1da43c
来源:简书