转自 kyo_san 为什么不能同时满足CAP原则

来源:互联网 发布:java打印金字塔型数字 编辑:程序博客网 时间:2024/06/06 03:25
前段时间,学习分布式网络架构时,总是会看到一个CAP原则,设计分布式架构时,这个原则只能满足其中两个条。 但对这个东西没有理解,今天试着理下。 
       CAP原则是指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),这个概念是来源于DB部署的要求。
      C:一致性,当系统收到一个写入操作后,所有的结点在同一时间的数据时一致的。
      A:可用性,当系统收到一个写入操作后,在一定时间内总会返回一个结果。
      P:分区容错性,当系统中的分布式结点不能通信时,仍然能够提供服务。

只能满足CA不能满足P的理解
用异地DB来举例。假如分别在A和B两地部署了DB。两个DB均能提供数据读写服务。对DB的要求是如果进行一个数据写入操作,必须是两地DB同时更新才能算成功。那么此时这个部署是满足C以及A,因为写入一个数据后,在两个结点是同时可以看到,而且在进行一个操作后,也是有成功的结果,所以同时满足CA。如果此时出现网络故障,那么CA是不能保证的,也就是说P的条件达不到。因此在这种情况只能满足CA不能满足P。
只能满足AP不能满足C的理解
还用异地DB来举例。此时对DB的要求改为操作其中一个DB成功就算成功,另一个DB会根据binlog之类的进行同步。那么此时这个部署是满足A以及P的,因为写入一个数据后,可以返回一个结果,同时当A地或者B地出现故障,不影响仍然能提供服务,所以同时满足AP,但是在进行一个操作后,因为同步的原因两边会出现短暂的数据不一致,这是无法满足C的,当AB两地出现网络故障时,数据的差异会增大,更加无法满足C。
只能满足CP不能满足A的理解
继续用异地DB来举例。此时对DB的要求是写数据时,必须同时写入到两个DB才能算成功,同时如果有一个写入失败,将停止写入操作的权限只提供读的操作。那么此时这个部署是满足C以及P的,因为写入一个数据后,在两个结点同时能看到,当出现网络故障时,将会停止写入操作权限只提供读取操作。那么CP是可以满足的而A是无法满足的。
当然在目前海量数据面前,往往会舍弃C,而保证AP,对与数据的一致性,只要求最终一致即可,在过程中是会出现差异的状况,比如在不同地方的人对某个新闻或者商品进行评论,在一定时刻内是不需要实时显示出来的,只要保证最终会出现即可。

原创粉丝点击