分布式系统的一致性、可用性与容错性
1. 最终一致性概述
在分布式系统中,一致性是一个关键概念,主要分为强一致性和最终一致性。
- 强一致性 :在提供强一致性的系统中,每次写入都会同步传播。这意味着所有读取操作总能看到最新的写入结果,不过可能会导致更高的延迟或更低的可用性。关系型数据库管理系统(RDBMS)基于ACID保证提供这种一致性,适用于需要事务处理的系统。
- 最终一致性 :与之相对,最终一致性系统仅保证写入操作后,读取操作最终会看到数据的变化,通常“最终”指的是在几毫秒内。这是因为此类系统中的数据复制是异步的。这种系统通常采用BASE语义,常见于NoSQL数据库。
为了实现异步和最终一致性,系统需要解决状态冲突问题。常见的方法是在实例间交换更新,并选择首次或最后一次写入作为有效写入。下面介绍两种有助于实现最终一致性的模式。
2. Sagas和补偿事务
Saga模式适用于分布式事务处理。在微服务时代之前,若只有一个主机和一个数据库,可依靠数据库引擎处理事务;若一个主机上有多个数据库,则可使用两阶段提交(2PC)。2PC有一个协调器,先通知所有数据库准备,待所有数据库报告准备就绪后,再通知它们提交事务。
但在微服务架构中,每个微服务可能都有自己的数据库,分布在整个基础设施中,此时简单事务和2PC不再适用。可以采用Saga模式,下面通过一个在线仓库的例子来说明。
假设要创建一个在线仓库,跟踪库存并支持信用卡支付。处理订单需要三个关键服务:订单处理服务、库存预留服务和信用卡收费服务。Saga模式有两种实现方式:
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



