上QQ阅读APP看书,第一时间看更新
4.4 数据一致性
在分布式场景下,当网络、服务器或者系统软件出现故障,就可能会导致数据一致性的问题。本节介绍数据一致性相关的问题及解决方案。
4.4.1 数据的一致性问题
总的来说,数据的一致性问题包含数据多副本、调用超时、缓存与数据库不一致、多个缓存节点数据不一致等场景。
1.数据多副本场景
如果数据的存储存在多副本的情况,当网络、服务器或者系统软件出现故障时,可能会导致一部分副本写入成功,一部分副本写入失败,造成各个副本之间数据的不一致。
2.调用超时场景
调用超时场景包含同步调用超时和异步调用超时。
同步调用超时往往是由于网络、服务器或者系统软件异常引起的,例如,服务A同步调用服务B时出现超时现象,导致服务A与服务B之间的数据不一致。
异步调用超时是指服务A异步调用服务B,同样是由于网络、服务器或者系统软件异常导致调用失败,出现服务A与服务B之间的数据不一致的情况。一个典型的场景就是支付成功的异步回调通知。
3.缓存与数据库不一致场景
这种场景主要针对缓存与数据库。在高并发场景下,一些热数据会缓存到Redis或者其他缓存组件中。此时,如果对数据库中的数据进行新增、修改和删除操作,缓存中的数据如果得不到及时更新,就会导致缓存与数据库中数据不一致。
4.多个缓存节点数据不一致场景
这种场景主要针对缓存内部各节点之间数据的不一致。例如在Redis集群中,由于网络异常等原因引起的脑裂问题,就会导致多个缓存节点数据不一致。
4.4.2 数据一致性解决方案
业界对于数据一致性问题提出了相应的解决方案,目前比较成熟的方案有ACID特性、CAP理论、Base理论、DTP模型、2PC(两阶段提交)模型、3PC(三阶段提交)模型、TCC模型、可靠消息最终一致性模型、最大努力通知模型等。
ACID特性已在第1章介绍过,其他解决方案会在后续章节进行详细介绍。