美文网首页
【软件架构篇】浅谈CAP

【软件架构篇】浅谈CAP

作者: 文竹小二 | 来源:发表于2018-08-29 23:37 被阅读96次

    1、什么是CAP

    C代表一致性(Consistency),A代表可用性(Availability),P代表分区容错性(Partition Tolerance)。

    1.1 一致性

    定义:对某个指定的客户端来说,读操作保证能返回最新的写操作结果。

    因为无法保证实时一致性,所以得从客户端角度来看。咋看这个定义还有点像java里volatile的可见性语义。

    1.2 可用性

    定义:非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。

    这个定义中有三个注意的点即非故障节点、合理的时间内、合理的响应。
    只有非故障节点才能满足业务正常;只有在合理的时间内,用户才能接受;只有返回合理的响应,用户才能接受。

    1.3 分区容错性

    定义:当出现网络分区后,系统能够继续“履行职责”。

    定义中的网络分区出现的情况有很多,比如丢包、连接中断、拥塞。
    定义中的履行职责代表系统能够返回合理的响应。

    2、讨论CAP的场景

    讨论CAP就脱离不了具体的场景,这个场景会考虑一致性、可用性、分区容错性问题。

    场景:在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性、可用性、分区容错性三者中的两个,另外一个必须牺牲。

    实际上只能保证CP或AP。如果我们选择了CA而放弃了P,当发生分区现象时,为了保证C,系统要禁止写入,当有写入请求时,系统返回error(例如,当前系统不允许写入),这又和A冲突了,因为A要求合理的响应。

    2.1 CP架构

    image.png

    当出现网络分区时,N1已被更新为了y,N2已被更新为了x,y无法同步到x。当C访问N2时,系统返回错误。当C访问N1,就可得到最新的y值,所以保证了一致性。因为返回错误,所以牺牲了可用性。因为分区出现时,系统还可以履行职责,所以就保证了分区容错性。

    2.2 AP架构

    image.png

    当出现网络分区时,N1已被更新为了y,N2已被更新为了x,y无法同步到x。当C访问N2时,系统返回x。当C访问N1,就可得到最新的y值。因为访问N1或N2,会返回不同的值,所以牺牲了一致性。因为访问N1或N2都可以返回合理的值,所以保证了可用性。因为分区出现时,系统还可以履行职责,所以就保证了分区容错性。

    相关文章

      网友评论

          本文标题:【软件架构篇】浅谈CAP

          本文链接:https://www.haomeiwen.com/subject/dmllwftx.html