基础理论
先简单介绍下数据一致性的基础理论。
-
强一致
当更新操作完成之后,任何多个后续进程或者线程的访问都会返回最新的更新过的值。这种是对用户最友好的,就是用户上一次写什么,下一次就保证能读到什么。根据 CAP 理论,这种实现需要牺牲可用性。 -
弱一致性
系统并不保证续进程或者线程的访问都会返回最新的更新过的值。系统在数据写入成功之后,不承诺立即可以读到最新写入的值,也不会具体的承诺多久之后可以读到。 -
最终一致性
弱一致性的特定形式。系统保证在没有后续更新的前提下,系统能最终返回上一次更新操作的值。在没有故障发生的前提下,不一致窗口的时间主要受通信延迟,系统负载和复制副本的个数影响。DNS 是一个典型的最终一致性系统。
ACID模型
ACID是传统数据库常用的设计理念,追求强一致性模型。
关系数据库的ACID模型拥有 高一致性 + 可用性 很难进行分区:
Atomicity 原子性:一个事务中所有操作都必须全部完成,要么全部不完成。
Consistency 一致性: 在事务开始或结束时,数据库应该在一致状态。
Isolation 隔离性: 事务将假定只有它自己在操作数据库,彼此不知晓。
Durability 持久性:一旦事务完成,更新就是持久性的,无论断电或者宕机数据都不会丢失。
ACID模型要求一个事物必须满足上面的四点,这是对关系型传统数据库的指导性依据。而非关系型数据库NoSql则不再依赖这一模型。
CAP理论
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM