2008 年 eBay 的架构师 Dan Pritchett 在发表给 ACM 的文章 BASE: An Acid Alternative 中第一次明确提出BASE理论。
简介
BASE 不是 base (基础) 的意思
BASE是 Basically Available(基本可用)、Soft state(软状态)和 Eventually consistent(最终一致性)三个短语的简写。
BASE是对CAP 理论中强一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结,是基于CAP定理逐步演化而来的,其核心思想是即使无法做到强一致性(Strong consistency),每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。
Basically Available
BASE 中的 BA,基本可用。
基本可用是指分布式系统在出现不可预知故障的时候,允许损失部分可用性 (响应时间、功能上的可用性).
注意,允许损失部分可用性 不等价于 系统不可用
响应时间上的损失:正常情况下的搜索引擎 0.5 秒即可返回结果,而基本可用情况下的搜索引擎 1 秒才返回结果。
功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单,但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
Soft state
BASE 中的 S,软状态。
软状态指的是,允许系统中的数据存在中间状态,且该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时,前提是这个延时不影响可用性。
硬状态, 要求多个节点的数据副本都是一致的
Eventually consistent
BASE 中的 E,最终一致性。
上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性。
亚马逊首席技术官Werner Vogels在于2008年发表的一篇经典文章Eventually Consistent-Revisited中,对最终一致性进行了非常详细的介绍。
他认为最终一致性是一种特殊的弱一致性:
系统能够保证在没有其他新的更新操作的情况下,数据最终一定能够达到一致的状态 ,因此所有客户端对系统的数据访问都能够获取到最新的值。同时,在没有发生故障 的前提下,数据达到一致状态的时间延迟,取决于网络延迟、系统负载和数据复制方 案等因素。
最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一致的状态。
强一致性
有弱一致性,就有强一致性。
强一致性要求,在更新的同时,所有节点查询到的都必须是最新的数据。
5种最终一致性
实际工作中,最终一致性分为 5 种

因果一致性(Causal consistency)
如果节点A在更新完某个数据后通知了节点B,那么节点B的访问修改操作都是基于A更新后的值,同时,和节点A没有因果关系的C的数据访问则没有这样的限制
读己之所写(Read your writes)
因果一致性的特定形式,一个节点A总可以读到自己更新的数据
会话一致性(Session consistency)
访问存储系统同一个有效的会话,系统应保证该进程读己之所写
单调读一致性(Monotonic read consistency)
一个节点从系统中读取一个特定值之后,那么该节点从系统中不会读取到该值以前的任何值
单调写一致性(Monotonic write consistency)
一个系统要能够保证来自同一个节点的写操作被顺序执行(保证写操作串行化)