# 2PC（Two-Phase Commit)

+ 同步阻塞
+ 单点故障
+ 网络延迟

![center](./student-guide/diagram/10-2PC-01-01.png)

-------------------------------------------------------------
2PC（Two-Phase Commit）

数据库领域最常用的事务是 2PC ，2PC 的首次正式提出是在 Jim Gray 1977 年发表的一份文稿中，文稿的题目是“Notes on Data Base Operating Systems”，对当时数据库系统研究成果和实践进行了总结。2PC 的处理过程也分为准备和提交两个阶段，每个阶段都由事务管理器与资源管理器共同完成。其中，事务管理器作为事务的协调者只有一个，而资源管理器作为参与者执行具体操作允许有多个。

相比于 TCC，2PC 的最大优点是借助了数据库的提交和回滚机制，不侵入业务逻辑。但传统的 2PC 有很多挑战，包括：
- 同步阻塞
执行过程中，数据库要锁定对应的数据行。如果其他事务刚好也要操作这些数据行，那它们就只能等待。其实同步阻塞只是设计方式，真正的问题在于这种设计会导致分布式事务出现高延迟和性能的显著下降。
- 单点故障
事务管理器非常重要，一旦发生故障，数据库会一直阻塞下去。尤其是在第二阶段发生故障的话，所有数据库还都处于锁定事务资源的状态中，从而无法继续完成事务操作。
- 网络延迟
多次网络交互，整个事务完成的延迟很高。进而影响系统在事务的并发能力。
