当前位置:首页 » NoSQL在线教程 » NoSQL最终一致性

NoSQL最终一致性

NoSQL最终一致性 - 变体- BASE 学习和介绍,为了更好的描述客户端一致性,我们通过以下的场景来进行,这个场景中包括三个组成部分:

一言以蔽之:过程松,结果紧,最终结果必须保持一致性

为了更好的描述客户端一致性,我们通过以下的场景来进行,这个场景中包括三个组成部分:

· 存储系统

存储系统可以理解为一个黑盒子,它为我们提供了可用性和持久性的保证。

· Process A

ProcessA主要实现从存储系统writeread操作

· Process B ProcessC 

ProcessBC是独立于A,并且BC也相互独立的,它们同时也实现对存储系统的writeread操作。


下面以上面的场景来描述下不同程度的一致性:

· 强一致性

强一致性(即时一致性) 假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值

· 弱一致性

假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新值。此种情况下有一个不一致性窗口的概念,它特指从A写入值,到后续操作A,B,C读取到最新值这一段时间。

· 最终一致性

最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,B,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,不一致性窗口的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。

变体

· 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.Hibernatesession提供的一致性保证就属于此种一致性。

· Monotonic read consistency

此种一致性要求如果Process A已经读取了对象的某个值,那么后续操作将不会读取到更早的值。

· Monotonic write consistency

此种一致性保证系统会序列化执行一个Process中的所有写操作。

BASE

说起来很有趣,BASE的英文意义是碱,而ACID是酸。真的是水火不容啊。

· Basically Availble --基本可用

· Soft-state --软状态/柔性事务

"Soft state" 可以理解为"无连接"而 "Hard state" "面向连接"

· Eventual Consistency --最终一致性

最终一致性, 也是是 ACID 的最终目的。

BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性: Basically Available基本可用。支持分区失败(e.g. sharding碎片划分数据库) Soft state软状态 状态可以有一段时间不同步,异步。 Eventually consistent最终一致,最终数据是一致的就可以了,而不是时时一致。

BASE思想的主要实现有

     1.按功能划分数据库
     2.sharding碎片 

BASE思想主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺牲,BASE思想的方案在性能上还是有潜力可挖的。