概述 CAP 和 BASE 理论

基本上接触过分布式系统的朋友都知道 CAP 和 BASE 理论,这两个理论对工程实践中的分布式架构设计具有重要的影响。CAP 理论是加州大学伯克利分校的 Eric Brewer 教授提出的,并被 MIT 的 Seth Gilbert 和 Nancy Lynch 使用学术理论进行了严格的证明。

CAP 和 BASE 理论都有数学证明,但今天打算以一种轻松些的方式来最两个理论做个浅显的解释。

最近偶尔刷一集《大明王朝1566》,这部剧之前看过开头几集,后来因为画质差没资源没有继续看,最近优酷貌似重制了,清晰度好了一些,就偶尔有时间刷一集,这真是一部好剧啊。今天就拿大明王朝的故事背景来对 CAP 和 BASE 理论做个介绍吧,希望不会写的太烂。

大明王朝故事背景

历史上学过明朝设有内阁和司礼监,皇帝通过管理内阁和司礼监来管理天下,这种机制其实应该是很先进的皇权机制了。不过,明嘉靖帝,沉迷修道升仙,执政期间严嵩父子把持朝政、一手遮天、贪墨不计其数。虽说内阁和司礼监腐败严重,但剧里内阁的严嵩和司礼监的吕公公在决策上还是会听皇帝的。这就不讲了,现在回归主题吧,现在主要引入剧中的如下几个人:

  • 嘉靖:明朝皇帝,对于重要决策,一般会联合内阁和司礼监进行商讨,最终各方达成一致;
  • 严嵩:内阁首辅,主要管理两京一十三省的各地官员;
  • 吕芳:司礼监总管,主要管理宫廷有关的事宜;
  • 杨金水:吕芳干儿子,任浙江任织造局总管,主要负责江浙织造丝绸管理,卖丝绸,其实就是替皇帝做生意的;
  • 郑泌昌、何茂才:严嵩手下,一个任浙江巡抚,一个是按察使,属封疆大吏;
  • 海瑞:时任杭州淳安县知县,由裕王举荐而来,奉命处理堤坝决堤后的赈灾事情;

为什么 CAP 无法同时被满足?

故事发生时,南有戚继光抗倭激战,北有鞑靼入侵,急需大量军需,然经过长达二十多年的朝政腐败,国库空虚,皇帝经过与内阁和司礼监商量后,决定在浙江推行改稻为桑的国策,就是把稻田改为桑田养蚕生丝,进而多织丝绸出口赚钱,然而遭到农民反对,郑必昌何茂才在收到严嵩儿子密令后,决定决堤淹城,以达到改稻为桑的目的,事发后,淳安全部被淹、建德半数被淹,灾民无数。这时,海瑞出场了,其到达淳安后,发现贪腐严重,堤坝被毁另有隐情,阻止改稻为桑,决定一查到底。

海瑞毕竟是皇帝儿子举荐的官儿,郑何和杨金水等人不敢任意干掉海瑞,只能上书上司,杨金水就写信给吕芳,郑何二人就写信给严嵩儿子。因为改稻为桑推行不下去是大事啊,所以严嵩和吕芳都非常重视,收到来信后立即想了对策,然而两人想的对策不一样,等皇上来决定吧,决定完了下发到浙江官员。正巧这个时候嘉靖在修道升仙,闭关不问世事。这样,两个人的意见不一致,并且无法达到统一,底下人都在等着回信,如果十天收不到回信下面可能就乱了,但是皇帝要闭关一个月。

上面这段陈述中:

  • 皇帝闭关就相当于严嵩和吕芳达成一致的通道断了,在分布式中就是两个节点发生了网络分区;

  • 底下人等着回信,十天没收到回信就乱了,如果十天内收到了上面的回信,对应到分布式中就是保证了可用性;

  • 严嵩和吕芳就意见无法达成一致,那么对应到分布式中就是没有保证一致性

再简述一下分布式系统中 CAP 的意义:

  • P 代表着分区容忍性,要满足 P 就表示允许网络分区的发生(允许嘉靖帝闭关);

  • C 表示一致性,满足 C 就要求所有节点数据需要一致(严嵩和吕芳意见应该达成一致);

  • A 表示可用性,就是说对于他人的请求,节点需要提供服务响应的返回(严嵩和吕芳不让下面的人等过久)

那为什么 CAP 无法同时满足呢?

  • 如果满足 CP,那么由于嘉靖帝闭关的一个月期间(P),严嵩和吕芳无法通过嘉靖帝达成一致,如果要保证一致(C),那就只能等嘉靖帝出关,然而这需要一个月的时间,下面的人早就等疯了,这就相当于服务不可用了,所以无法满足 A;

  • 如果满足 AP,那么严嵩和吕芳必须在10天内回复(A),然而皇帝闭关一个月(P),那么两人在十天内是无法达成一致的,也就是无法满足 C;

  • 如果满足 CA,要在10天内回复下层官员,另外严嵩和吕芳两人也要意见一致,那只能在10天内请皇帝出关了,那就无法满足 P;

不知道这么讲是否够明白,CAP三个要求是无法同时满足的,那 BASE 理论在 CAP 的基础上做了什么让步和平衡?下面一起来看看。

BASE 基于 CAP 做了什么样的权衡?

BASE 包含三个方面:Basically Available(基本可用)、Soft state(弱状态)和 Eventually consistent(最终一致性)。我们从上面的故事来说一下这几个概念。

对于分布式系统来说,必须要满足分区容错性,否则各个节点就相当于一个节点了,分布式就没有任何意义了。在满足分区容错性的条件下:

  • Basically Available

