知识卡片

原子提交问题与两阶段提交的机制及两个不归路

普通读书笔记卡

内容

跨多节点的事务要维持[[ACID原子性的本质是可中止性与并发无关]],必须让所有参与节点对”提交还是中止”达成一致——这被称为原子提交问题,是共识的一种特化形式(只有全部参与者都投赞成票才能提交,任一参与者要求中止就必须全部中止)。两阶段提交(2PC)是解决它最常见的算法,引入协调者角色,分两阶段完成:阶段一(准备),协调者向所有参与者发准备请求,参与者必须把所有事务数据落盘、确认自己在任何情况下都能不出差错地提交,然后回答”是”或”否”;阶段二(提交/中止),只有全部参与者都回答”是”,协调者才发出提交请求,否则发中止请求。协议里有两个关键的”不归路”:参与者一旦投了”是”,就承诺自己稍后一定能提交,放弃了单方面中止的权利;协调者一旦把决定写入磁盘日志,这个决定就不可撤销,必须无条件重试直到所有参与者执行完毕。这两个承诺共同构成了2PC原子性保证的基础。

参考来源

- 位置:《数据密集型应用系统设计》第九章《一致性与共识》"原子提交与两阶段提交""两阶段提交简介""系统承诺"(源文件:_epub-src/ch9_split_001.html) - 结论依据:原文定义原子提交问题及其与共识的形式化差异,描述2PC准备/提交两阶段流程与协调者角色,并明确指出参与者投"是"后与协调者决定落盘后是两个不可撤销的关键节点,直接支撑本卡片结论。 - 原始内容:协调者开始阶段1:它发送一个准备请求到每个节点……如果所有参与者都回答"是"……协调者在阶段2发出提交请求……该协议包含两个关键的"不归路"点。