CAP和BASE理论

1. CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。

CAP理论为:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

1.1 一致性(Consistency)

一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。

1.2 可用性(Availability)

可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。

1.3 分区容错性(Partition tolerance)

分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

2. CAP权衡

通过CAP理论,我们知道无法同时满足一致性、可用性和分区容错性这三个特性,那要舍弃哪个呢?

对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到N个9,即保证P和A,舍弃C(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。

对于涉及到钱财这样不能有一丝让步的场景,C必须保证。网络发生故障宁可停止服务,这是保证CA,舍弃P。貌似这几年国内银行业发生了不下10起事故,但影响面不大,报到也不多,广大群众知道的少。还有一种是保证CP,舍弃A。例如网络故障事只读不写。

孰优孰略,没有定论,只能根据场景定夺,适合的才是最好的。并且在牺牲P和C的时候,往往很难保证绝对的A

3. BASE理论

eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

3.1 基本可用(Basically Available)

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

3.2 软状态( Soft State)

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

3.3 最终一致性( Eventual Consistency)

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

4. ACID和BASE的区别与联系

ACID是传统数据库常用的设计理念,追求强一致性模型。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。

ACID和BASE代表了两种截然相反的设计哲学

在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

转自:http://my.oschina.net/foodon/blog/372703

特别说明:尊重作者的劳动成果,转载请注明出处哦~~~http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt370

时间: 2024-10-30 03:47:30

CAP和BASE理论的相关文章

【转载】ACID、Data Replication、CAP与BASE

[ACID]      在传统数据库系统中,事务具有 ACID 4 个属性( Jim Gray 在<事务处理:概念与技术>中对事务进行了详尽的讨论). 原子性(Atomicity):事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行. 一致性(Consistent):在事务开始和完成时,数据都必须保持一致状态.这意味着所有相关的数据规则都必须应用于事务的修改,以保持数据的完整性:事务结束时,所有的内部数据结构(如B树索引或双向链表)也都必须是正确的. 隔离性(Isolatio

BASE理论

BASE是Basiclly Available(基本可用),Soft state(软状态),Eventually consistent(最终一致性)三个短语的缩写. BASE是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性. 基本可用 基本可用是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性--但请注意,这绝不等价

【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

集群概念介绍 集群术语须知 服务硬件:指提供计算服务的硬件,比如 PC 机.PC 服务器. 服务实体:服务实体通常指服务软体和服务硬体. 节点(node):运行 Heartbeat 进程的一个独立主机称为节点,节点是 HA 的核心组成部分,每个节点上运行着操作系统和Heartbeat 软件服务. 资源(resource):资源是一个节点可以控制的实体,当节点发生故障时,这些资源能够被其他节点接管.如: 磁盘分区.文件系统.IP 地址.应用程序服务.共享存储 事件(event):事件也就是集群中可

【RAC】RAC相关基础知识

  [RAC]RAC相关基础知识 1.CRS简介    从Oracle 10G开始,oracle引进一套完整的集群管理解决方案--Cluster-Ready Services,它包括集群连通性.消息和锁.负载管理等框架.从而使得RAC可以脱离第三方集群件,当然,CRS与第三方集群件可以共同使用. (1).CRS进程 CRS主要由三部分组成,三部分都作为守护进程出现 <1>CRSD:资源可用性维护的主要引擎.它用来执行高可用性恢复及管理操作,诸如维护OCR及管理应用资源,它保存着集群的信息状态和

二:分布式系统事务

一:事务--->是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行逻辑单元.保证数据在业务逻辑上是正确的.--->事务的四大特征:原子性,一致性,隔离性,持久性.简称事务的ACID特性.●原子性        要么全部成功执行,要么全部失败.●一致性        事务的一致性,数据合乎逻辑.只能从一个一致性状态变到另一个一致性状态.不允许出现中间状态的数据.●隔离性        事务的隔离性是指在并发环境中.并发的事务是相互隔离的.一个事务的执行不能被其他事务干扰.即一个事务内

关于CAP理论的一些笔记

CAP的概念 2000年,Eric Brewer 教授在 ACM 分布式计算年会上指出了著名的 CAP 理论: 分布式系统不可能同时满足一致性(C: Consistency),可用性(A: Availability)和分区容错性(P: Tolerance of network Partition)这三个需求.大约两年后,Seth Gilbert 和 Nancy lynch 两人证明了CAP理论的正确性. 三者的含义如下: Consistency:一致性,一个服务是一致的完整操作或完全不操作(A

这可能不只是一篇面经(BAT面试)

转载请标明出处:  http://blog.csdn.net/djy1992/article/details/76087532 本文出自:[奥特曼超人的博客] 文章来自牛客网   作者:xiaoteng 0. 写在之前 首先呢我的面试经历和一些面霸和收割机的大神相比绝不算丰富,但我这三个月应该能代表很大一部分人的心路历程:从无忧无虑也无知的状态,然后遭遇挫败,跌入低谷,连续数天的黑暗,慢慢调整,逼着自己不能松懈,看到改变,收获肯定,分享经历. 先大概说下自己的面试经历吧(详细的面试过程和面试题解

专访RocketMQ联合创始人:项目思路、技术细节和未来规划喜欢

编者按 这些年开源氛围越来越好,各大IT公司都纷纷将一些自研代码开源出来.2012年,阿里巴巴开源其自研的第三代分布式消息中间件--RocketMQ.经过几年的技术打磨,阿里称基于RocketMQ技术,目前双十一当天消息容量可达到万亿级. 2016年11月,阿里将RocketMQ捐献给Apache软件基金会,正式成为孵化项目.阿里称会将其打造成顶级项目.这是阿里迈出的一大步,因为加入到开源软件基金会需要经过评审方的考核与观察.坦率而言,业界还对国人的代码开源参与度仍保持着刻板印象:而Apache

成为Java顶尖程序员 ,看这10本书就够了

  岁末年初,想储备一些优质书籍的看这里.近期发现并收藏了这几本书,一方面作为自己的书单,另一方面也想推荐给大家. "学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处:   1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超其他资料   2.对着书上的代码自己敲的时候方便   "看完书之后再次提升自我的最好途径是看一些相关的好博文",我个人认为这是学习的第二步,因为一本书