微服务扩展中的关键考量:CAP 定理与服务发现
1. CAP 定理的权衡
在分布式系统中,CA 系统是不存在的,因为它无法通过网络运行,本质上需要是本地运行的单进程。那么在 AP 和 CP 之间该如何选择呢?这实际上取决于具体情况。
作为系统构建者,我们清楚这种权衡的存在。AP 系统更易于扩展且构建简单,而 CP 系统由于要支持分布式一致性,面临诸多挑战,需要投入更多工作。然而,我们可能并不了解这种权衡对业务的影响。
例如,对于库存系统,如果记录延迟五分钟更新可以接受,那么 AP 系统或许是合适的选择。但对于银行客户的账户余额,延迟更新显然是不可接受的。在不了解操作的具体背景时,我们无法确定正确的选择。了解 CAP 定理能帮助我们认识到这种权衡的存在,并知道该提出哪些问题。
系统整体并非只能是 AP 或 CP。比如,产品目录可以采用 AP 模式,因为我们不太在意记录的时效性;而库存服务可能需要采用 CP 模式,以避免出现超售的情况。
甚至单个服务也不一定只能是 CP 或 AP。以积分余额服务为例,我们可能不在意向客户展示的余额是否是最新的,但在更新余额时,必须保证一致性,以防止客户使用超出可用额度的积分。这实际上是将 CAP 定理的权衡细化到了单个服务的功能层面。
此外,一致性和可用性并非非此即彼。许多系统允许更细致的权衡。以 Cassandra 为例,对于单个调用,我们可以做出不同的权衡。如果需要严格的一致性,可以进行读取操作,直到所有副本确认值一致后才返回,或者等待特定数量的副本响应,甚至只等待单个节点响应。显然,如果等待所有副本返回,而其中一个副本不可用,就会导致长时间的阻塞。但如果只要求部分节点返回,就可以在一定