ACID:关系型数据库中事务的4个属性:
 
Atomicity,原子性,整个事务的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间的某个环节。事务在执行过程中出错,会回滚到事务开始前的状态,就像没发生一样。

 
Consistency,一致性,在事务开始之前和结束之后,数据的完整性没有被破换。
所谓数据完整性,是指数据是正确无误的,没有歧义的。如果数据存在自相矛盾,不相容的地方,则其完整性被破坏了。
 
Isolation,隔离性,两个事务的执行是互不干扰的,一个事务不能看到其他事务运行时中间某一时刻的数据。
 
Durability,持久性,事务结束之后,该事务对数据库所做的修改会持久地保存在数据库中,不会被回滚。
 
CAP理论:分布式系统中只能同时满足CAP中的两个:
 
Consistency,一致性,有两方面含义。
一方面是指无论何时何地访问这个数据,都会得到相同的结果,即保证行为的一致。比如,A写入一个数据,那么下次读时应该能看到上次写的数据,否则就出现了不一致。
另一方面是指数据在分布式系统中,不存在歧义,即保证数据的一致。比如,数据的多个副本都是相同的,否则就出现了歧义。
Availability,可用性,是指分布式系统时刻能够提供服务,不存在暂停服务的时刻。
Partition Tolerance,分区容忍性,是指数据不受分布式的影响,即使某个节点失效,也不会出现数据错误、失效等问题。
 
可以看出,同时满足CAP是不可能的。
如想保证一致性和可用性,那么就不能再分布式。因为分布式会破坏一致性或者可用性中的一者,也就是说一定会破坏两者的组合。
如想保证分布式和一致性,那么就必须在系统运行的某个时刻,暂停服务,进行数据同步,这就破坏了可用性。
如想保证分布式和可用性,那么系统时刻不停机,就没有机会进行数据同步,也就破坏了一致性。
 
BASE:分布式系统与关系型数据库相对的3个属性:
Basically Availability,基本可用性,这个称呼可能有些歧义,应该翻译为“主要可用性”,实际上BASE的目的就是舍去Consistency,而得到Availability,因此,这里应理解为一切以可用性为主。
 
Soft State,软状态,是指系统介于stateful和stateless之间,只维护一定的信息,作为高速缓存,这些信息实际上可以通过一定的计算重新得到(如从周围节点收集信息汇总),因此即使丢失也无所谓。当系统出错时,可以迅速恢复状态。
 
Eventually Consistency,最终一致性,为弱一致性的一种特例,是指系统中多副本之间并不是时刻保持一致的(言外之意,不同用户,或者同一用户的不同时刻,可能会读到不一致的数据),但系统最终会在某个时刻变得一致(如经过数据同步)。
 
从用户(Client)看到的角度讲:
强一致性(Strong Consistency),保证对a修改之后(事务完成之后),任何用户马上就能看到a的最新值。
弱一致性(Weak Consistency),对a修改后,不保证所有用户都能看到最新值。最终一致性是弱一致性的特例。
 
从系统内部(Server)的角度讲:
一致性的意思是,在分布式系统中,数据之间必须相容,不存在有歧义的地方。如多个副本的内要容相同,或者有多个版本但版本之间不冲突。又如不能同时存在这三条导致矛盾的记录:a>b,b>c,a<c。
可以看出,在系统内部,数据不一定是严格一致的,只要保证用户看到的是一致的即可。
Dynamo提供采用NRW模型来描述一致性:
N 数据副本的总数
R 每次读取的副本数
W 每次写的副本数
系统要想向外提供强一致性,则保证R+W>N即可,也即R集合和W集合存在交集,这样用户在读时,至少能得到一个最新的记录,进而通过版本号/时间戳/Vector Clock来决定选择哪一个记录。
否则,若系统只能保证R+W<=N,则它就是弱一致性的。
在同时向多个节点同步数据时,通常采用两阶段提交协议(Two Phase Commit),该协议分两个阶段,第一阶段为准备阶段(Prepare),master向所有的slave发送写请求,slave收到请求后,做一定的操作(如判断是否有冲突),然后向master回复是否同意写请求,master收到所有回复后,再判断是否进行提交。最后,进入提交阶段(Commit),master向所有slave发送提交请求,slave收到后正式将修改持久化。
Dynamo在写W个副本时,采用了改进的2PC,即如果准备阶段W中有节点没有响应,则尝试W之外的节点,保证收到W个节点的响应,才会进入提交阶段。
HDFS在同步写多个副本时,也采用了改进的2PC,即先以pipeline的方式,向多个副本写数据,其过程中只要有一个节点写失败,则整个写操作失败,只有当所有节点都成功后(后面的节点会向前级联反馈),发起者才决定写成功(向NameNode提交)。

