从ACID到CAP/BASE

由集中式系统到分布式系统的发展,事务的原则也有原先的ACID发展成了CAP/BASE。数据库

ACID
事务(Transaction)是由一系列对系统中数据进行访问和更新的操做锁组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务。
事务具备四个特征,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),简称事务的ACID特性。网络

原子性:事务必须是一个原子的操做序列单元,要么所有成功,要么所有失败。
一致性:事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行以前和执行以后,数据库都必须处于一致性状态。
隔离性:并发的事务是相互隔离的,一个事务的执行不能被其余事务干扰,定义了4个事务隔离级别。
持久性:事务一旦提交,他对数据库中对应数据的状态变动就应该是永久性的。架构

CAP和BASE理论
集中式系统中事务能够容易的知足ACID这几个特性,可是对于一个高访问量、高并发的互联网分布式系统来讲,若是咱们指望实现一套严格知足ACID特性的分布式事务,极可能出现的状况就是在系统的可用性和严格一致性之间出现冲突,由于当咱们要求分布式系统具备严格一致性时,极可能就须要牺牲掉系统的可用性。可用性和一致性又是分布式系统不可或缺的两个属性,在可用性和一致性之间永远没法存在一个一箭双鵰的方案,因而出现了诸如CAP和BASE这样的分布式系统经典理论。并发

CAP定理
一个分布式系统不可能同时知足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三个基本需求,最多只能同时知足其中的两项。分布式

一致性:全部节点在同一时间具备相同的数据,注:这里的一致性和ACID中的一致性是不同的
可用性:服务一直可用,并且是正常响应时间
分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然可以对外提供知足一致性和可用性的服务。高并发

CAP证实
关于CAP定理中为何只能同时知足其中的两项,这里能够作一个简单的证实:
前提:对于一个分布式系统而言,分区容错性能够说是一个最基本的要求。由于既然是一个分布式系统,那么分布式系统中的组件必然须要被部署到不一样的节点,不然也就无所谓分布式系统了性能

假设网络中有2个节点N1和N2,N1和N2上分别安装了数据库D1(主)和D2(备)造成主备模式,D1(主)负责写而且读,D2(备)分担一部分读
正常状况下:D1(主)写完数据,同步到D2(备),读取D2能够读到最新的数据
非正常状况下:做为一个分布式系统,它和单机系统的最大区别,就在于网络,如今假设一种极端状况,N1和N2之间的网络断开了;D1(主)写完数据,D2(备)没有更新到最新的数据;这时候怎么办,有2个选择:第一,牺牲数据一致性,响应旧的数据给用户;第二,牺牲可用性,阻塞等待,直到网络链接恢复,数据更新操做完成以后,再给用户响应最新的数据。spa

BASE理论
BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写。很明显BASE理论更加倾向知足CAP理论中的AP,既知足可用性,分区容忍性的系统,一般可能对一致性要求低一些。架构设计

CAP、ACID以及BASE之间的关系
网上看到过一张图片,感受对三者之间的关系描述的很清晰,以下图所示:设计

CAP理论中根据倾向的不一样:
CA – 单点集群,知足一致性,可用性的系统,一般在可扩展性上不太强大(ACID)
AP – 知足可用性,分区容忍性的系统,一般可能对一致性要求低一些(BASE)
CP – 知足一致性,分区容忍必的系统,一般性能不是特别高(BASE)我的认为里面的?也能够写成BASE

其实咱们还能够从数据库这个角度来看:
关系型数据库和非关系型数据库也能在CAP理论中获得体现,以下图所示(来源网上):

关系型数据库(RDBMS)遵循ACID原则,非关系型数据库遵循BASE原则

总结
ACID强一致性模型,而BASE提出经过牺牲强一致性来得到可用性但最终达到一致状态;在实际的分布式场景中,不一样业务单元和组件对数据一致性的要求是不一样的,所以在具体的分布式系统架构设计中,ACID特性和BASE理论每每会结合在一块儿使用。

相关文章
相关标签/搜索