分布式系统有三个重要指标:
-Consistency : 一致性
-Availability : 可用性
-Partition tolerance:分区容错性
这三个指标不可能同时做到,只能满足其中的两条,这被称之为CAP定理
一致性(Consistency)
一致性是指:在分布式系统中,不同的服务器之间所拥有的数据是相同的,不同用户同时访问不同分区的服务器,获取到的信息是完全相同的;
可用性(Availability)
可用性是指:在分布式系统中,不同的服务器均能向客户端正常提供服务,如果不同分区之间出现网络中断,分区的服务器出现不可用,则认为是不满足可用性;
分区容错性(Partition tolerance)
分区容错性:分区容错性是分布式系统必须具备的一项特性,某一分区服务器出现宕机,整个服务器集群仍然可以提供满足一致性和可靠性的服务;
从一致性和可用性的定义可以看出,这两个条件在分区网络出现中断的异常条件下是不可能同时满足的,原因很简单,当网络中断时,数据更新无法同步到所有节点,集群中所有节点的数据是不一致的,如果要满足一致性,则必须要将不一致的节点置为不可用,这时就不能满足可用性;反之亦然;
CAP定理告诉我们分布式系统只能满足CAP中的两个条件,分区容错性是分布式系统一定要具备的特性,因为分布式系统内部分节点出现故障或者网络延迟是一定的,当出现故障时如果整个系统无法正常运行,这对于任何使用场景都是不可接受的,因此CAP理论实际是讲在P的基础上当系统出现故障时,C和A如何进行选择,是选择一致性还是可用性,所以一个系统只会满足AP或者是CP,CP系统放弃了可用性,代价是无法向部分用户提供服务,满足CP特性的常见系统有:火车票系统,这时候要保证火车票库存的一致性,出现部分用户不可用也是可以接受的;
AP系统放弃了一致性,代价是当分区网络中断时,不同的用户看到的数据可能会不同,常见的AP系统有电商网站,不同用户看到的商品库存可能不一致,下单时有部分用户会出现下单失败,这个其实是实现了最终一致性;