众多的“一致性”
说到一致性,大家都不陌生。随着分布式系统、微服务系统、区块链等技术的发展,“一致性”一词出现的频率也越来越高。
然而,“一致性”这一词语所代表的概念却并不唯一。例如我们常听到“事务的一致性”、“最终一致性”、“一致性哈希”等,它们表述的并不是同一个概念。理解这点十分重要。如果错误地认为以上几个“一致性”都指同一个概念,那就搞混了。
在明确以上概念各不相同的基础上,我们介绍下分布式系统中的“一致性”(例如“最终一致性”中的“一致性”)到底指的是什么。
CAP一致性
我们所说的“最终一致性”中的“一致性(Consistency)”是说数据副本存放在分布式系统中的不同节点上,如果用户修改了系统中的数据,则在一定时间后,用户能从系统中读取到修改后的数据。
或者换一种说法,用户在分布式系统的某个节点上进行了变更操作,则在一定时间后,用户能从系统的任意节点上读取到这个变更结果。
因此,这里的“一致性”指的是针对分布式系统的各个节点对外的表现是一致的,就像是一个节点一样。
例如在图所示的分布式系统中存在大量的节点。我们设置a=5,这一操作可能落在任意一个节点上(图中所示写请求落在了节点A上),则在一定时间之后,访问系统一定能读到a=5(图中所示读请求落在了节点H上),则说明这个分布式系统满足一致性。