一、ACID
ACID = 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
原子性(Atomicity):一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。
一致性(Consistency):在事务开始之前和事务结束以后,数据库的完整性限制没有被破坏。
隔离性(Isolation):当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的相互关系。事务隔离分为不同级别,包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)。
持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久地保存在数据库之中,并且是完全的。
二、CAP
CAP = 一致性(Consistency) 、可用性 (Availability) 、分区容忍性(Partitiontolerance) 。CAP原理指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
一致性(Consistency) :
对于分布式的存储系统,一个数据往往会存在多份。简单的说,一致性会让客户对数据的修改操作(增/删/改),要么在所有的数据副本(replica)全部成功,要么全部失败。即,修改操作对于一份数据的所有副本(整个系统)而言,是原子(atomic)的操作。
如果一个存储系统可以保证一致性,那么则客户读写的数据完全可以保证是最新的。不会发生两个不同的客户端在不同的存储节点中读取到不同副本的情况。
可用性(Availability) :
可用性很简单,顾名思义,就是指在客户端想要访问数据的时候,可以得到响应。但是注意,系统可用(Available)并不代表存储系统所有节点提供的数据是一致的。这种情况,我们仍然说系统是可用的。往往我们会对不同的应用设定一个最长响应时间,超过这个响应时间的服务我们仍然称之为不可用的。
分区容忍性(Partition Tolerance) :
如果你的存储系统只运行在一个节点上,要么系统整个崩溃,要么全部运行良好。一旦针对同一服务的存储系统分布到了多个节点后,整个存储系统就存在分区的可能性。比如,两个存储节点之间联通的网络断开(无论长时间或者短暂的),就形成了分区。一般来讲,为了提高服务质量,同一份数据放置在不同城市非常正常的。因此节点之间形成分区也很正常。
Gilbert 和Lynch将分区容忍性定义如下:Noset of failures less than total network failure is allowed to cause the systemto respond incorrectly。除全部网络节点全部故障以外,所有子节点集合的故障都不允许导致整个系统不正确响应。另外一篇文章(BASE: An Acid Alternative)中对分区容忍性的解释:Operationswill complete, even if individual components are unavailable。即使部分的组件不可用,施加的操作也可以完成。
对于一个大规模分布式数据系统来说,CAP三要素是不可兼得的,同一系统至多只能实现其中的两个,而必须放宽第3个要素来保证其他两个要素被满足。一般在网络环境下,运行环境出现网络分区是不可避免的,所以系统必须具备分区容忍性(P)特性,所以在一般在这种场景下设计大规模分布式系统时,往往在AP和CP中进行权衡和选择。
为什么分布式环境下CAP三者不可兼得呢?
由于上面已经提到对于分布式环境下,P是必须要有的,所以该问题可以转化为:如果P已经得到,那么C和A是否可以兼得?可以分为两种情况来进行推演:
(1) 如果在这个分布式系统中数据没有副本,那么系统必然满足强一致性条件,因为只有独本数据,不会出现数据不一致的问题,此时C和P都具备。但是如果某些服务
器宕机,那必然会导致某些数据是不能访问的,那A就不符合了。
(2) 如果在这个分布式系统中数据是有副本的,那么如果某些服务器宕机时,系统还是可以提供服务的,即符合A。但是很难保证数据的一致性,因为宕机的时候,可能
有些数据还没有拷贝到副本中,那么副本中提供的数据就不准确了。
所以一般情况下,会根据具体业务来侧重于C或者A,对于一致性要求比较高的业务,那么对访问延迟时间要求就会低点;对于访问延时有要求的业务,那么对于数据一致性要求就会低点。一致性模型主要可以分为下面几类:强一致性、弱一致性、最终一致性、因果一致性、读你所写一致性、会话一致性、单调读一致性、以及单调写一致性,所以需要根据不同的业务选择合适的一致性模型。
BASE
BASE = BasicallyAvailable(基本可用), Soft-state(软状态/柔性事务), Eventually Consistent(最终一致性)。BASE模型在理论逻辑上是相反于ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)模型的概念,它牺牲高一致性,获得可用性和分区容忍性。
[参考]
https://blog.csdn.net/u010039929/article/details/70173119