首页 > 其他 > 详细

架构设计-CAP定理

时间:2019-06-19 23:45:37      阅读:171      评论:0      收藏:0      [点我收藏+]

  CAP定理是分布式系统中最基础的原则作为架构初学者,对其的理解应该有些许掌握。

  CAP定理又被称为 布鲁尔定理,它提出对于一个分布式系统而言,不能同时满足三点:Consisteny(一致性)、Availability(可用性)Partition tolerance(分区容错性)

  意思就是任何分布式系统只能同时满足这三项中的两项。如果是最多同时满足两项,会出现三种结果:CA(满足可用性、一致性),CP(满足分区容错性、一致性),AP(可用性、分区容错性)

 假设某个系统当前有两个节点A和B,两个节点分别可以由Actor进行读写,两个节点之间的数据可以自动完成数据同步:

   Consisteny一致性):一致性的要求是指,对于任何客户端(Actor)来说,每次的读操作,都能获得最新的数据。即,当有客户端向A节点写入了新数据之后,其它客户端从B节点中进行读操作所获得的数据必须也是最新的,是与A节点数据保持一致的。

  ②可用性(Availability):可用性的要求是指,每个请求都能在合理的时间内获得符合预期的响应(不保证获取的结果是最新的数据),客户端只要向A节点或B节点发起请求后,只要这两个节点收到了请求,就必须响应给客户端,但不需要保证响应的值是否正确。

  ③Partition tolerance(分区容错性):当节点之间的网络出现问题之后,系统依然能正常提供服务。

 它们之间组合使用

  在分布式系统的结构下,网络是不可能做到100%可靠的。既然网络不能保证绝对可靠,那 P(分区容错性)就是一个必选项了。如果CA选项,没有P,当发生节点间网络故障时,为了保证 C(一致性),那么就必须将系统锁住,不允许任何写入操作,否者就会出现节点之间数据不一致了。但是锁住了系统,就意味着当有写请求进来的时候,系统是不可用的,这一点又违背了 A(可用性)原则。所以CA组合违背现实性,一般不选择CA架构。

  CP架构即 Consisteny(一致性)与 Partition tolerance(分区容错性)的组合。

 技术分享图片

 

  如上图,由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(Actor)向节点A进行写入请求时(准备写入Message 2),节点A会不接收写入操作,导致写入失败,这样就保证了节点A和节点B的数据一致性,即保证了Consisteny(一致性)。

  然后,如果有另一个客户端(上图另一个Actor)向B节点进行读请求的时候,B请求返回的是网络故障之前所保存的信息(Message 1),并且这个信息是与节点A一致的,是整个系统最后一次成功写入的信息,是能正常提供服务的,即保证了Partition tolerance(分区容错性)。

 

AP架构即 Availability(可用性)与 Partition tolerance(分区容错性)的组合架构。

 

 技术分享图片

 

  如上图,由于网络问题,节点A和节点B之前不能互相通讯。当有客户端(Actor)向节点A进行写入请求时(准备写入Message 2),节点A允许写入,请求操作成功。但此时,由于A和B节点之前无法通讯,所以B节点的数据还是旧的(Message 1)。当有客户端向B节点发起读请求时候,读到的数据是旧数据,与在A节点读到的数据不一致。但由于系统能照常提供服务,所以满足了Availability(可用性)要求。

  CAP告诉我们在构建服务时,需要根据业务特性作出权衡考虑,哪些点是当前系统可以取舍的,哪些是应该重点保留的。在网络正常情况下,CA是可以实现的。如果对用户的数据(密码,金额)一致性要求很高,采用CP架构,如果是一些商品相关介绍信息(一致性要求不高),用户体验比较重要,对可用性要求更高一些,那么这个模块的数据就可以采用AP架构。我们采用CAP中的组合,并不放弃组合外的第三点,我们可以做一些防备措施或者冗余方案来保障第三点,来使系统更加完善健全。

架构设计-CAP定理

原文:https://www.cnblogs.com/zhao-teng-ass/p/11055178.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!