BASE 理论是由 Dan Pritchett 在 ACM 上发表的一篇论文中提出的理论。是在 CAP 理论基础上提出的一种更实际的理论指导,和 PACELC 理论是有些相近的地方的。

BASE 是指 基本可用Basically Available)、软状态Soft State)、最终一致性Eventual Consistency)。

对于目前的互联网应用,基本上都不会是单机系统,而是多机分布式系统,所以 CAP 中的 P 是一定要的特性。剩下的 C P 根据实际场景取舍。BASE 就是一种取舍方案的指导。

假设我们微服务系统结构是:

假设我们系统有如下几个业务需求:

  1. 查询账户余额(涉及账户微服务)
  2. 商品下单(涉及账户微服务,订单微服务,商品微服务)
  3. 商品剩余库存(涉及商品微服务)
  4. 查看用户订单(涉及订单微服务,商品微服务)

1. 基本可用(Basically Available)

基本可用主要包括三点:

  1. 目前系统能承受的压力范围内的请求是正常处理的,超过范围的可能处理不正常,但是不能因为这些请求影响正常的请求。
  2. 响应时间正常,在压力大的时候,响应时间可能增长,但是不能超过一定时间
  3. 可以忍受一定的功能损失,在某些系统出问题的时候,其他系统应该保证本身业务接口正常的运行。

1.1. 目前系统能承受的压力范围内的请求是正常处理的

在双 11 的时候,用户量会突然增高,并且这个量很难预测,尤其是商品下单的业务压力会增大很多,可能超过系统的极限。在超过系统极限的时候,可能会导致整个系统都不可用(例如超过超时极限导致很多请求在队列排队导致后续请求也排队从而雪崩),这是不可取的。

所以,一般会考虑动态扩容,根据业务压力,进行相应的系统微服务的扩容。并且由于动态扩容一般具有滞后性,还需要加上限流器,对某些敏感业务请求根据微服务数量进行动态限制,防止雪崩的出现。

1.2. 响应时间正常

在闲时,用户请求下单可能是毫秒级返回,在系统压力大的时候,这个响应时间可以适当加大,例如 3s 返回。但是这个响应超时时间不要设置太长,第一影响用户体验,第二会导致更多请求排队。

对于不同的业务接口最好设置不同的响应超时时间,例如查询账户余额超时时间短一些,查看用户订单可以稍微长一些。

可以根据系统接口的平均响应时间,请求的个数,制定系统扩容策略

1.3. 可以忍受一定的功能损失

这个主要在于微服务的拆分,以及服务降级策略

比如现在商品微服务因为压力过大挂了,或者重启,这时候的业务:

  1. 查询账户余额(涉及账户微服务),这个由于微服务隔离不受影响
  2. 查询商品剩余库存(涉及商品微服务),这个系统挂了,需要服务降级,例如返回商品库存加载中(前端定时查询),或者商品库存为 0.
  3. 商品下单,目前不可用
  4. 查看用户的订单,可能里面的商品信息显示不出来(服务降级),但是订单列表,以及其中的订单金额、交易时间信息等等应该可以展示,而不是整个接口报异常。

2. 软状态(Soft State)

指的是允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时。

例如下单,订单可以有 初始化 -> 已冻结金额 -> 已扣库存 -> 已扣款 -> 下单成功 这几个状态,如果扣库存失败则变为 待解冻金额 -> 下单失败 状态,分别对应下单的几个中间逻辑。除了下单成功下单失败以外,其他的都是软状态,并不是最终状态。基本上所有的软状态都需要对应的补偿任务。有了这些中间状态,即使系统重启,也可以通过这些中间状态补偿重试将下单逻辑走下去。

查询订单的时候,在已冻结金额状态之后的订单就可以展示给用户看了,在下单成功之前,都可以显示为处理中。在扣库存失败之后,可以显示为退款中

3. 最终一致性(Eventually Consistent)

上面提到的软状态,并不会一直保持在这个软状态,而是最终通过系统正常逻辑或者补偿逻辑走向最终状态,各个节点也会同步这个最终状态,这就是最终一致性。

Werner Vogels针对这个最终一致性,总结了五种实现最终一致性的不同场景方案,分别是:

  • Causal consistency(因果一致性)
  • Read-your-writes consistency(读你所写一致性)
  • Session consistency(会话级别一致性)
  • Monotonic read consistency(单调读一致性)
  • Monotonic write consistency(单调写一致性)

在实际的实践中,这 5 种设计方案往往会互相结合使用,以构建一个具有最终一致性的分布式系统。

3.1. Causal consistency(因果一致性)

因果关系的意思是进程 A 的修改会通知进程 B,没有因果一致性的就是进程 A 的修改不会通知进程 C。对于有因果关系的进程,他们访问的数据应该是强一致性的,没有这个关系的走的是最终一致性。

举一个例子,用户查看商品库存的请求是非常巨大的,并且能接受一点时间内的不一致。假设为了应对这么大的请求,这个库存在商品微服务实例本地也缓存了一份,并且会随着收到下单请求就会将缓存失效重新获取扣库存后最新的库存量,同时这个缓存 5s 后一定会过期(真正扣库存不会使用这个缓存,这个仅仅展示用)。那么下单请求通过订单微服务 RPC 请求的商品微服务实例上面的库存就是最新的库存,其他实例的库存可能有点滞后性。

3.2. Read-your-writes consistency(读你所写一致性)

进程 A 在更新了数据项之后,总是访问更新的值,永远不会看到旧的值。这是因果一致性模型的一个特例

