分布式系统之CAP原则
什么是CAP原则?
分布式系统的基础理论,描述分布式系统在CAP三个特性中,最多满足其中两个,不能同时满足CAP。
C:一致性(Consistency)
A:可用性(Availability)
P:分区容错性(Partition tolerance)
特性 | 说明 |
---|---|
一致性 | 分布式系统中的写操作之后的读操作,都应该读到写操作最新写入的值。也就是说要保证分布式系统各个节点每时每刻的数据一致性。(PS:有点类似volatile在JMM中的可见性) |
可用性 | 客户端可以一直得到系统的正常响应,也就是一直可以用,一直可以正常读写操作 |
分区容错性 | 分区,部分出故障不影响整个系统,仍然对外满足A和C |
如何理解AP和CP不能同时满足?
个人理解,有不当请指出。
假设系统有S1和S2两个节点,客户端1号去改S1的值,还没有写完,这时客户端2号去读S2的值,此时矛盾产生:
- 如果要满足一致性,这时就得让S2无法使用
- 如果要满足可用性,两个客户端读取到的值必然不一样,破坏了一致性
所以无法保证同时满足。
如何选择?
- CP:放弃可用性,在数据一致性要求严格的场景下使用。一旦网络故障发生或者消息丢了,会牺牲用户体验,恢复了才能访问。
- AP:放弃一致性,数据一致性要求不严格,用户体验好的场景下使用。并不是真的数据不一致,而是慢慢回复一致性。
- AC:放弃容错就违背了分布式系统啊!不用。