zoukankan      html  css  js  c++  java
  • 浅谈cap和base

    原文链接:https://www.jianshu.com/p/641726ee4eb3

    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都可以返回合理的值,所以保证了可用性。因为分区出现时,系统还可以履行职责,所以就保证了分区容错性。

    BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。接下来看一下BASE中的三要素:

    1、基本可用
    基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性。注意,这绝不等价于系统不可用。比如:

    (1)响应时间上的损失。正常情况下,一个在线搜索引擎需要在0.5秒之内返回给用户相应的查询结果,但由于出现故障,查询结果的响应时间增加了1~2秒

    (2)系统功能上的损失:正常情况下,在一个电子商务网站上进行购物的时候,消费者几乎能够顺利完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。

    2、软状态
    软状态指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

    3、最终一致性
    最终一致性强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

    总的来说,BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的,它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。



  • 相关阅读:
    UNIX环境高级编程——守护进程列表
    UNIX环境高级编程——信号说明列表
    UNIX环境高级编程——进程间通信概念
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/fswhq/p/13850607.html
Copyright © 2011-2022 走看看