在计算机领域,如果是初入行就算了,如果是多年的老码农还不懂 CAP 定理,那就真的说不过去了 。CAP可是每一名技术架构师都必须掌握的基础原则啊 。
现在只要是稍微大一点的互联网项目都是采用分布式结构了,一个系统可能有多个节点组成,每个节点都可能需要维护一份数据 。那么如何维护各个节点之间的状态,如何保障各个节点之间数据的同步问题就是大家急需关注的事情了 。
CAP定理是分布式系统中最基础的原则 。所以理解和掌握了CAP,对系统架构的设计至关重要 。
一、什么是 CAP?
「 CAP定理 」又被称为 布鲁尔定理,它提出对于一个分布式系统而言,不能同时满足以下三点:
Consisteny(一致性)
Availability(可用性)
Partition tolerance(分区容错性)
也就是说CAP定理指明了,任何分布式系统只能同时满足这三项中的两项 。
文章插图
【想成为一名架构师 CAP这些定理一定要知道】
如上图,如果是最多同时满足两项,那我们可以有三个组合:CA、CP、AP 。在聊这三个组合之前,我们先分别看一下 Consisteny(一致性)、Availability(可用性)、Partition tolerance(分区容错性)的含义 。
假设某个系统当前有两个节点A和B,两个节点分别可以由Actor进行读写,两个节点之间的数据会自动完成同步 。
文章插图
Consisteny(一致性)
一致性的要求是指,对于任何客户端(上图Actor)来说,每次的读操作,都能获得最新的数据 。即,当有客户端向A节点写入了新数据之后,其它客户端从B节点中进行读操作所获得的数据必须也是最新的,是与A节点数据保持一致的 。
Availability(可用性)
可用性的要求是指,每个请求都能在合理的时间内获得符合预期的响应(不保证获取的结果是最新的数据) 。
按照上图来看就是,客户端只要向A节点或B节点发起请求后,只要这两个节点收到了请求,就必须响应给客户端,但不需要保证响应的值是否正确 。
Partition tolerance(分区容错性)
分区容错性是指,当节点之间的网络出现问题之后,系统依然能正常提供服务 。
讲完了C、A、P的含义和要求,我们继续来看看它们之间如何组合使用 。
二、CAP 怎么应用?
先把视野回到这张图上:
文章插图
虽然我们知道有 CA、CP、AP 三种组合方式,但是在分布式系统的结构下,网络是不可能做到100%可靠的 。既然网络不能保证绝对可靠,那 P(分区容错性)就是一个必选项了 。原因如下:
如果选择 CA组合,放弃 P(分区容错性) 。还是以最上面的图中A和B节点来举例,当发生节点间网络故障时,为了保证 C(一致性),那么就必须将系统锁住,不允许任何写入操作,否者就会出现节点之间数据不一致了 。但是锁住了系统,就意味着当有写请求进来的时候,系统是不可用的,这一点又违背了 A(可用性)原则 。
因此分布式系统理论上是不可能有CA组合的,所以我们只能选择 CP 和 AP组合架构 。
下面我们来详细看一下 CP架构 和 AP架构的特点:
CP 架构
CP架构即 Consisteny(一致性)与 Partition tolerance(分区容错性)的组合 。
文章插图
如上图,由于网络问题,节点A和节点B之前不能互相通讯 。当有客户端(上图Actor)向节点A进行写入请求时(准备写入Message 2),节点A会不接收写入操作,导致写入失败,这样就保证了节点A和节点B的数据一致性,即保证了Consisteny(一致性) 。
然后,如果有另一个客户端(上图另一个Actor)向B节点进行读请求的时候,B请求返回的是网络故障之前所保存的信息(Message 1),并且这个信息是与节点A一致的,是整个系统最后一次成功写入的信息,是能正常提供服务的,即保证了Partition tolerance(分区容错性) 。
上述情况就是保障了CP架构,但放弃了Availability(可用性)的方案 。
AP 架构
AP架构即 Availability(可用性)与 Partition tolerance(分区容错性)的组合架构 。
文章插图
如上图,由于网络问题,节点A和节点B之前不能互相通讯 。当有客户端(上图Actor)向节点A进行写入请求时(准备写入Message 2),节点A允许写入,请求操作成功 。但此时,由于A和B节点之前无法通讯,所以B节点的数据还是旧的(Message 1) 。当有客户端向B节点发起读请求时候,读到的数据是旧数据,与在A节点读到的数据不一致 。但由于系统能照常提供服务,所以满足了Availability(可用性)要求 。
推荐阅读
- 任嘉伦|古装王者任嘉伦只有114斤?你永远无法想象明星的身材管理有多狠
- 水泥盆养花好吗 花泥养花好还是花瓶养花好
- 天热就该这样吃肉!清凉又弹口,天天都想吃
- 9 个让你更快变老的有害习惯
- 怎么样才可以有效祛斑
- 自己买雀舌喝,要回甘正且耐泡的,不想一次买太多,想长期定点采购,有推荐么?
- 人的10大最奢侈的欲望,你想要哪个?
- 抗癌蔬菜排行榜第一名 抗癌排行榜第一的菜竟然是它
- 淘宝注册开网店多少钱 想开淘宝店需要多少钱怎么注册
- 锻炼能否长高呢