CAP 理论
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理论中具体采用什么模型,还要根据具体场景进行分析,总之技术实现脱离业务场景就是耍流氓。
版权声明: 本文为 InfoQ 作者【南宫煌】的原创文章。
原文链接:【http://xie.infoq.cn/article/baf64151f20d1bf5aaf55caa0】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论