浅谈分布式系统中的CAP理论
CAP三要素定义
- C(Consistency, 一致性):所有节点在同一时间具有相同的数据。客户端每次读取都能读到最新的写入数据。
- A(Availability, 可用性):每个非故障节点必须对客户端的请求返回合理的响应(不保证返回最新数据)。
- P(Partition tolerance, 分区容错性):系统在遇到节点间网络故障(丢包、延迟导致分区)时,仍能继续运行。
为何只能实现二者?
在分布式系统中,由于网络的不稳定性,分区(P)是必然存在的。因此系统设计者必须在C和A之间做出取舍:
若选择强一致性(CP),在网络断开时,为了保证数据绝对一致,系统必须拒绝客户端的写请求直至网络恢复(牺牲可用性)。ZooKeeper、etcd属于CP模型。
若选择高可用性(AP),在网络断开时,系统允许向未同步数据的节点写入或读取旧数据(牺牲一致性),随后依靠最终一致性协议恢复。Eureka、Cassandra属于AP模型。
工程实践:BASE理论
为解决CAP的严格互斥,工程界提出了BASE理论(Basically Available, Soft state, Eventually consistent)。核心思想是:即使无法做到强一致性,也可以通过业务逻辑使系统达到最终一致性,这成为了目前绝大多数高并发系统的指导思想。