就是说节点在出现问题时,不是完全不可用,而是允许损失部分可用性。例如,严嵩和吕芳无法达成一致,这时不能让下面等待一个月没有回信,这时发送一个降级的决策(例如让下面官员先跟海瑞等进行斡旋,不让其查到要命的证据),或者下面官员自己先搞一些应对措施,然后加长等待时间(可以等待一个月),这样,整个系统不至于完全乱掉,而是先有一些应对措施。这就是基本可用。

  • Soft state

严嵩和吕芳先将自己的第一个建议性的决策下发,等待皇帝出关后再进行一致性决策。在第一个建议性的决策到最终一致性决策期间,其实两方的意见并不一致,BASE理论允许在一定时间内存在这种状态。这就是软状态。

  • Eventually consistent

在皇帝出关后,吕芳严嵩立即与皇帝协商,然后得到一致的决策。这个时候,如果下面应付不了,那么会再次上书,这时,严嵩吕芳已经有了一致的结论,那么再次下发给下层官员时,就是一致的决策了,这样郑必昌、何茂才、杨金水就可以已一致性的态度对待海瑞了。这就是最终一致性。

转载于:https://juejin.im/post/5cab6eb2f265da0393784399

看《大明王朝1566》聊分布式中的CAP和BASE理论相关推荐

  1. base cap 分布式_1、分布式基础之CAP和BASE理论

    ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸. 一.从集中式到分布式 1.集中式 集中式是指有一台或者多台计算机组成的中心节点,数据 ...

  2. 分钱、用人和交替,看《大明王朝1566》

    <大明王朝1566>是一部非常经典的历史正剧,以"倒严"为主线,以嘉靖.海瑞等为主角,深刻的刻画了明朝嘉靖年间的高层政治生态和百姓生活状态.小说我曾经在几年前读过,花了 ...

  3. 隆重推荐:大明王朝1566

    放只老虎在后头追,只要是个正常人,肯定豁出亲命了往前跑.这个例子形象地向我们说明,外部的推动力非常强大~~ 不过,不是所有人都能适合这种方式,甭管腿脚多利索,贸然给自己找只老虎在屁股后头蹲着,有时候不 ...

  4. 历史风云大戏:大明王朝1566

    历史风云大戏:大明王朝1566[@more@] 揭开中国历史上最另类的皇帝嘉靖数十年不上朝的执政之谜 揭示中国历史上清官海瑞以"智忠"代"愚忠"的为官之道 揭露 ...

  5. 《大明王朝1566》观后感

    <大明王朝1566>是一部非常好的电视剧,反映了官场之复杂.其中有各个级别的官员的博弈,各个派别的博弈,朝廷与地方的博弈,以及短期利益与长期利益的博弈等等,云波诡谲,非常好看. 海瑞是其中 ...

  6. 从分布式环境的特点、问题到CAP、BASE理论详解

    分布式的特点: 定义: 分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过网络进行通信和协调的系统. 特点: 同一个分布式系统中的计算机在空间部署上可以是任意分布的,这些计算机 ...

  7. 分布式中的CAP原理

    文章目录 CAP理论详解 CAP理论验证:为什么CAP不可能满足全部三项 CAP如何抉择 CAP理论详解 在理论计算科学中,CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer's ...

  8. 分布式系统核心理论之CAP、BASE理论

    CAP CAP是Consistency.Availablity.Partition-tolerance的缩写,由计算机科学家埃里克·布鲁尔在2000年提出的,所以又称布鲁尔定理(Brewer's th ...

  9. 事务原理:ACID,CAP和BASE理论及分布式事务一致性案例

    分布式系统一致性的需求 需求定义 Safety Only a value that has been proposed may be chosen. Only a single value is ch ...

最新文章

  1. XDC约束技巧——CDC篇
  2. 基于 REST 的 Web 服务:基础
  3. boost::rotate_copy相关的测试程序
  4. mysql集群搭建_mysql高可用集群搭建
  5. 对分查找的最多次数_「剑指offer题解」数组中出现次数超过一半的数字
  6. 在浏览器中运行java applet
  7. 一步步实现SDDC--学习平台环境的搭建
  8. 今日早上出来还是阴天
  9. rocketmq学习杂记
  10. python常问问题_Python新手在作用域方面经常容易碰到的问题
  11. 泛微OA设置系统默认水印
  12. 计算机房通气换气次数,各种换气次数汇总
  13. Modis数据下载及后处理
  14. 解决iOS 15上图标出现对号的问题
  15. lpad与rpad函数
  16. 使用ConfigFilter
  17. SpringJpa @query 中根据传入参数(字段)排序
  18. Stata学习笔记|导入数据
  19. 接口返回统一数据格式
  20. 做你自己思想世界的君王

热门文章

  1. 计算机领域新技术的工作原理,七年级信息技术上册 第4课《计算机系统及其工作原理》教学案 新人教版...
  2. 教你“强人锁男”——java并发编程的常用锁类型
  3. 1.2 win10下Docker 和 Docker Compose的安装
  4. 手把手教你用GoEasy实现Websocket IM聊天
  5. SDN网络的工作原理
  6. 浅析原代细胞应用现状
  7. windows蓝屏原因速查表(常见蓝屏原因与解决方法速查(适用于Windows 7/8/8.1/10/11))
  8. 实现对光网络的监控和光路切换 - MEMS 光开关
  9. 动图图解!既然IP层会分片,为什么TCP层也还要分段?
  10. Vue项目实战 —— 后台管理系统( pc端 )