CAP

算法蝉翼
• 阅读 1008

数据一致性

强一致性

在任意时刻,所有节点中的数据是一样的。同一时间点,节点A中获取到key的值与在节点B中获取到key的值应该都是一样的。 弱一致性:与强一致性需要同时保持所有节点的数据是一样的不同,弱一致性允许同一时间点在节点A与节点B上面读取的数据不一致,如多级缓存。

最终一致性

是弱一致性的一种特例,保证用户最终能够读取到某操作对系统特定数据的更新。但是随着时间的迁移,不同节点上的同一份数据总是在向趋于一致的方向变化。简单的理解为在一段时间后,节点间的数据会最终达到一致状态。

CAP 在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition Tolerance(分区容错性),三者不可兼得。

一致性(C)

在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)

可用性(A)

在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)

分区容错性(P)

以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

CAP

Partition tolerance 分区容错 大多数分布式系统都分布在多个子网络。每个子网络就叫做一个区(partition)。分区容错的意思是,区间通信可能失败。比如,一台服务器放在中国,另一台服务器放在美国,这就是两个区,它们之间可能无法通信。

CAP

上图中,G1 和 G2 是两台跨区的服务器。G1 向 G2 发送一条消息,G2 可能无法收到。系统设计的时候,必须考虑到这种情况。
一般来说,分区容错无法避免,因此可以认为 CAP 的 P 总是成立。CAP 定理告诉我们,剩下的 C 和 A 无法同时做到。

Consistency 一致性 意思是,写操作之后的读操作,必须返回该值。举例来说,某条记录是 v0,用户向 G1 发起一个写操作,将其改为v1。

CAP

接下来,用户的读操作就会得到 v1。这就叫一致性。

CAP

问题是,用户有可能向 G2 发起读操作,由于 G2 的值没有发生变化,因此返回的是 v0。G1 和 G2 读操作的结果不一致,这就不满足一致性了。

CAP

为了让 G2 也能变为 v1,就要在 G1 写操作的时候,让 G1 向 G2 发送一条消息,要求 G2 也改成 v1。

CAP

这样的话,用户向 G2 发起读操作,也能得到 v1。

CAP

Availability 可用性
    意思是只要收到用户的请求,服务器就必须给出回应。 用户可以选择向 G1 或 G2 发起读操作。不管是哪台服务器,只要收到请求,就必须告诉用户,到底是 v0 还是 v1,否则就不满足可用性。

Consistency 和 Availability 的矛盾 一致性和可用性,为什么不可能同时成立?答案很简单,因为可能通信失败(即出现分区容错)。 如果保证 G2 的一致性,那么 G1 必须在写操作时,锁定 G2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,G2 不能读写,没有可用性。 如果保证 G2 的可用性,那么势必不能锁定 G2,所以一致性不成立。 综上所述,G2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
CAP定理的理解
CAP定理1.CAP1.1定义以下定义来自维基。在理论计算机科学中,CAP定理(CAPtheorem),又被称作布鲁尔定理(Brewer'stheorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点:一致性(Consistency)(等同于所有节点访问同一份最新的数据副本)
Wesley13 Wesley13
3年前
GoJS API学习
varnode{};node"key""节点Key";node"loc""00";//节点坐标node"text""节点名称";//添加节点通过按钮点击,添加新的节点到画布myDiagram.model.addNodeData(nod
Wesley13 Wesley13
3年前
CAP定理与BASE理论
1\.CAP定理C:Consistency,一致性A:Availability,可用性P:Partitiontolerance,分区容错性CAP定理,指的是在一个分布式系统中,一致性、可用性、分区容错性,三者不可得兼。2\.CAP详解2.1一致性(C)指所有节点访问同一份最新的
Stella981 Stella981
3年前
Mongodb3.4 复制集及分片配置
复制技术:mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。mongodb各个节点常见的搭配方式为:一主一从、一主多从。主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。!MongoD
Wesley13 Wesley13
3年前
CAP理论
分布式系统的CAP理论:理论首先把分布式系统中的三个特性进行了如下归纳:●一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)●可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求。(对数据更新具备高可用性)●分区容错性(P):以实际效果而言,分区相当于对
Stella981 Stella981
3年前
FastCFS同步复制机制简介
  上一篇文章介绍了FastCFS采用数据分组的做法,一个数据分组的几个节点(如三个节点即三副本)之间是Master/Slave关系;FastCFS采用数据强一致模型,通过Master/Slave结构的同步复制机制来保证数据一致性,本文将概要介绍这一机制的原理和关键点。  和单机系统相比,分布式系统因网络通信方面存在较大不确定性,要做到数
Wesley13 Wesley13
3年前
Java之一致性hash算法原理及实现
一致性哈希算法是分布式系统中常用的算法。比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是数据的key,N是机器节点数,如果有一个机器加入或退出这个集群,则所有的数据映射都无效了。一致性哈希算法,解决了普通余数Hash算法伸缩性差的问题,可以保证在上线、下线服务
Stella981 Stella981
3年前
Kafka学习笔记(3)
1\.CAP理论  1.1Cosistency(一致性)  通过某个节点的写操作结果对后面通过其他节点的读操作可见。  如果更新数据后,并发访问的情况下可立即感知该更新,称为强一致性  如果允许之后部分或全部感知不到该更新,称为弱一致性。  若在之后的一段时间(通常该时间
分布式事务的几种实现方式 | 京东云技术团队
基础理论CAP理论一致性(Consistency):在分布式系统中所有的数据备份,在同一时刻都保持一致状态,如无法保证状态一致,直接返回错误;可用性(Availability):在集群中一部分节点故障,也能保证客户端访问系统并得到正确响应,允许一定时间内数
Ceph的crush算法与一致性hash对比介绍
一致性hash的基本思想是,有一个hash函数,这个hash函数的值域形成了一个环(收尾相接:thelargesthashvaluewrapsaroundtothesmallesthashvalue),然后存储的节点也通过这个hash函数随机的分配到这个环上,然后某个key具体存储到哪个节点上,是由这个key取hash函数对应到环的一个位置,然后沿着这个位置顺时针找到的第一个节点负责这个key的存储。这样环上的每个节点负责和它前面节点之间的这个区间的数据的存储。
京东云开发者 京东云开发者
8个月前
「数据密集型应用系统设计」读后感与团队高并发高性能实践案例
作者:京东物流冯志文一、分布式数据系统挑战1.一致性(Consistency):在多个节点上维护相同的数据副本,确保所有节点在任何给定时间点都能看到相同的数据状态。这是CAP理论中的C部分(一致性、可用性和分区容错性)。2.可用性(Availability