什么是一致性:
程序和系统间的一个契约,在遵循某些约束下,对数据的操作是可预测的
强一致性:强一致性可理解为在单个节点上事件顺序和在多个节点上的事件顺序完全一致,而弱一致性则没有这样的要求
- 线性一致性,所有节点上事件发生的的顺序全部一样,且和全局时间上时间发生的顺序一致
- 顺序一致性,所有节点上事件发生的的顺序全部一样,但是可能和全局时间上发生的顺序不一致
弱一致性:对事件发送的顺序只有部分假设
- 以客户为中心的一致性模型
- 单调读(monotonic-read consistentency):如果一个进程读取某个数据项x的值,那么该进程对x执行的任何后续读操作将总是读取到底以此读取的值或更新的值,白话讲,如果一个进程在T时刻看到x的值,那么他以后不会再读取到叫老版本的值
- 单调写(monotonic-write consistentency):一个进程对数据项x执行的写操作必须在该进程对x执行任何后续写操作前完成
- 读写一致性(read-your-write consistentency):一个进程对x执行一次写操作的结果总是会被该进程对x执行的后续读操作看见
- 写读一致性:(write-follow-reads consistentency):基于读取到的最新值来写
- 因果一致性(causal consistentency):所有进程进程必须以相同的顺序看到潜在因果关系的写操作。不同机器上可以看到不同顺序的写操作
- 最终一致性:经过一段时间数据肯定都会趋于一致
一致性由强到弱:
强一致性>线性一致性>因果一致性>最终一致性
系统角度一致性和客户角度一致性关系
单调写一致性 | 读写一致性 | 写读一致性 | 单调读一致性 | |
---|---|---|---|---|
强一致性 | √ | √ | √ | √ |
线性一致性 | √ | √ | √ | √ |
因果一致性 | √ | × | × | √ |
最终一致性 | × | × | × | × |