分布式CAP理论
本文主要来源于:https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
分布式的CAP理论中的C - A - P,分别指的是
- Consistency:一致性。用英文描述:
any read operation that begins after a write operation completes must return that value, or the result of a later write operation
意思是:如果客户端对一个分布式系统进行了写操作,在系统返回后,如果立马进行读操作,读到的必须是自己刚刚写入的最新结果。
image.png
上图的意思为:客户端对服务集群进行写操作,只有当分布式系统完成信息同步后,才会返回成功,这时无论客户端访问的是哪台服务器,都是最新的结果。
- Availability:可用性。
every request received by a non-failing node in the system must result in a response
如果服务节点没有崩溃,那么每个请求必须得到回应。服务节点不许忽略客户端的请求。
- Partition tolerance:分区容错性。
image.pngthe network will be allowed to lose arbitrarily many messages sent from one node to another
对于分布式服务器G1, G2,允许G1和G2之间失去相互通信的能力。
总结:分布式系统只能满足三项中的两项而不可能满足全部三项。理解CAP理论的最简单方式是想象两个节点分处分区两侧。允许至少一个节点更新状态会导致数据不一致,即丧失了C性质。如果为了保证数据一致性,将分区一侧的节点设置为不可用,那么又丧失了A性质。除非两个节点可以互相通信,才能既保证C又保证A,这又会导致丧失P性质。 --wiki百科
最后我们用redis举个例子:
大家都知道redis是有主从的,我们假设,现在有一个一主一从的redis,现在要写入redis,写完之后再读取结果。
- 假如说要满足CA,也就是一致性和可用性,那么我们在写redis主机之后,主从同步之后再返回结果才能保证一致性,这样就丧失了分区容错性。
- 假如说要保证CP, 也就是一致性和分区容错性,那么在写入主节点后,主节点需要与从节点发生同步之后才会返回,如果这个时候允许分区容错,那么主节点就一直不会返回,丧失了可用性。
- 如果保证AP,也就是可用性和分区容错性,那么在写主节点时,主从之间失去同步,这时你读了从节点,那么就是之前的值,也就是丧失了一致性。