一致性是一个比较抽象的概念,涉及computer science的多个领域,例如:
- 分布式数据存储(例如分布式数据库/分布式文件系统/消息队列)的读写一致性
- 传统关系数据库事务隔离级别,并发事务的一致性模型
- 共享内存的多核架构中,多个cpu core之间的缓存一致性(cache coherence)
- Web cache集群的数据一致性
- 图右半部分,是关系数据库的consistency model。从上到下,一致性的级别越来越低,并发性能会更好些。不同数据库对于事务隔离级别的定义有所不同。
- RR(repeatable read)
- > CS(cursor scability)
- > RC( read commit)。
- 图左半部分,是从分布式系统的consistency model。WFR是write follows read, MR MW分别是monotonic read,monotonic write。
- Linearizable(线性)
- > Sequential(顺序)
- > Causal(因果)
- > RyW(read your write)。
- 根据CAP理论,图中红色部分的一致性模型,无法满足100%的可用性,只能达到CP
Sequential consistency: Java内存模型
Causal consistency(因果一致性)
如果Process A通知Process B它已经更新了数据,那么Process B的后续读取操作则读取A写入的最新值,而与A没有因果关系的C则可以最终一致性。
Read-your-writes consistency
如果Process A写入了最新的值,那么Process A的后续操作都会读取到最新值。但是其它用户可能要过一会才可以看到。
Session consistency
此种一致性要求客户端和存储系统交互的整个会话阶段保证
Read-your-writes consistency
Hibernate的session提供的一致性保证就属于此种一致性。
Monotonic read consistency
此种一致性要求如果Process A已经读取了对象的某个值,那么后续操作将不会读取到更早的值。
Monotonic write consistency
此种一致性保证系统会序列化执行一个Process中的所有写操作
二、ZooKeeper的保证(Consistency Guarantees)
ZooKeeper是一个高效的、可扩展的服务,read和write操作都被设计为快速的,read比write操作更快。
1、顺序一致性(Sequential Consistency):从一个客户端来的更新请求会被顺序执行。
2、原子性(Atomicity):更新要么成功要么失败,没有部分成功的情况。
3、唯一的系统镜像(Single System Image):无论客户端连接到哪个Server,看到系统镜像是一致的。
4、可靠性(Reliability):更新一旦有效,持续有效,直到被覆盖。
5、时间线(Timeliness):保证在一定的时间内各个客户端看到的系统信息是一致的。
出处