zoukankan      html  css  js  c++  java
  • CAP定律、BASE理论

    CAP 理论是分布式系统的理论基础,一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)。
    一致性:在写操作之后的所有读操作,必须返回该值。
    可用性:对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应,衡量一个系统可用性,都是通过停机时间来计算的。
    分区容错性:分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。

    大部分人解释这一定律时,常常简单的表述为:“一致性、可用性、分区容忍性三者你只能同时达到其中两个,不可能同时达到”。
    实际上这是一个非常具有误导性质的说法,而且在 CAP 理论诞生 12 年之后,CAP 之父也在 2012 年重写了之前的论文。当发生网络分区的时候,如果我们要继续服务,那么强一致性和可用性只能 2 选 1。
    也就是说当网络分区之后 P 是前提,决定了 P 之后才有 C 和 A 的选择。也就是说分区容错性(Partition tolerance)我们是必须要实现的。
    简而言之就是:CAP 理论中分区容错性 P 是一定要满足的,在此基础上,只能满足可用性 A 或者一致性 C。因此,分布式系统理论上不可能选择 CA 架构,只能选择 CP 或者 AP 架构。
    为啥无同时保证 CA 呢?举个例子:若系统出现“分区”,系统中的某个节点在进行写操作。为了保证 C, 必须要禁止其他节点的读写操作,这就和 A 发生冲突了。
    如果为了保证 A,其他节点的读写操作正常的话,那就和 C 发生冲突了。选择的关键在于当前的业务场景,没有定论,比如对于需要确保强一致性的场景如银行一般会选择保证 CP 。
    CAP 实际应用案例我这里以注册中心来探讨一下 CAP 的实际应用。考虑到很多小伙伴不知道注册中心是干嘛的,这里简单以 Dubbo 为例说一说。
    下图是 Dubbo 的架构图。注册中心 Registry 在其中扮演了什么角色呢?提供了什么服务呢?注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。

    常见的可以作为注册中心的组件有:ZooKeeper、Eureka、Nacos...。
    1.ZooKeeper 保证的是 CP。 任何时刻对 ZooKeeper 的读请求都能得到一致性的结果,但是, ZooKeeper 不保证每次请求的可用性比如在 Leader 选举过程中或者半数以上的机器不可用的时候服务就是不可用的。
    2.Eureka 保证的则是 AP。 Eureka 在设计的时候就是优先保证 A (可用性)。在 Eureka 中不存在什么 Leader 节点,每个节点都是一样的、平等的。因此 Eureka 不会像 ZooKeeper 那样出现选举过程中或者半数以上的机器不可用的时候服务就是不可用的情况。 Eureka 保证即使大部分节点挂掉也不会影响正常提供服务,只要有一个节点是可用的就行了。只不过这个节点上的数据可能并不是最新的。
    3.Nacos 不仅支持 CP 也支持 AP。

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

  • 相关阅读:
    openlayers + webpack
    openlayers Map 和 es6的容器Map重名
    git 代理
    剑魂史诗套配装
    剑魂卢克攻略
    DNF斩铁剑魂每日1-5及打团须知
    APP自识别安卓苹果
    各浏览器老板键
    Apache+mod_encoding解决URL中文编码问题
    linux命令之crontab定时执行任务
  • 原文地址:https://www.cnblogs.com/stubborn-dude/p/14845200.html
Copyright © 2011-2022 走看看