news 2026/3/6 13:42:09

【分布式系统】07 事务(上):2PC 与 3PC —— 追求“完美原子性”的理想与代价

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【分布式系统】07 事务(上):2PC 与 3PC —— 追求“完美原子性”的理想与代价

大家好,我是Tony Bai。

欢迎来到《分布式系统:原理、哲学与实战》微专栏的第七讲。

在上一讲中,我们征服了“分区”这片广阔的疆域。通过将数据“分而治之”,我们获得了构建海量系统的能力。但我们也留下了一个最棘手的“悬念”:

如果一次业务操作,需要原子性地修改位于不同分区的数据,我们该怎么办?

想象一个经典的银行转账场景:用户 Gopher 要从他在分区 A 的储蓄账户,转账 100 元到他在分区 B 的信用卡账户。这个操作包含两个步骤:

  1. 储蓄账户(分区 A)扣款 100 元。

  2. 信用卡账户(分区 B)入账 100 元。

我们对这个操作有一个神圣的、不可违背的要求:原子性 (Atomicity)。这两个步骤必须要么全部成功,要么全部失败。我们绝不能接受扣款成功但入账失败(钱没了),或者扣款失败但入账成功(天降横财)的情况。

在单机数据库中,BEGIN TRANSACTION...COMMIT语句优雅地为我们解决了这个问题。但现在,数据被分割在两个独立的、通过不可靠网络连接的物理节点上。我们如何在一个被“分裂”的世界里,重塑“原子性”的辉煌?

今天,我们将深入探讨对这个问题最早、也是最经典的回答——**两阶段提交协议 (Two-Phase Commit, 2PC)**。我们将看到,它是一个试图在分布式世界中,完美复刻单机事务的“理想主义”英雄。

然而,当这个“英雄”暴露出其致命的脆弱性时,一场旨在拯救它的“改良运动”也随之展开,催生了更复杂的**三阶段提交协议 (Three-Phase Commit, 3PC)**。

本章,我们将共同见证这场围绕“完美原子性”展开的、长达数十年的执着追求与艰难挣扎。我们将剖析 2PC 的伟大构想与悲壮缺陷,并审视 3PC 的改良尝试为何最终也未能成为完美的答案。

我们先从两阶段提交协议( 2PC )开始。

2PC 协议详解:一场由“协调者”主导的投票

两阶段提交引入了两个核心角色:

  • 协调者 (Coordinator):事务的发起者和最终决策者。在我们的例子中,可以是一个专门的事务管理服务,或是发起转账请求的应用服务器。

  • 参与者 (Participants):所有涉及该事务的数据节点。在我们的例子中,就是分区 A 和分区 B。

顾名思义,整个协议分为两个阶段:准备阶段 (Prepare Phase)和 提交阶段 (Commit Phase)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/4 0:12:48

HY-MT1.5-1.8B术语干预功能:专业翻译场景应用指南

HY-MT1.5-1.8B术语干预功能:专业翻译场景应用指南 1. 模型背景与应用场景 随着全球化进程的加速,高质量、可定制化的机器翻译需求日益增长。特别是在医疗、法律、金融、科技等专业领域,通用翻译模型往往难以满足对术语一致性、上下文连贯性…

作者头像 李华
网站建设 2026/3/4 12:23:56

基于波特图的环路断开点选择策略:系统学习

如何选对环路断开点?波特图稳定性分析的“命门”详解在开关电源、DC-DC变换器甚至电机控制系统的开发中,我们常听到一句话:“这个系统看起来工作正常,但一碰负载就振荡。”问题出在哪?往往不是元件坏了,也不…

作者头像 李华
网站建设 2026/3/3 22:30:52

从录音到文本:Fun-ASR全流程操作真实体验

从录音到文本:Fun-ASR全流程操作真实体验 在远程办公、会议记录和内容创作日益依赖语音输入的今天,高效准确的语音识别系统已成为提升生产力的关键工具。通义实验室联合钉钉推出的 Fun-ASR,作为一套支持本地部署的大模型语音识别解决方案&am…

作者头像 李华
网站建设 2026/3/3 22:31:16

AI读脸术性能提升:多模型融合实战教程

AI读脸术性能提升:多模型融合实战教程 1. 引言 1.1 业务场景描述 在智能安防、用户画像构建、个性化推荐等实际应用中,人脸属性分析是一项基础而关键的技术能力。其中,性别识别与年龄估计作为非身份类生物特征分析的核心任务,广…

作者头像 李华
网站建设 2026/3/3 15:47:19

通过qtimer::singleshot优化启动阶段任务调度

用好 QTimer::singleShot,让 Qt 应用启动“快”人一步 你有没有遇到过这样的场景:程序刚点开,界面卡着不动,Windows 弹出“程序未响应”,用户还没看清主窗口长什么样,就已经准备右键“结束任务”了&#xf…

作者头像 李华
网站建设 2026/3/3 15:10:30

lora-scripts客服机器人:行业术语理解LoRA微调

lora-scripts客服机器人:行业术语理解LoRA微调 1. lora-scripts 工具定位 lora-scripts 是一款开箱即用的 LoRA 训练自动化工具,封装了数据预处理、模型加载、训练调参、权重导出等全流程,无需手动编写复杂训练代码。该工具支持 Stable Dif…

作者头像 李华