天天看点

CAP与CAP权衡

  1. CAP是什么?

    CAP是2000年时被提出,2002年被验证的分布式计算领域的公认定理。该定理的定义是:一个分布式系统最多只能同时满足CAP特性中的两个特性。

    C指Consistency,即数据一致性。

    指数据是在分布式系统中同一时间里的所有数据备份都是一致的。

    例如在如图所示的分布式数据库中,通过代理做负载均衡,把不同用户不同操作请求发送到不同的库上,这些操作所产生的数据影响应该在各库之间保持同步。

    CAP与CAP权衡

    A指Availability,即可用性。

    即一个分布式系统在某些节点故障宕机之后,整个集群还能向外提供可靠的数据读写服务。

    就拿上面这个例子来说,有一天,这个数据库集群的B库炸了。但是整个集群还能依靠剩余的库提供稳定的数据读写服务,这就是可用性。

    CAP与CAP权衡

    P指Partition tolerance,即分区容错性,也叫分区容忍性。

    先解释一下什么叫分区,两种理解,一种是是整个分布式系统中的数据备份不同步,这样整个系统就被拆成了两个或多个分区,1区该数据备份值为x,2区该数据备份值为y且x≠y。

    第二种是因为节点故障,集群中某个节点损坏,导系统被分割成1区和2区,且两区不能通信。

    而分区容错性就是在出现分区情况的时候,各分区还能各自保证CA特性。

    接着拿这个例子说,出现了分区情况,为了满足分期容错性,保证这两分区还能各自维持CA特性。

    CAP与CAP权衡
  2. CAP权衡

    显然CAP特性最多只能满足两条在分布式系统中,一定要舍弃一个特性,那么该如何抉择呢。这个时候就要看系统的特点和实际需求而定了。

    例如如果系统是涉及到钱财的,那么大多数情况下,C特性一致性就是不可或缺的,这中情况下就看需求再选择AP特性中的一个,要么不允许数据备份在分布式系统中出现,也就是保证A可用性,舍弃P,不提供分区容忍,一但网络故障,直接终止整个系统服务。或者选择P,提供分区容错,牺牲A可用性,在出现分区时候不提供写操作的服务,等待各节点的备份数据同步之后再提供写服务。

实际情况中分区一般是最容易出现的问题,所以是看情况选择CA特性,常见的如退一步放弃C特性,只要求数据最终一致性。