CAP
是Consistency、Availablity和Partition-tolerance的缩写。分别是指:
1.一致性(Consistency):每次读操作都能保证返回的是最新数据,在分布式系统中,如果能针对一个数据项的更新执行成功后,所有的用户都可以读到其最新的值,这样的系统就被认为具有严格的一致性。
2.可用性(Availablity):任何一个没有发生故障的节点,会在合理的时间内返回一个正常的结果,也就是对于用户的每一个请求总是能够在有限的时间内返回结果;
3.分区容忍性(Partition-torlerance):当节点间出现网络分区(不同节点处于不同的子网络,子网络之间是联通的,但是子网络之间是无法联通的,也就是被切分成了孤立的集群网络),照样可以提供满足一致性和可用性的服务,除非整个网络环境都发生了故障。
BASE理论
BASE 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。
BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案
BA 是 Basically Available (基本可用)
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性(降级)。
可以理解为在一个平台中,假设部分出现故障,这个时候系统应该在允许这些故障出现的情况下依旧保持部分功能(应该是核心功能)可以正常使用,另一部分功能出现些许可以允许的问题。
比如,当出现故障的时候可以允许部分呢功能出现延时,或者跳转不顺畅的情况出现。但不是直接出现错误或者异常。
个人感觉像是再说一种弱可用性,可用,但是不要求必须所有都可用,是一种对可用性要求的妥协。允许一些特殊情况下,系统出现一小部分可容忍的问题。
S 是Soft state(软状态)
软状态,允许部分节点的数据存在一定的延时,这个延时不影响可用性。
举个例子,就是一个集群中,需要保持所有节点的数据时时刻刻都一致,这是一种强一致性的要求,这个很有可能会造成可用性的问题。
软状态就是不强制要求在同一个时刻所有节点数据都是一致的,但是也不能说延时延到系统都不能使用了。在保证了可用性的的前提下,允许各个节点在数据的一致性操作的时候有一定的延时。
E 是Eventually consistent(最终一致性)
最终一致性很好理解,软状态允许有一定延时,所以这个最终一致含义就是在一定的延时过去之后,所有节点的数据必须保持一致。
相比的假如在更新的同时,所有节点都必须查询到最新的数据,这样的话是一种 强一致性 。
在更新的同时,可以容忍节点查询到的数据不是最新的那么是一种 弱一致性。
最终一致性根据更新数据后各进程访问到数据的时间和方式的不同可以分类为:
Causal consistency(因果一致性)
因果一致性,字面直接理解就是有操作之间有前因后果的要保持一致性。
假设现在有线程A,线程B,线程C,首先 线程A修改了一条数据,暂且把数据标记为d,在A修改之后并且通知了B线程也就是说这个修改已经可以对B线程可见,那么线程B再在A的基础上修改的时候必须基于A修改的之后的数据进行操作。这是可以很明显看到A 和B存在因果关系,A修改的数据可能直接决定了B最后将要修改的数据。这个时候在AB因果之外的C线程看来,就不需要关心AB之间的一致性,所以一致性其实只需要有前因后果的操作之间保持。
Read-your-writes consistency (读己所写一致性)
读己所写一致性,字面上看,就是读取数据的时候,假如读到的是自己修改之后过的数据那么至少应该读取到自己上一次修改的最新的数据。
Session consistency (会话一致性)
会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现“读己所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。
Monotonic read consistency (单调读一致性)
单调读一致性是指如果一个进程从系统中读取出一个数据项的某个值后,那么系统对于该进程后续的任何数据访问都不应该返回更旧的值。
Monotonic write consistency (单调写一致性)
单调写一致性是指,一个系统需要能够保证来自同一个进程的写操作被顺序地执行。
强一致性(即时一致性) 假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操作都将返回最新值
假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操作能读取到最新值。此种情况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操作A,B,C读取到最新值这一段时间。
最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证如果在A,B,C后续读取之前没有其它写操作更新同样的值的话,最终所有的读取操作都会读取到最A写入的最新值。此种情况下,如果没有失败发生的话,“不一致性窗口”的大小依赖于以下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个可以理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。
小结:
BASE理论首先对于CAP的一种适应妥协和弱化,为了保证可用性,对一致性作出的一些削弱,所以呢可以说BASE是一种反ACID的理论。