CAP定理与BASE理论
cap定理与base理论
cap定理
2000 年 7 月,加州大学伯克利分校的 eric brewer 教授在 acm podc 会议上提出 cap 猜想。2年后,麻省理工学院的 seth gilbert 和 nancy lynch 从理论上证明了 cap。之后,cap 理论正式成为分布式计算领域的公认定理。
cap 理论为:一个分布式系统最多只能同时满足一致性(consistency)、可用性(availability)和分区容错性(partition tolerance)这三项中的两项。
- 一致性(consistency): 一致性指 (all nodes see the same data at the same time),即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
- 可用性(availability): 可用性指(reads and writes always succeed),即服务一直可用,而且是正常响应时间。
- 分区容错性(partition tolerance): 分区容错性指(the system continues to operate despite arbitrary message loss or failure of part of the system),即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
cap 权衡
通过 cap 理论,我们知道无法同时满足一致性、可用性和分区容错性这三个特性,那要舍弃哪个呢?
对于多数大型互联网应用的场景,主机众多、部署分散,而且现在的集群规模越来越大,所以节点故障、网络故障是常态,而且要保证服务可用性达到 n 个 9,即保证 p 和 a,舍弃c(退而求其次保证最终一致性)。虽然某些地方会影响客户体验,但没达到造成用户流程的严重程度。
对于涉及到钱财这样不能有一丝让步的场景,c 必须保证。网络发生故障宁可停止服务,这是保证 ca,舍弃 p。貌似这几年国内银行业发生了不下 10 起事故,但影响面不大,报道也不多,广大群众知道的少。还有一种是保证 cp,舍弃 a。例如网络故障是只读不写。
孰优孰略,没有定论,只能根据场景定夺,适合的才是最好的。
base 理论
ebay 的架构师 dan pritchett 源于对大规模分布式系统的实践总结,在 acm 上发表文章提出 base 理论,base 理论是对 cap 理论的延伸,核心思想是即使无法做到强一致性(strong consistency,cap 的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(eventual consitency)。
- 基本可用(basically available): 基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
- 软状态(soft state): 软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication 的异步复制也是一种体现。
-
最终一致性(eventual consistency): 最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
acid 和 base 的区别与联系
acid 是传统数据库常用的设计理念,追求强一致性模型。base 支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性。
acid 和 base 代表了两种截然相反的设计哲学,在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此 acid 和 base 又会结合使用。