一、CAP
Consistency 【kənˈsɪstənsi】 (一致性)
Availability 【əˌveɪlə'bɪləti】(可用性)
Partition Tolerance 【pɑːˈtɪʃn ˈtɒlərəns】(分区容错性)
二、Consistency一致性
一致性说的是当一个相同的请求访问不同的节点时,要么读取到的都是最新的数据,要么读取失败。继续上图:
当然在分布式系统中是有可能发生一个或多个节点发生故障的情况,比如网络故障导致数据同步失败。这个时候如果硬要按照一致性的原则,给用户返回一个错误信息,会显的很不友好。这时我们可能就会需要牺牲一定的一致性,来保证服务是可用的,这个就是下面的可用性了。
三、Availability可用性
可用性是指客户不管访问那一台服务器,都能收到服务端的响应,虽然数据可能是不一致的,不是最新的。
四、Partition Tolerance分区容错性
分区容错性指的是当服务器节点出现任意数量的消息丢失或延迟时,整个系统仍然可以提供服务,是所有分布式系统必须保证的一点。这个个人感觉和可用性挺像的,不过可用性貌似强调的是不管访问哪个服务器,而分区应该是强调一块区域吧,比如一个机房与另一个机房发生了数据同步延迟的情况。
五、总结
赛斯·吉尔伯特(Seth Gilbert)和南希·林奇(Nancy Lynch)证明了CAP是不能共存的(网上查的)。系统要么是CA模型,要么是CP模型,要么是AP模型。
CA模型:保证了一致性和可用性,只适合于单机版本。
CP模型:保证了一致性和分区容错性,当数据不一致时会出现拒绝写的操作,适用于数据一致性要求高的场景,比如银行系统。框架里面使用CP模型的有ZooKeeper等。
AP模型:保证了可用性和分区容错性:保证了服务器的高可用,适用于对数据一致性要求不高的场景。框架里面使用AP模型的有Eureka等。