分布式基础之CAP理论&BASE理论
Posted 李若盛开
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分布式基础之CAP理论&BASE理论相关的知识,希望对你有一定的参考价值。
1.CAP理论
1.1) 含义
C(Consistency一致性)、Availability(可用性)、Partition Tolerance(分区容错性)。1.2 )具体意义
一致性(Consistency) : 所有节点访问同一份最新的数据副本可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。
分区容错性(Partition tolerance) : 分布式系统出现网络分区的时候,仍然能够对外提供服务。(网络分区的概念:分布式系统中,多个节点之前的网络本来是连通的,但是因为某些故障(比如部分节点网络出了问题)某些节点之间不连通了,整个网络就分成了几块区域,这就叫网络分区。)
所谓的三选二:当网络出现分区的时候,P一定要选,CA可以适当的偏向。当网络没有出现分区,CA就没有取舍的必要。(比如 ZooKeeper、HBase 就是 CP 架构,Cassandra、Eureka 就是 AP 架构,Nacos 不仅支持 CP 架构也支持 AP 架构。)
2.Base理论
2.1 含义
BASE 是 Basically Available(基本可用) 、Soft-state(软状态) 和 Eventually Consistent(最终一致性)。2.2具体意义
核心思想:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。基本可用
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。但是,这绝不等价于系统不可用。
软状态
软状态指允许系统中的数据存在中间状态(CAP 理论中的数据不一致),并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
最终一致性
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
分布式一致性的 3 种级别:
1.强一致性 :系统写入了什么,读出来的就是什么。
2.弱一致性 :不一定可以读取到最新写入的值,也不保证多少时间之后读取到的数据是最新的,只是会尽量保证某个时刻达到数据一致的状态。
3.最终一致性 :弱一致性的升级版,系统会保证在一定时间内达到数据一致的状态。
实现最终一致性的方法
1.读时修复 : 在读取数据时,检测数据的不一致,进行修复。比如 Cassandra 的 Read Repair 实现,具体来说,在向 Cassandra 系统查询数据的时候,如果检测到不同节点 的副本数据不一致,系统就自动修复数据。
2.写时修复 : 在写入数据,检测数据的不一致时,进行修复。比如 Cassandra 的 Hinted Handoff 实现。具体来说,Cassandra 集群的节点之间远程写数据的时候,如果写失败 就将数据缓存下来,然后定时重传,修复数据的不一致性。
3.异步修复 : 这个是最常用的方式,通过定时对账检测副本数据的一致性,并修复。
总结
ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。分布式理论基础之CAP理论&BASE理论
1.CAP理论的含义
CAP理论
表示在分布式系统中一致性(C)
、可用性(A)
和分区容错性(P)
最多只能同时满足两个。
一致性(Consistency)
:客户端更新数据成功后,在任意时刻,在系统任意对外提供服务的节点,读取到的数据都是最新写入的数据。(强一致性)。可用性(Availability)
:当系统出现异常时,仍能对外提供服务。分区容错(Partition)
:当出现网络分区时,系统的容错能力(机器之间出现网络故障,不能正常通信)。(注:网络分区,即在分布式系统内,不同节点归属在不同网络子网,子网络之间可能出现网络不连通情况,但在子网内部的通信是正常的。)
证明CAP理论:有两台机器M1和M2,为保持一致性,两台机器的数据相同,现在客户端对M1的数据进行更新,但M1和M2之间出现网络故障(分区),M的最新数据无法同步到M2,导致M1的数据变为v1,M2仍为v0。现有一客户端向M2发送数据读取请求,对此请求的处理有两种选择:
- 返回旧数据v0,满足可用性,但是却违反了一致性。
- 阻塞此次读操作,直至网络故障恢复,M1的数据v1同步到M2中,满足一致性,但违反了可用性。由于分布式系统天生具有分区的特性,所以一定要满足P,只能在CA中选其一。
CAP理论说明了想设计完全满足强一致性
、可用性
和分区容错性
的分布式系统是不切实际的,只能在三者之间权衡,为分布式系统的设计提供理论指导。
2 一致性的分类
一致性可从客户端
和服务端
两个角度来看,客户端一致性定义客户端怎样和何时看到数据更新,服务端一致性定义更新时数据如何流经系统及系统对更新有何保证。
2.1 客户端一致性分为以下几种:
- 强一致性: 数据更新之后,任何客户端在后续的访问中都能访问到最新版本的数据。
- 弱一致性:数据更新之后,不能保证客户端的访问能访问到最新更新之后的数据,数据更新到所有客户端可见这段时间称为不一致窗口。
- 最终一致性:最终一致性是种特殊的弱一致性,假如更新数据之后没有后续的对此数据对象的更新操作,系统保证一段时间之后任何客户端对此数据对象的访问都能返回最后一次更新的数据。
最终一致性有如下变种: - 因果一致性: 如果进程A向进程B传达它已更新数据项,则进程B的后续访问将返回更新的值,并且保证写入将取代先前的写入。进程C的访问与进程A没有因果关系,遵循正常的最终一致性规则。
- 读已之所写一致性: 进程A在更新数据项之后始终访问更新的值,并且永远不会看到较旧的值。这是因果一致性模型的特例
- 会话一致性:是读已之所写的实际应用版本,进程对系统的访问存在与一个会话上下文中,在此会话中的访问遵循读已之所写一致性。
- 单调读一致性:进程访问某一数据对象的值之后,此进程后续的访问都不会返回更旧版本的值。
- 单调写一致性:系统保证相同进程的一系列写操作是序列化有序的。
同一个系统中,可以同时满足多种一致性,例如读已之所写和单调读一致性是常用的组合方案,这两种一致性使系统更易使用。
2.2 服务端一致性:
N=存储数据副本的结点数量
W=在更新完成之前,需要确认更新成功的副本数量。
R=当读操作访问数据对象,需要访问的副本数量
如果W+R>N,写副本和读副本会出现重叠,能保证一定能读到更新后的数据对象,从而保证强一致性。例如:在实现了primary-backup关系数据库管理系统中,同步副本技术N=2,W=2,R=1,能保证强一致性;异步副本方式N=2,W=1,R=1, R+W=N,一致性不能得到保证。
如果W+R<=N, 那么不能保证强一致性,只能是弱一致性或最终一致性。如在主备RDBMS中,使用异步同步副本,并开启从副本读功能的方式,那么N=2, W=1和R=1。在这种情况下,R+W=N, 一致性不能得到保证。
3 BASE理论(CAP理论的变种)
BASE理论
由CAP理论
演化而来,是工业界对分布式系统实践的总结,其核心思想是即使无法达到强一致性,也要保证满足最终一致性。
BASE
是Basically Available(基本可用)
、Soft state(软状态)
和Eventually consistent(最终一致性)
三个短语的简写。
基本可用
: 当系统发生不可预知故障时,允许损失部分可用性,例如:部分机房故障,允许查询时间变长(时间上的损失),系统高峰期为保证系统的稳定性,将部分用户请求引导到降级页面(功能上的损失)。软状态
: 允许系统中的数据存在中间状态,该中间状态不会影响系统的整体可用性,即允许多个副本间的同步存在延时。最终一致性
: 系统中数据的副本经过一段时间的同步之后,最终能达到一致性状态,不要求强一致性。
4.参考文献
[1] 分布式系统的CAP理论.https://www.hollischuang.com/archives/666
[2] Vogels W. Eventually consistent[J]. Communications of the ACM, 2009, 52(1): 40-44.
[3] 分布式系统原理九:CAP理论和BASE理论
以上是关于分布式基础之CAP理论&BASE理论的主要内容,如果未能解决你的问题,请参考以下文章