10分钟了解分布式CAP、BASE理论
CAP理论
2000年7月,Eric Brewer教授提出CAP猜想;2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP;之后,CAP理论正式成为分布式计算领域的公认定理。 CAP定律说的是在一个分布式计算机系统中,一致性,可用性和分区容错性这三种保证无法同时得到满足,最多满足两个。 CAP:C :Consistency(一致性)A:(Availability)可用性P:(Partition Tolerance)分区容错性
让我们构造一个非常简单的分布式系统。
- 两台服务器G1和G2
- 两台服务器可以相互通讯
- 客户端可以随机访问任何一台服务器
Consistency(一致性)
Gilbert and Lynch 这样描述的一致性.
any read operation that begins after a write operation completes must return that value, or the result of a later write operation
在写操作完成之后的任何读操作都必须返回该值。
客户端向G1服务器发起一个写操作,把变量初始值v0 改为v1,接下来客户端可能向节点G1读取也可能向节点G2读取;
向G1发起一个读操作,得到更改后的值V1。这就是满足了一致性
向G2发起一个读操作,此时G1向G2发送同步消息
如果同步完成 ,那么读到的结果是v1,这样也满足了一致性
还未同步完成,这是G2还是v0,这就不满足一致性。
(Partition Tolerance)分区容错
Gilbert and Lynch 这样描述的分区容错.
the network will be allowed to lose arbitrarily many messages sent from one node to another
网络允许丢失任意多的消息从一个节点发送到另外一个节点
在分布式环境中,节点之间的通信可能出现问题,整个系统就产生所谓的分区。所以我们在设计的时候需要考虑这种情况;剩下来的 A和C满足好,我们就可以说我们的系统有很好的分区容错性。
(Availability)可用性
Gilbert and Lynch 对 availability的描述原文. every request received by a non-failing node in the system must result in a response 系统中非失败节点收到的每个请求都必须导致响应 在可用性系统中,只要服务器没有奔溃,客户端发送请求,服务器必须返回一个相应给客户端。
为什么要CAP不能同时满足
通过上述的定义和描述知道分区无法避免,p总是要考虑的。为什么c和a无法同时做到呢?其实都是分区惹的祸。
如果我们保证一致性;那么G1写入操作之后,必须保证数据同步给G2之后,G2才能对外提供响应,这显然就没有可用性了。
反之 我们保证可用性,那就没法保证一致性了,既生瑜何生亮的悲剧。
小结
经过上面分析,在分布式系统中,我们一般会选择AP而牺牲一致性。牺牲并不意味着不关心一致性,而是首先满足A和P,如何解决C的问题。参考以下BASE理论
BASE 理论
eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(StrongConsistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
(Basically Available)基本可用
在分布式系统出现故障的时候,允许损失部分可用性,即保证核心可用。
(Soft State)软状态
接受一段时间的状态不同步,及中间状态,而改中间状态不影响系统整体可用性。这里的中间状态就是CAP理论中的数据不一致性。
(Eventually Consistent)最终一致性
上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态,因此所有客户端对系统的数据访问最终都能够获取到最新的值。
总结
CAP是分布式系统设计理论,BASE是CAP理论中AP方案的延伸,对于C我们采用的方式和策略就是保证最终一致性;
参考
英文版的:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
CAP 理论十二年回顾:"规则"变了:https://www.infoq.cn/article/cap-twelve-years-later-how-the-rules-have-changed
CAP 定理的含义:http://www.ruanyifeng.com/blog/2018/07/cap.html
从零开始学架构PDF
10分钟了解分布式CAP、BASE理论的更多相关文章
- [转]10分钟了解分布式CAP、BASE理论
原文: https://www.cnblogs.com/chengtian/p/11278072.html ---------------------------------------------- ...
- 分布式之 BASE理论
------------------------------珍惜眼前的学习机会,当你现在有机会学习各种经验时,一定要倍加珍惜.靠混日子是混不了一辈子的,许多过程都是不能省略的,至少学会这些经验可以让你 ...
- 分布式事务 --- BASE 理论
部分图片总结出自参考资料 问题 : Base 理论为什么会被提出,动机是什么 Base 和 ACID 的区别与联系 概述 上一篇我们知道CAP 理论,也知道由于现实中网络等原因,分区容错性这一元素大多 ...
- ACID/CAP/BASE 理论知识
ACID是事务的四大特性,想要成为事务,必须具备这四点. Atomicity 原子性体现在对于一个事务来讲,要么一起执行成功要么一起失败,执行的过程中是不能被打断或者执行其他操作的. Consiste ...
- 分布式CAP与BASE理论
参考: CAP和BASE理论 https://juejin.im/post/5d720e86f265da03cc08de74 https://github.com/changmingxie/tcc-t ...
- 从分布式一致性谈到CAP理论、BASE理论
问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...
- 【分布式】1、CAP原则(CAP定理)、BASE理论
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性). Availability(可用性).Partition tolerance(分区容错性),三者不可得兼. CA ...
- 分布式系统理论--CAP理论、BASE理论
问题的提出 在计算机科学领域,分布式一致性是一个相当重要且被广泛探索与论证问题,首先来看三种业务场景. 1.火车站售票 假如说我们的终端用户是一位经常坐火车的旅行家,通常他是去车站的售票处购买车票,然 ...
- 三分钟分布式CAP理论
分布式系统架构理论,定义了三种指标,理论说我们最多只能满足两个. ## 分布式系统 首先我们这个理论所说的分布式系统,是指系统内会共享数据,互相有连接有交互,才能完成系统功能的的分布式系统.而这个理论 ...
随机推荐
- 浅谈ASP.NET Core中IOC与DI的理解和使用
说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但是一直觉得有点很难去理解,总觉得对其还是模糊不清,所以,趁着今天有空,就去把两个概念 ...
- maven的下载与安装,卸载替换eclipse自带的maven
首先呢,博主在这里给大家一个建议,最好不要用eclipse自带的maven.因为这家伙总会出现一些这样那样的错误,比如常见的jar包下载不全或者是install打包报错等等. 博主用了一段时间,还是觉 ...
- 每天学点node系列-stream
在编写代码时,我们应该有一些方法将程序像连接水管一样连接起来 -- 当我们需要获取一些数据时,可以去通过"拧"其他的部分来达到目的.这也应该是IO应有的方式. -- Doug Mc ...
- 并发编程-Future+callable+FutureTask 闭锁机制
项目中经常有些任务需要异步(提交到线程池中)去执行,而主线程往往需要知道异步执行产生的结果,这时我们要怎么做呢?用runnable是无法实现的,我们需要用callable实现. FutureTask ...
- 【搜索引擎】 PostgreSQL 10 实时全文检索和分词、相似搜索、模糊匹配实现类似Google搜索自动提示
需求分析 要通过PostgreSQL实现类似Google搜索自动提示的功能,例如要实现一个查询海量数据中的商品名字,每次输入就提示用户各种相关搜索选项,例如淘宝.京东等电商查询 思路 这个功能可以用 ...
- Python入门基础(3 下)
接着讲列表里面的一些操作吧 列表元素访问与计数 1.统计指定元素在列表中出现的次数使用count(),这就不必细说了,直接看代码,需要记住的是括号里面放的是元素 list = [1,5,5,5,5,8 ...
- 主机地址变更后,dubbo请求时依旧会寻址旧IP的问题
机房迁移,导致测试服务器IP变更,比原于IP为192.168.1.105变更为10.1.9.120. 服务源码未做任何变更,启动服务时依旧是旧地址请求,此问题由dubbo本地注册中心的缓存所致,清理掉 ...
- springcloud启动多个实例
1. 场景描述 springcloud微服务,部署一般需要多台服务器配合,开发测试过程中,也需要启动多个实例来进行测试与验证. 2. 问题解决 在idea下,只需要配置下就能启动多个实例,本案例采用在 ...
- 第一章 Servlet
JavaEEe技术包括Servlet/Jsp.Java Message Service(JMS).Enterprise JavaBeans(EJB).JavaServer Faces(JSF),以及J ...
- 对DatagramSocket的使用实例(java使用UDP进行数据传输)
今天刚看懂的一点点东西,记录一下,方便自己回顾 客户端: Client.java import java.io.IOException; import java.net.DatagramPacket; ...