3.3. Session consistency(会话级别一致性)

在同一个会话内的修改,是可以立刻读取到最终修改的。在其他会话可能不会立刻读取到。

例如数据库的主从同步,请求在这个会话内写入主数据库,那么主数据库会话能立刻读取到这个修改,根据数据库的双 1 同步配置,默认情况下,只有同步完成后才能读取到这个修改。

3.4. Monotonic read consistency(单调读一致性)

如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧版本的值。

3.5. Monotonic write consistency(单调写一致性)

系统要保证同一个节点的写操作是顺序执行的。

微信搜索“我的编程喵”关注公众号,每日一刷,轻松提升技术,斩获各种offer

2021-2-20:请你说说分布式系统 BASE 理论是什么?相关推荐

  1. 【不忘初心】Win10_LTSC2021_19044.1381_X64_可更新[纯净精简版][2.52G](2021.11.20)

    此版可正常更新补丁,母版来自UUP WIN10_LTSC2021 19044.1288集成补丁到19044.1381为了保证稳定初心的系统全部都是离线精简和优化,非二次封装.系统纯净.流畅.进程少无任 ...

  2. GMOJ - 2021.07.20【普及组】模拟赛C组 - 排座椅(seat)、传球游戏(ball)、立体图(drawing)、间谍派遣、seek

    文章目录 luogu博客链接 GMOJ - 2021.07.20[普及组]模拟赛C组 - 排座椅(seat).传球游戏(ball).立体图(drawing).间谍派遣.seek T1 排座椅(seat ...

  3. 记第一次Python数据分析练习——2018年“泰迪杯”数据分析职业技能大赛B题(2021/5/20)

    文章目的 本人目前是应用统计专业大二(2021/5/20)的本科生,上学期上过Python课,但说实话讲的不深,过了一个学期也基本上忘光了. 最近深刻地觉得计算机专业真是好啊,以后我也要当程序员.JP ...

  4. 市面上主流编辑器介绍(2021/05/20)

    市面上主流编辑器介绍(2021/05/20) 背景 Markdown是一种有用的轻量级标记语言,后续Markdown简写为md. 富文本编辑器(Rich Text Editor,RTE)是一种可内嵌于 ...

  5. 【架构师-系统设计】理解分布式系统的CAP和BASE理论

    文章内容 CAP理论 概述 CAP定义 CAP理论的三选二的艰难抉择 CA,AP,CP的实践者 CAP的小结 BASE理论 概述 BASE定义 BASE与ACID BASE小结 原文请移步这里

  6. 分布式系统之CAP和BASE理论

    CAP理论 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上,首次提出了CAP猜想. 2002年,麻省理工学院的Seth Gilbert和Nancy Lynch从 ...

  7. PowerBI视觉对象共计271组,2021.01.20日更新

    PowerBI视觉对象共计271组,2021.01.20日更新 内容包含导入文件和图标.预览图.文件名一致,在预览图内找到合适的可以直接在视觉对象文件夹搜索 下载地址:点击下载 超便宜 或者复制链接打 ...

  8. 2021.05.20最少数量的箭引爆气球

    2021.05.20最少数量的箭引爆气球 题目描述 在二维空间中有许多球形的气球.对于每个气球,提供的输入是水平方向上,气球直径的开始和结束坐标.由于它是水平的,所以纵坐标并不重要,因此只要知道开始和 ...

  9. 普转题比赛2021/7/20

    普转题比赛2021/7/20 射命丸文 考试ing 正解 帕秋莉·诺蕾姬 考试ing 雾雨魔理沙 考试ing 正解 伊吹萃香 考试ing 正解 知道这次是老刘出题就有一种不祥的预感,毕竟之前他出题的时 ...

最新文章

  1. 客快物流大数据项目(五):Docker介绍
  2. “大众搬家”何其多啊?[3/14/2007 update]
  3. Linux设置环境变量小结
  4. Hyperledger Fabric权限进阶篇
  5. mysql数据库扫描_使用nmap对mysql 数据库进行扫描
  6. Spring工具类ToStringBuilder用法简介
  7. 记一次特别的往事 while 循环
  8. 《图形学》实验一:钻石图案
  9. AOJ0008 Sum of 4 Integers【暴力】
  10. centos6.9下rpm方式安装mysql后mysql服务无法启动
  11. Eclipse导入SVN项目的三种方式
  12. JS中经纬度的正则表达式(亲测有效)
  13. 三星6818芯片火焰报警器驱动的编写
  14. h5倒计时弹窗_H5活动开始/结束倒计时实现
  15. 【FPGA_001】用Verilog写一个数组,会耗费很多资源
  16. 使用 VSCode 编辑器来编译 Sass,自动生成对应的css
  17. 什么是gpt一4-如何用上gpt-4
  18. 想学习C语言?这里有非常实用的C语言技巧,进来看看吧!
  19. cad审图软件lisp_Design Review下载
  20. win11触控板使用不了的解决方法

热门文章

  1. 管理类联考——英语——趣味篇——词根词汇——按频次分类——高频词汇——List1
  2. SPI + DMA
  3. 微软面试100题【机密】
  4. 在linux终端显示cp命令复制文件时的速度
  5. 发票模板,纯css+html
  6. java 数据格式校验_Java对json是否合法进行格式校验详解
  7. Azure云服务反向DNS
  8. JAVA学习-8种基本类型及其对应的封装类
  9. html 左键右键双击事件,dblclick()
  10. linux下编译lisbusb,关于 qt 移植到 omap3530 总结