CAP理论
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。
任何分布式架构设计的系统,只能同事满足CAP中的任意两种,无法同时三种并存。
CAP(Consistency,Availability,Partition tolerance),分别代表一致性、可用性、分区容错性
1. 一致性(Consistency)
一致性指“all nodes see the same data at the same time”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
2. 可用性(Availability)
可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。
3. 分区容错性(Partition tolerance)
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
对于多数大型互联网应用的场景,主机众多、部署分散,节点故障、网络故障是常态,必须保证P;应用的目的是提供服务,因此通常也要保证A。既然要保证P和A,就只能不同程度的舍弃C,牺牲一些用户体验。严格来讲,部分应用的A也不必保证100%,因此,主流做法是首要保障P、在A和C之间取舍、重A轻C。
NoSQL在CAP的抉择中对C做了妥协,允许最终一致性,即BASE
BASE理论
eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。
BASE是指基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。
1. 基本可用(Basically Available)
基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。
电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。
2. 软状态( Soft State)
软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。
3. 最终一致性( Eventual Consistency)
最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。
在分布式环境下,大多数的NoSQL数据库仅能保证最终一致性,可能无法立即读到最新的数据。
ACID是事务的四个基本性质,属于传统数据库常用的设计理念,追求强一致性模型,详见事务的ACID和四个隔离级别。BASE支持的是大型分布式系统,提出通过牺牲强一致性获得高可用性(与分区容错性)。