CAP理论

227 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情

CAP理论

  • 一致性(Consistency)
    • 保证所有的节点数据都是一致的,最新的,当客户端对集群中任意节点写入数据时,下次再访问任意一个节点,都能访问到该数据;
  • 可用性(Availability)
    • 客户端的每次请求都要保证能够得到响应,不一定每次响应的数据都是最新的;
  • 分区容错性(Partition tolerance)
    • 集群中因为网络原因或单节点发生故障,导致节点之间无法互相通讯可能导致数据不一致的问题,这个歌时候要保证集群依然能对外提供服务,分布式系统允许这种情况的发生,不能歇菜;

cap.png

一般而言CAP需要保证其中的两个如上图所示;

首先P是需要优先保证的因此,使用组合就有AP、CP;

使用假设法论证

假设系统需要满足CAP三个方面,此时P是可用的;

​ 系统中有A、B两个节点,因为系统可用,此时AB之间发生网络故障,而导致互相无法同步数据,此时客户端C发送写请求到A,A此时有了最新的数据,但是B由于网络原因没能同步;

​ 此时C再次请求刚才写入的数据,请求到A则是最新的数据,如果请求到B则还是老数据或者是没有数据,因为还要保证可用性,因此B节点拿到请求也必须做出相应的响应;

​ 因此就同一个请求得到了两种不同的结果,发生了数据不一致的问题,不满足一致性;

​ 同理可知,当要满足一致性时候,那么请求到B节点老数据的时候,就不能给用户响应数据,不满足可用性;

组合介绍

  • CA
    • 即保证一致性和可用性,既然要保证一致性,也就意味着节点之间不能有任何的通信问题,必须满足节点间的强一致性,因此还需要满足高可用,也就数要保证每个节点都能对外提供一致的数据响应,因此当节点之间发生故障时,任何对节点的写操作都将不会被成功执行,只会保证系统目前是可读状态;
  • CP
    • 即保证一致性和分区容错性,保证大多数节点的一致性,当其中有节点发生故障,把当前故障节点设置为不可用状态,以此来保证客户端能够得到请求响应以及一致的数据;
  • AP
    • 即保证可用性和分区容错性

【如何选择组合】

​ 一般来说需要满足分区容错,因为网络发生报故障是不可控,不可能因为网络波动而放弃整个系统的可用,因此节点之间就有可能失去联系,如果要高可用,那么当发生故障时每个节点只能用本地数据提供服务,而这样会容易导致全局数据不一致性。如果要保证一致性,那么可能会某些节点不可用;具体还是要根据实际的应用场景来具体分析如何选择;

BASE理论

核心思想就是基于CAP理论,当保证了P的同时,几人无法做到强一致性和高可用的兼容,可以想办法做到最终一致性;

Basically Available(基本可用)

  • 意思就是当系统发生不可预知的问题的时候,可以使用某种延时挥着服务降级的方式来为用户提供服务;

Soft state(软状态)

  • 允许各个节点之间存在中间状态,即允许在一定延时时间内保证系统的一致性;

Eventually consistent(最终一 致性)

  • 经历过软状态最终保证系统数据的一致性;

🔚

ok.jpg