一致性模型
强一致性
当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值,直到这个数据被其他数据更新为止。
但是这种实现对性能影响较大,因为这意味着,只要上次的操作没有处理完,就不能让用户读取数据。
弱一致性
系统并不保证进程或者线程的访问都会返回最新更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。但会尽可能保证在某个时间级别(比如秒级别)之后,可以让数据达到一致性状态。
最终一致性
最终一致性也是弱一致性的一种,它无法保证数据更新后,所有后续的访问都能看到最新数值,而是需要一个时间,在这个时间之后可以保证这一点,而在这个时间内,数据也许是不一致的,这个系统无法保证强一致性的时间片段被称为「不一致窗口」。不一致窗口的时间长短取决于很多因素,比如备份数据的个数、网络传输延迟速度、系统负载等。
CAP定理(强一致性)
- 一致性(Consistence):所有节点在同一时间的看到的数据相同。
- 可用性(Availability):client任何时刻的读写操作永远都能在限定的时间内完成,即服务一直可用。
- 分区容错性(Partition tolerance):即使系统的某个分区遇到严重的故障,系统能继续提供服务。
BASE定理(弱一致性)
BASE是指
-
基本可用(Basically Available): 出现故障的时候,允许损失部分可用性,即,保证核心可用。
如,电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务
-
软状态(Soft State): 本质上是一种弱一致性,允许的软状态不能违背“基本可用”的要求。
如,分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时(某些时刻副本数低于3).允许系统存在中间状态,而该中间状态不会影响系统整体可用性.
-
最终一致性(Eventual Consistency)。系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。软状态的终极目标是最终一致性。
如,分布式存储的副本数最终会达到稳定状态。