最终一致性:分布式系统中的现实与取舍
副标题 / 摘要 最终一致性表示“短时间内可能不一致,但最终会收敛”。本文解释它的工程价值与风险。 目标读者 负责分布式系统的后端工程师 设计一致性模型的架构师 需要做数据取舍的产品与技术负责人 背景 / 动机 强一致性通常意味着更高延迟与更低可用性。 最终一致性提供了可用性与扩展性的折中方案。 核心概念 最终一致性:系统在一段时间后收敛一致 收敛时间:达到一致所需的时间窗口 读写冲突:并发更新导致的版本差异 实践指南 / 步骤 识别可容忍不一致的业务 定义收敛时间与告警阈值 引入幂等与重试机制 用版本号/时间戳解决冲突 可运行示例 # 简化的“最终一致”模拟 state = {"A": 0, "B": 0} def update(node, delta): state[node] += delta def reconcile(): total = sum(state.values()) state["A"] = total // 2 state["B"] = total - state["A"] if __name__ == "__main__": update("A", 5) update("B", -1) print(state) # 暂时不一致 reconcile() print(state) # 最终收敛 解释与原理 最终一致性依赖异步复制与冲突解决策略。 它让系统保持高可用与高吞吐,但需要接受短暂的不一致。 常见问题与注意事项 所有业务都适合最终一致吗? 不适合,金融扣款等场景需要更强一致性。 ...