BASE理论
eBay 的架构师 Dan Pritchett 源于对大规模分布式系统的实践总结,在 ACM 上发表文章提出 BASE 理论,BASE 理论是对 CAP 理论的延伸,核心思想是:即使无法做到强一致性(Strong Consistency),CAP 的一致性就是强一致性),但每个应用都可以根据自身的业务特点,采用适合的方式来达到最终一致性(Eventual Consitency)。
BASE 是指基本可用(Basically Availability)、软状态( Soft State)、最终一致性( Eventual Consistency)。
基本可用(Basically Availability)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
损失部分可用性可体现为:
- 响应时间上的损失:正常情况下的搜索引擎 0.5 秒即返回给用户结果,而基本可用的搜索引擎可以在2秒后返回结果。
- 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单。但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
软状态(Soft-State)
相对于 ACID 中的原子性(Atomicity)而言,要求多个节点的数据副本都是一致的,这是一种“硬状态”。
而软状态(Soft-State)是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性,最终数据会保证最终一致性。
比如,数据库读写分离,写库同步到读库(主库同步到从库)会有一个延时,这样实际是一种柔性状态。
最终一致性(Eventual Consistency)
上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性,从而达到数据的最终一致性( Eventual Consistency)。这个时间期限取决于网络延时、系统负载、数据复制方案设计等等因素。
弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
ACID 和 BASE 的区别与联系
ACID 和 BASE 代表了两种截然相反的设计哲学,而 CAP 也正是 ACID 和 BASE 长期博弈(trade off)的结果。
ACID 是传统数据库常用的设计理念,追求强一致性模型。因此 ACID 伴随数据库的诞生定义了系统基本设计思路,
2000年左右,随着互联网的发展,高可用的话题被摆上桌面,所以提出了 BASE ,即通过牺牲强一致性获得高可用性。从此 C 和 A 的取舍消长此起彼伏,其结晶就是 CAP 理论。
在高可用与高性能的应用场景,分布式事务的最佳实践是放弃 ACID,遵循 BASE 的原则重构业务流程。
CAP 并不与 ACID 中的 A(原子性)冲突,值得讨论的是 ACID 中的 C(一致性)和 I(隔离性)。ACID 的 C 指的是事务不能破坏任何数据库规则,如键的唯一性。与之相比,CAP 的 C 仅指单一副本这个意义上的一致性,因此 CAP 的 C 只是 ACID 一致性约束的一个严格的子集。
如果系统要求 ACID 中的 I (隔离性),那么它在分区期间最多可以在分区一侧维持操作。事务的**可串行性(serializability)**要求全局的通信,因此在分区的情况下不能成立。
Reference
- https://queue.acm.org/detail.cfm?id=1394128
- https://en.wikipedia.org/wiki/Eventual_consistency
- 一文带你重新审视CAP理论与分布式系统设计 - https://dbaplus.cn/news-159-1917-1.html
- 分布式理论(二) - BASE理论 - https://juejin.im/post/5b2663fcf265da59a401e6f8
- https://stackoverflow.com/questions/3342497/explanation-of-base-terminology
- https://www.freecodecamp.org/news/a-thorough-introduction-to-distributed-systems-3b91562c9b3c/