CAP 理论

用户头像
南宫煌
关注
发布于: 2020 年 07 月 12 日

CAP理论

理论介绍

CAP理论,是指在一个分布式系统中,一致性、可用性和分区容错性这三个基本需求,最多只能同时满足其中的2个。



 CAP理论模型

 

内容解释

选项 描述

一致性 指数据在多个副本之间保持一致性;而不是数据的完整性



可用性 指系统提供的服务必须一直处于可用的状态,每次请求都可以获得非错误的响

应。(不保证获取的数据为最新数据)



分区容错性 分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可

用性的服务,除非整个网络环境都发生故障。

 

原理论证

在分布式系统中,由于涉及到多节点间的通信和交互,网络问题在所难免,那节点间的分区故障就是必然发生的,所以在分布式系统中分区容错是必须要考虑的。



假设网络中有分布式系统的两个节点A和B,他们之间网络互相连通。



系统初始状态图

在满足一致性的时候,A、B两个节点的数据是一样的,都是V0。

在满足可用性的时候,不管请求A还是B,都能得到立即响应。

在满足分区容错性的时候,A和B有任何一方宕机,或者网络不通的时候,都不会影响A和B各自彼此的正常工作。

分布式系统正常流程图

服务器请求A节点,将数据值变更为V1。节点A更新数据为V1后,将数据同步至节点B,使得节点B中的数据也更新成V1。这样,数据实现一致性。

根据CAP原则定义,系统的一致性、可用性和分区容错性细分如下:

·    一致性:节点A和B之间的数据是否完全一样。

·    可用性:A和B的对外部的请求能否做出正常的响应。

·    分区容错性:A和B之间的网络是否互通。

这是正常的运行流程,也是理想情况。但是作为分布式系统,和单机系统的最大区别,就在于网络。现在假设,AB节点之间的网络断开了,用服务器向A请求变更数据,那A中的数据变更为V1。但由于网络断开,数据同步无法进行,B节点的数据仍是V0。这个时候,又向B节点发送请求,由于数据还没进行同步,B节点无法立即返回最新的数据V1,那么:

l  牺牲数据一致性,保证可用性。响应旧的数据V0。

l  牺牲可用性,保证数据一致性。阻塞等待,直到网络连接恢复,再给用户响应最新的数据V1。

 

具体应用

因为CAP理论三者不可兼得,最多只能满足其中两项。于是,得出几种模型:

l  CA模型,在分布式系统中不存在。因为舍弃P,意味着舍弃分布式系统。

l  CP模型,保证了请求在各个节点中数据的强一致性。但是,一旦因为消息丢失、延迟过高发生了网络分区,就严重影响了用户的体验和业务的可用性。因为为了防止数据不一致,集群就拒绝新数据的写入。典型应用是Zookeeper。

l  AP模型,实现了服务的高可用。用户访问系统的时候,都能得到响应数据,不会出现响应错误,但当出现分区故障时,相同的读操作,访问不同的节点,得到的响应数据可能不一样。典型应用是redis。

小结

对于多数大型互联网应用的场景,需要满足AP模型,即任何时候都要保持服务的可用性。但对于某些数据一致性要求高的场景,需要满足CP模型,保证数据的一致,以免脏数据的产生。所以,CAP理论中具体采用什么模型,还要根据具体场景进行分析,总之技术实现脱离业务场景就是耍流氓。



发布于: 2020 年 07 月 12 日 阅读数: 51
用户头像

南宫煌

关注

还未添加个人签名 2019.10.08 加入

还未添加个人简介

评论

发布
暂无评论
CAP理论