zhaoyu@home:~$

CAP和BASE

CAP

2000年,某某教授在某研讨会上提出了一个猜想:一致性、可用性和分区容错性三者无法在分布式系统中被同时满足,并且最多只能满足其中两个。 这就是CAP原理。

  1. C(一致性):这里应该称为强一致性,或者严格一致性。对于一个将数据副本分布在不同节点上的系统来说,在一个节点上的数据操作,可能在 一定时间只有才会在另一个副本节点上体现。所以没有满足数据的强一致性。
  2. A(可用性):每个请求都能在有限的时间返回结果。这个有限的时间,google搜索是0.3秒,对于一个大数据平台的查询可能 是20s-30s,跨度更大的查询可能会是几分钟。返回结果指一个正常的响应结果,如果是一个类似OutOfMemory等的系统错误,我们认为系统是 不可用的。
  3. P(分区容错):分布式系统在遇到任何网络分区故障时,系统任然可以提供一致性和可用性的服务。拥有分区容错性的系统也拥有可扩展性。

对于一个分布式系统,系统中的各个组件必然需要被部署到不同的节点上,因此,网络问题是一个必然出现的情况,分区容错性,是一个分布式系统 必须需要面对和解决的问题。所以架构师一般会结合业务,在一致性和可用性之间寻求平衡。

BASE

接受最终一致性的理论支撑是BASE模型,BASE全称是BasicallyAvailable(基本可用), Soft-state(软状态), Eventually Consistent (最终一致性)。BASE模型在理论逻辑上是相反于ACID(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability)模型 的概念,它牺牲高一致性,获得可用性和分区容忍性。

  1. 基本可用:系统在发生故障的时候,允许损失部分可用性,如搜索引擎0.5秒返回查询结果,故障后可能会2s返回。电商系统会在购物高峰时, 返回降级后的页面。
  2. 软状态:指数据可以存在中间状态,即允许系统在不同节点的数据副本之间同步数据时存在延时。如mysql或者kafka的replication。
  3. 最终一致性: 最终一致性是指:经过一段时间以后,更新的数据会到达系统中的所有相关节点。这段时间就被称之为最终一致性的时间窗口。