分布式系统基础

引:自己这一段时间都在学习分布式系统相关的东西,但是都不成系统,所以这里将会总结目前学习的分布式系统相关内容,这里讲会总结分布式系统的相关概念,持续更新…。

CAP理论

2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy Lynch从理论上证明了CAP。之后,CAP理论正式成为分布式计算领域的公认定理。

CAP理论为:一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

下面举个例子:

假设有两台机器A、B,两者之间互相同步保持数据的一致性。现在B由于网络原因不能与A通信(Network Partition),假设某个client向A写入数据,现在有两种选择:

  • A拒绝写入,这样能保证与B的一致性,但是牺牲了可用性
  • A允许写入,但是这样就不能保证与B的一致性了

Network Partition是必然的,网络非常可能出现问题(断线、超时),因此CAP理论一般只能AP或CP,而CA一般较难实现。

  • CP: 要实现一致性,则需要一定的一致性算法,一般是基于多数派表决的,如Paxos和Raft
  • AP: 要实现可用性,则要有一定的策略决议到底用哪个数据,并且数据一般要进行冗余备份(replication)

当然,在上面的例子中,A可以先允许写入,等B的网络恢复以后再同步至B(根据CAP原理这样不能保证强一致性了,但是可以考虑实现最终一致性)。

下图刚好展示了CA,CP,AP系统是如何实现的:

CAP

  • 利用2PC协议属于CA,如,mysql等,他们主要通过复制的方式来保证数据的安全性。
  • 利用Gossip协议属于AP,如,redis-cluster、cassandra,Eureka他们是通过实现“最终一致性”来保证AP。
  • 利用Paxos协议属于CP,如redis(多master),hbase,这些数据库集群,节点有可能会因为无法确保数据的一致性而拒绝提供服务。

BASE理论

BASE理论是由eBay的架构师Dan Pritchett源于对大规模分布式系统的实践总结,在ACM上发表文章提出BASE理论,BASE理论是对CAP理论的延伸,核心思想是即使无法做到强一致性(Strong Consistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。

BASE理论为:基本可用(Basically Available)、软状态( Soft State)、最终一致性( Eventual Consistency)。

基本可用

基本可用是指分布式系统在出现故障的时候,允许损失部分可用性,即保证核心可用。

电商大促时,为了应对访问量激增,部分用户可能会被引导到降级页面,服务层也可能只提供降级服务。这就是损失部分可用性的体现。

软状态

软状态是指允许系统存在中间状态,而该中间状态不会影响系统整体可用性。

分布式存储中一般一份数据至少会有三个副本,允许不同节点间副本同步的延时就是软状态的体现。mysql replication的异步复制也是一种体现。

最终一致性

最终一致性是指系统中的所有数据副本经过一定时间后,最终能够达到一致的状态。弱一致性和强一致性相反,最终一致性是弱一致性的一种特殊情况。

ACID和BASE的区别与联系

ACID是传统数据库常用的设计理念,追求强一致性模型

BASE支持的是大型分布式系统,牺牲掉对一致性的约束(但实现最终一致性),来换取一定的可用性。

ACID和BASE代表了两种截然相反的设计哲学。

在英文中,ACID和BASE分别是“酸”和“碱”,看似对立,实则是分别对CAP三特性的不同取舍。在分布式系统设计的场景中,系统组件对一致性要求是不同的,因此ACID和BASE又会结合使用。

FLP Impossibility

Lease机制

Quorum机制

Consensus问题

时序问题

参考

  1. 分布式系统基础总结
  2. 分布式系统中的FLP不可能原理、CAP理论与BASE理论