弱一致性
文章目录
Introduce
对于CAP而言,partition-tolerant是客观的必须要做的,不然不能称之为分布式系统;而consistent和available则是主观的, 应当根据业务需求适当调整的。相对于linearizability的强一致,其实还有多种弱一致性模型可以供系统设计时参考, 这里着重描述两种重要的一致性模型
Data-centric consistent models
Causal Consistency
与linearizability相同,causal consistency同样属于data-centric consistent models。与前者明显的区别在于,linearizability的系统的所有操作都存在total order,而causal consistency只需要partial order即可。
定义:
对于所有的进程看到的所有的写操作,都是因果相关的(causally related)且顺序相同。所有的读操作看到的结果也需要和写的因果顺序一致
如图:
两次写操作没有因果关系(concurrence),所以后续的两个client的读结果不相同,但这符合causal consistency的定义
How
实现causally related partital order即可,例如vector clock + causal order multicast protocol
Client-centric consistent models
Eventual Consistency
最终一致性比较好容易理解,很多primary-backup(asynchronous)架构的RDBMS都是使用的最终一致性模型
定义:
如果没有新的更新/写入,最终所有的clients都会看到最新的数据
最终是多久,不好说…
典型例子:
DNS系统
How
asynchronous log shipping + gossip protocal
References
文章作者 1Feng
上次更新 2017-06-14