分布式系统的一致性模型

什么是分布式系统的一致性? 

  • 提到分布式架构就一定绕不开 "一致性" 问题,而"一致性"其实又包含了数据一致性事务一致性两种情况,本文主要讨论数据一致性事务一致性指ACID)。
  • 复制是导致出现数据一致性问题的唯一原因。

如果只用一台数据库来处理所有的写入和读取请求,就一定不存在数据一致性的问题,但是在中大型项目中,我们却经常需要将一份数据存储在超过一台数据库中(即复制),原因有三:

  1. 即使一部分数据库出现故障,系统也能正常工作(高可用)
  2. 使数据与用户在地理上接近(降低延迟)
  3. 扩展可以处理读请求的机器数量(可扩展性,提高读取吞吐量)
  • 分布式系统的一致性模型对保证系统的一致性可靠性起着关键作用。 

通俗易懂的理解强一致性、弱一致性和最终一致性! 

强一致性 与 弱一致性

  • 其实只有两类数据一致性,强一致性与弱一致性。

强一致性也叫做线性一致性,除此以外,所有的其它一致性都是弱一致性的特殊情况

强一致性、弱一致性和最终一致性是分布式系统中不同的一致性模型,用于描述系统中数据副本之间的一致性状态。

  1. 强一致性(Strong Consistency):在强一致性模型下,系统保证在任何时间节点都可以看到一个全局一致的数据副本,这意味无论客户端读取或写入数据,都会得到最新、最准确的结果,并且写操作完成后,所有的副本都会立即生效,强一致性模型通常牺牲了可用性来实现数据的一致性。
  2. 弱一致性(Weak Consistency):在弱一致性模型下,系统中的数据副本之间可以出现一段时间的不一致,这意味着在写操作后,不同的数据副本可能会有不同的数据状态,并且读取操作可能无法读到最新的写入结果,弱一致性模型允许一定的数据延迟和冲突,但要求最终达到一致状态,弱一致性模型通常更注重可用性,允许一定程序的数据不一致性。
  3. 最终一致性(Eventual Consistency):最终一致性模型是弱一致性模型的一种特例,在最终一致性模型下,随着时间的推移,系统中的数据副本会在经过一段时间后最终达到一致状态。最终一致性模型兼顾了性能和可用性,广泛应用于分布式系统中。

需要根据具体的场景和需求来选择合适的一致性模型,强一致性模型适用于对数据一致性要求非常高的场景,而弱一致性和最终一致性模型则适用于需要高性能和高可用的分布式系统。

  • 强一致性模型包括线性一致性和顺序一致性等子模型。 

线性一致性  &  顺序一致性

  • 线性一致性和顺序一致性是两种强一致性模型。

线性一致性是一种最强的一致性模型,它强调在分布式系统中的任何时间点,读操作都应该返回最近的写操作的结果,线性一致性强调实时性,要求操作在实际时间上的顺序保持一致。

顺序一致性也是一种强一致性模型,但相对于线性一致性而言,顺序一致性不强调实时性,顺序一致性只要求操作的顺序必须是一致的,但一定要求操作的实际时间顺序。

举例:
  • 比如在Zookeeper当中,其实就是通过ZAB算法来保证的顺序一致性,即各个节点之间的写入顺序要求一致。 
  • Zookeeper是一个CP的分布式系统,所以它会牺牲可用性,作为Zookeeper的核心实现算法ZAB,就是解决了分布式系统下数据如何在多个服务之间保持同步问题的。
  • Zookeeper保证的是强一致性模型中的顺序一致性而不是线性一致性。

你可能感兴趣的:(分布式,微服务,zookeeper)