CAP理论是分布式计算领域公认的一个定理。也是深深影响着分布式发展的一个经典理论。
![](https://img.haomeiwen.com/i1656799/32f71d53122f8b3c.jpg)
CAP理论告诉我们:一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availability)、和分区容忍性(Partition tolerance),最多只能同时满足其中两个。
分区容忍性
引用《从Paxos到ZooKeeper》中的一句话:
分区容错性约束了一个分布式系统需要具有如下特性:分布式系统遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务。
我个人理解,分区容忍性是说对外提供服务的分布式系统允不允许出现网络分区。由于网络故障不可避免,即分布式系统不可避免出现网络分区。也就是说在分布式系统中,P(分区容忍性)是无法放弃的。放弃了P也就是放弃了分布式系统,因为只有在单机环境中才不会出现网络分区。
一致性
在分布式环境中,一致性是说分布在多个网络节点的数据能够保持一致性。
举个例子来说,一份数据保存在多个节点上,当进行更新操作后,所有节点数据被成功更新为最新数据,则保持了数据的一致性。如果出现部分节点数据更新成功,部分失败,则会出现分布式数据不一致的情况。
可用性
在分布式环境中,可用性是说系统在一个合理的时间内返回结果。
对于不同的系统,我们对合理的时间的期望值是不一样的。对于一个WEB服务来说,我们期望在3秒以内返回。对于一个批量任务执行系统来说,对于返回结果我们可能容忍几个小时。
对于返回结果来说,不一定是一个正确的结果,而是一个合理的结果。举个例子,在一个分布式库存系统中,更新了某一件商品的库存,即由m -> n,由于某些原因,导致部分节点更新成功,另一部分节点更新失败。此时我们如果查询失败的节点的话,返回的结果m就不是一个正确的结果,但我们说这是一个合理的结果,这些失败的节点也是可用的。
在分布式环境中,由于P(分区容忍性)不可放弃,所以我们只能选择CP(放弃可用性)或者AP(放弃一致性)的组合。
放弃可用性
在系统出现数据不一致时,则在一段时间内暂停服务,直到故障解决或者数据恢复。即在一段时间内出现了服务的不可用。
放弃一致性
在系统出现数据不一致时,仍然对外提供服务,保持服务的可用性。
其实实际应用当中,放弃一致性并不是说完全放弃一致性,而是放弃数据的强一致性,保留数据的最终一致性。详细在谈到BASE理论时再说。
总结
根据CAP理论,针对不同的业务场景,应该把工作的重点放在一致性和可用性的权衡取舍。
网友评论