ACID和CAP, BASE的更多相关文章

  1. 分布式系列文章——从ACID到CAP/BASE

    事务 事务的定义: 事务(Transaction)是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元(Unit),狭义上的事务特指数据库事务. 事务的作用: 当多个应用程序并发访问 ...

  2. 分布式系列文章 —— 从 ACID 到 CAP / BASE

    转自:https://mp.weixin.qq.com/s?amp;mid=2652037708&__biz=MzI0NDI0MTgyOA%3D%3D&idx=1&chksm= ...

  3. 1.2 从 ACID 到 CAP/BASE

    1.事务 事务(Tranction)是指,由一系列对系统中数据进行访问与更新操作,所组成的一个逻辑执行单元.狭义上的事务是指数据库事务. 事务有四个特性. 原子性:原子性要求事务只允讲有两种状态,全部 ...

  4. 分布式理论系列(一)从 ACID 到 CAP 到 BASE

    分布式理论系列(一)从 ACID 到 CAP 到 BASE 一.ACID 1.1 事务的四个特征: (1) Atomic(原子性) 事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程 ...

  5. [转帖]浅谈分布式一致性与CAP/BASE/ACID理论

    浅谈分布式一致性与CAP/BASE/ACID理论 https://www.cnblogs.com/zhang-qc/p/6783657.html ##转载请注明 CAP理论(98年秋提出,99年正式发 ...

  6. 分布式中 CAP BASE ACID 理解(转载)

    概念理解(CAP,BASE, ACID) CAP CAP:  Consistency, Availability, Partition-tolerance 强一致性(Consistency).系统在执 ...

  7. 从ACID到CAP及BASE

    从ACID到CAP及BASE ACID 说到事务,肯定想到事务的ACID特性,即原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durabilit ...

  8. 分布式数据库中CAP原理(CAP+BASE)

    分布式数据库中CAP原理(CAP+BASE) 传统的ACID 1)原子性(Atomicity): 事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功. 2)一致性(Con ...

  9. 事务,acid,cap,paxos随笔

    事务ACID四个特性: A:原子性(Atomicity)C:一致性(Consistency)I:隔离性(Isolation)D:持久性(Durability) 原子性:语句要么全执行,要么全不执行,是 ...

随机推荐

  1. IBM X3650M4简单排错方法

    如果出问题了,首先看开机的那个地方的灯是否显示正常,有黄色的灯亮一般都不正常: 这种服务器带有一个错误指示板,只需要在电源开关那,如上图,把那个蓝色的按钮往里面按,就能把里面的一个板子抽出来,可以看到 ...

  2. 探寻ASP.NET MVC鲜为人知的奥秘(3):寻找多语言的最佳实践方式

    如果你的网站需要被世界各地的人访问,访问者会使用各种不同的语言和文字书写习惯,那么创建一个支持多语言的网站就是十分必要的了,这一篇文章就讲述怎么快速合理的创建网站对多语言的支持.接下来通过一个实例来讲 ...

  3. Spring学习(六)-----Spring使用@Autowired注解自动装配

    Spring使用@Autowired注解自动装配 在上一篇 Spring学习(三)-----Spring自动装配Beans示例中,它会匹配当前Spring容器任何bean的属性自动装配.在大多数情况下 ...

  4. 解析build.gradle文件

    Gradle是一个非常先进的项目构建工具,它使用了一种基于Groovy的领域特定语言DSL来声明项目设置,摒弃了传统XML(如Ant和Maven)的各种繁琐配置 项目结构如上图: 1.最外层目录下的b ...

  5. selenium webdriver API详解(二)

    本系列主要讲解webdriver常用的API使用方法(注意:使用前请确认环境是否安装成功,浏览器驱动是否与谷歌浏览器版本对应) 一:获取当前页面的title(一般获取title用于断言) from s ...

  6. 网络通讯中 bind函数的作用

    面向连接的网络应用程序分为客户端和服务器端.服务器端的执行流程一般为4步,客户端程序相对简单,一般需要两个步骤. 服务器端执行流程4步如下: (1)调用socket函数,建立一个套接字,该套接字用于接 ...

  7. 《物质世界 (Outward)》证明不必压缩制作大型角色扮演游戏的时间

    <物质世界>是一款雄心勃勃的开放世界角色扮演游戏 (RPG),设计这款游戏的公司规模只有您预期的三分之一.游戏中的一切都是动态的,拥有许多炫酷的系统设计,大家可以分屏合作掌控整个场景.参与 ...

  8. jvm之对象创建过程

    常量池中定位类的符号引用                ↓ 检查符号引用所代表的类是否已被加载,解析和初始化过  →                 ↓                        ...

  9. TW实习日记:第九天

    这两天有点忙,要改前端网页和加需求上去.所以昨天说的Vue缓存机制也没看,所以打算现在列个挖了的坑的清单: Vue缓存机制.生命周期和钩子函数 使用项目组自用组件来重写静态页面 SSM框架搭建.整合流 ...

  10. PLSQL事务

    1 使用set transaction设置事务属性 2 只读事务 set transaction read only 3 读写事务 set transaction write; 4 在进行数据统计分析 ...