CAP定理
Posted lay2017
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CAP定理相关的知识,希望对你有一定的参考价值。
一、简介
互联网高速发展,数据量爆发增长,传统的单体应用已经不能满足需要了,这时候分布式系统就应运而生。在分布式系统中,常常提到CAP定理,这个定理也成为了理解分布式应用的起点。
二、CAP
那么CAP定理指的是什么呢?
1)C:consistency,即一致性
2)A:availability,即可用性
3)P:partition tolerance,分区容错性
我们先来看看,这几个词汇分别表示什么意思
1、一致性
一致性就是要求在写操作完成后,读操作必须返回写操作的值。
例如:
system1和system2分别部署在不同服务器上,system1讲用户user1的名字从marry修改为lay,那么system2在读取数据的时候,必须返回lay。
2、可用性
可用性就是当对任意系统发起请求,系统必须响应结果。
例如:
system1和system2分别部署在不同的服务器上,用户随机对system1发送请求或者对system2其中一台发送请求,那么对应的系统必须响应结果。
3、分区容错性
分区容错的意思就是分布式系统中的不同服务器之间的通信可能失败,而系统设计必须考虑到这种情况。
例如:
system1和system2分别部署在不同的服务器上,system1对system2发起调用请求,而由于网络等硬件设备问题system1无法调用system2。
三、CAP定理为何不能同时成立?
理解CAP的关键点在于理解CAP定理为何三个指标不能同时成立,也就是说理论上在分布式系统中你可能实现:CA、CP、AP其中一种,但是无法实现CAP同时成立。针对现实角度来说,CAP定理的P(分区容错性)几乎是一定成立的,因为网络不稳定,硬件问题...等因素是无法避免的。所以我们考虑的是选择CP(一致性、分区容错性)组合、还是AP(可用性、分区容错性)组合。
那为什么C(一致性)和A(可用性)相互排斥呢?
我们思考两种情况:
1、保证C(一致性)
system1和system2分别部署在不同的服务器上,如果要保证一致性,那么system1在执行写操作的时候就必须防止system2同时出现读写操作,所以我们必须把system2锁定,等到写入完毕了才允许进行读写,来达到一致性的目的。
可是,在system2被锁定的时候,如果用户对system2发起请求,将无法响应结果,也就违反了可用性原则。
2、保证A(可用性)
那么如果保证可用性呢?
system1和system2分别部署在不同的服务器上,由于我们要保证可用性,那么也就不能在写入的时候对另外一台进行加锁。也就意味着,可能出现两台同时执行的情况,那么数据也就无法保证一致性。
这两种情况说明,在分区容错性成立的情况下,保证一致性就无法保证可用性,保证可用性就无法保证一致性。
参考文章:
https://mwhittaker.github.io/blog/an_illustrated_proof_of_the_cap_theorem/
以上是关于CAP定理的主要内容,如果未能解决你的问题,请参考以下文章