zoukankan      html  css  js  c++  java
  • CAP和BASE理论

    分布式事务

    分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。通常一个分布式事务中会涉及对多个数据源或业务系统的操作。

    例如在下单场景下,库存和订单如果不在同一个节点上,就涉及分布式事务。

    一个分布式事务可以看作是由多个分布式的操作序列组成的,通常可以把这一系列分布式的操作序列称为子事务。因此分布式事务也可以被定义为一种嵌套型的事务,同时也就具有了 ACID 事务特性。但由于在分布式事务中,各个子事务的执行是分布式的,因此要实现一种能够保证 ACID 特性的分布式事务处理系统就显得格外复杂。

    CAP和BASE理论的引出

    对于本地事务处理或者是集中式的事务处理系统,依照传统的ACID特性即可保证数据的严格一致性。

    可是对于分布式事务,传统的单机事务模型已经无法胜任。如果我们期望实现一套严格满足ACID特性的分布式事务,很可能出现的情况就是在系统的可用性和严格一致性之间出现冲突。

    因此,在可用性和一致性之间永远无法存在一个两全其美的方案,于是如何构建一个兼顾可用性和一致性的分布式系统成为了无数工程师探讨的难题,出现了诸如CAP和BASE这样的分布式系统经典理论。

    CAP定理

    CAP定理告诉我们,分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition Tolerance),最多只能同时满足其中两项。

    一、一致性(C:Consistency)

    一致性指的是多个数据副本是否能保持一致的特性,在一致性的条件下,系统在执行数据更新操作之后能够从一致性状态转移到另一个一致性状态。

    对系统的一个数据更新成功之后,如果所有用户都能够读取到最新的值,该系统就被认为具有强一致性。

    二、可用性(A:Availability)

    可用性指分布式系统在面对各种异常时可以提供正常服务的能力,可以用系统可用时间占总时间的比值来衡量,4 个 9 的可用性表示系统 99.99% 的时间是可用的。

    在可用性条件下,要求系统提供的服务一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

    三、分区容错性(P:Partition Tolerance)

    网络分区指分布式系统中的节点被划分为多个区域,每个区域内部可以通信,但是区域之间无法通信。

    在分区容错性条件下,分布式系统在遇到任何网络分区故障的时候,仍然需要能对外提供一致性和可用性的服务,除非是整个网络环境都发生了故障。

    四、权衡

    放弃CAP定理 说明
    放弃P 一个简单的做法是将所有的数据都放置在一个分布式节点上,这样保证不会受到网络分区的影响。但是需要注意的是,放弃P的同时也就意味着放弃了系统的可扩展性,此时我们的分布式系统还有什么意义呢?
    放弃A 一旦系统遇到故障,那么受到影响的服务需要等待一定的时间,因此在等待期间系统无法对外提供正常的服务,即不可用
    放弃C 指的是放弃强一致性,而保证最终一致性
    由上面我们可以看出,在分布式系统中,分区容错性必不可少,因为需要总是假设网络是不可靠的。因此,CAP 理论实际上是要在可用性和一致性之间做权衡。

    可用性和一致性往往是冲突的,很难使它们同时满足。在多个节点之间进行数据同步时

    为了保证一致性(CP),不能访问未同步完成的节点,也就失去了部分可用性;
    为了保证可用性(AP),允许读取所有节点的数据,但是数据可能不一致。
    BASE理论

    BASE 是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)三个短语的缩写。

    BASE 理论是对 CAP 中一致性和可用性权衡的结果,它的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

    基本可用

    指分布式系统在出现故障的时候,保证核心可用,允许损失部分可用性。

    例如,电商在做促销时,为了保证购物系统的稳定性,部分消费者可能会被引导到一个降级的页面。

    软状态

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

    最终一致性

    最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能达到一致的状态。

    ACID 要求强一致性,通常运用在传统的数据库系统上。而 BASE 要求最终一致性,通过牺牲强一致性来达到可用性,通常运用在大型分布式系统中。

    在实际的分布式场景中,不同业务单元和组件对一致性的要求是不同的,因此 ACID 和 BASE 往往会结合在一起使用。
    ————————————————
    版权声明:本文为CSDN博主「许大侠0610」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u013568373/article/details/91466900

  • 相关阅读:
    超酷的元素周期表
    TestLink在线Excel用例转换xml
    我也学习JAVA多线程-join
    request.getSession(true/false)的区别
    nginx location配置详细解释
    RestTemplate--解决中文乱码
    扇贝-每日一句
    Hexo博客系列(三)-将Hexo v3.x个人博客发布到GitLab Pages
    C程序的内存分区(节选自黑马训练营day1)
    CodeBlocks更换界面主题界面、汉化及去掉注释及字符串的下划线(汉化包的链接来自本站的BeatificDevin大神)
  • 原文地址:https://www.cnblogs.com/deepalley/p/14645216.html
Copyright © 2011-2022 走看看