分布式系统的“不可能三角”:CAP铁律与工程权衡
title: 分布式系统架构常识:CAP理论
date: 2025-10-29 17:30:25
category: 架构
tags: 分布式技术
CAP理论的核心概念
2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上首次提出CAP猜想。两年后,麻省理工学院的Seth Gilbert和Nancy
Lynch从理论上证明了这一猜想,从此CAP理论正式成为分布式计算领域公认的基础理论。
CAP理论由三个核心特性组成,在分布式系统中这三个特性无法同时满足,只能选择其中两个。
一致性(Consistency)
所有节点在同一时刻看到的数据完全相同
确保分布式集群中的所有节点在同一时间点保持数据同步,即所有节点实时拥有相同的数据视图。
可用性(Availability)
读写操作始终能够成功完成
保证服务持续可用,即使集群中部分节点发生故障,整个系统仍然能够正常响应客户端的读写请求。
分区容错性(Partition Tolerance)
系统在出现网络分区或消息丢失时仍能继续运行
从实际效果来看,分区相当于对通信时限的要求。如果系统无法在时限内达成数据一致性,就意味着发生了分区情况,此时必须在C和A之间做出权衡选择。
CAP特性的权衡策略
1、选择CA,放弃P
如果要避免分区容错性问题,可以将所有数据(特别是与事务相关的)集中存储在一台机器上。虽然不能100%保证系统不出故障,但可以避免分区带来的复杂性。这种选择会严重限制系统的扩展能力。
作为分布式系统,放弃分区容错性相当于放弃了分布式的核心价值。一旦并发量增加,单机服务根本无法承受压力。
像很多银行核心系统,确实选择了放弃P,采用大型机+Oracle数据库来保证服务可用性。
2、选择CP,放弃A
与放弃分区容错性相反的是放弃可用性。当发生分区容错故障时,受影响的服务需要等待恢复,在此期间系统无法对外提供服务。
在分布式系统中,分区故障很常见。如果因为部分服务不可用导致整个系统不可用,这就不是一个良好的分布式系统设计。
3、选择AP,放弃C
这里所说的放弃一致性,不是完全放弃数据一致性,而是放弃强一致性要求。即不要求数据的实时一致性,而是保证数据的最终一致性。
以电商购物为例,对于仅剩一件库存的商品,如果同时收到两个订单,较晚的订单会被告知库存不足。
通常情况下,大多数分布式服务系统都采用这种方案,优先保证可用性和分区容错性,在出现分区问题时先保证服务可用,然后通过补偿机制实现数据的最终一致性。
