- 什么是CAP? CAP是 Consistency-C、Availability-A、Partition Tolerance-P三个词语的缩写,分别表示一致性、可用性、分区容忍性。 一致性(Consistency)指的是更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致; 可用性(Availability)指的是服务一直可用,而且是正常响应时间; 分区容忍性(Partition Tolerance)指的是分布式系统在遇到某节点或网络分区故障的时候,用户还是可以继续访问。
- 什么是CAP理论? CAP理论,是指在一个互相连接且共享数据的分布式系统中,当涉及读写操作时,只能保证一致性(Consistency)、可用性(Availability)、分区容错性(Partition Tolerance)三者中的两个,三者不可兼得。 3.CAP理论的理解 基于以下的环境来理解分布式数据库的CAP理论: 分布式数据库有两个节点DB Node1 和DB Node2,其中有初始值value0;当前情况下客户端Client1和Client2访问不同的节点查看到的值都是value0。
情景1:满足可用性和分区容忍性 假如现在Client1把Node1中的value0修改为value1,同时Node1和Node2之间的网络异常;此时状态如下: 则此时满足了系统的可用性和分区容错性,但是由于Node1和Node2中的数据不相同,因此失去了一致性;
情景2:满足一致性和分区容忍性 假如现在Client1把Node1中的value0修改为value1,同时Node1和Node2之间的网络异常;此时状态如下与上图相同,为了保证一致性,Node2会等待value0更新为value1后才对外提供服务,此时Node2无法对外提供服务,失去了可用性。
情景3:满足一致性和可用性 这种情况系统不再是分布式的,而是集中式数据库。
总结:如果保证 Node2 的一致性,那么Node1 必须在写操作时,锁定 Node2 的读操作和写操作。只有数据同步后,才能重新开放读写。锁定期间,Node2 不能读写,没有可用性不。如果保证 Node2 的可用性,那么势必不能锁定 Node2,所以一致性不成立。 综上所述,Node2 无法同时做到一致性和可用性。系统设计时只能选择一个目标。如果追求一致性,那么无法保证所有节点的可用性;如果追求所有节点的可用性,那就没法做到一致性。