持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第15天,点击查看活动详情
CAP理论
- 一致性(Consistency)
- 保证所有的节点数据都是一致的,最新的,当客户端对集群中任意节点写入数据时,下次再访问任意一个节点,都能访问到该数据;
- 可用性(Availability)
- 客户端的每次请求都要保证能够得到响应,不一定每次响应的数据都是最新的;
- 分区容错性(Partition tolerance)
- 集群中因为网络原因或单节点发生故障,导致节点之间无法互相通讯可能导致数据不一致的问题,这个歌时候要保证集群依然能对外提供服务,分布式系统允许这种情况的发生,不能歇菜;
一般而言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(最终一 致性)
- 经历过软状态最终保证系统数据的一致性;
🔚