两阶段提交
程序员文章站
2022-06-12 14:23:34
...
这篇文章粗略讲一下两阶段提交协议,即2PC,Two Phase Commitment Protocol。之所以称为两阶段提交,是相对于单库的事务提交方式来说的。我们在单库上完成相关的数据库操作后,就会直接提交或者回滚,而在分布式系统中,在提交之前增加了准备的阶段,所以称为两阶段提交。
图1显示的就是第一阶段提交的情况,可以看到,参与操作的是事务管理器与两个资源。
图1 第一阶段
图2所示的是第二阶段的情况。
图2 第二阶段
此外还会遇到的另外一种情况,就是在准备阶段有一个资源失败,那么在第二阶段的处理就是回滚所有资源,如图3和图4所示。
图3 出现问题的第一阶段
图4 第一阶段出现问题后的第二阶段
前面对两阶段提交的介绍都是在理想状态下的情况。在实际当中,由于事务管理器自身的稳定性,可用性的影响,以及网络通信中可能产生的问题,出现的情况会复杂很多。此外,事务管理器在多个资源之间进行协调,它自身要进行很多日志记录的工作。网络上的交互次数的增多以及引入事务管理器的开销,是使用两阶段提交协议使分布式事务的开销增大的两个方面。
因此,在进行垂直拆分或者水平拆分后,需要想清楚是否一定要引入两阶段的分布式事务,在必要的情况下才建议使用。
图1显示的就是第一阶段提交的情况,可以看到,参与操作的是事务管理器与两个资源。
图1 第一阶段
图2所示的是第二阶段的情况。
图2 第二阶段
此外还会遇到的另外一种情况,就是在准备阶段有一个资源失败,那么在第二阶段的处理就是回滚所有资源,如图3和图4所示。
图3 出现问题的第一阶段
图4 第一阶段出现问题后的第二阶段
前面对两阶段提交的介绍都是在理想状态下的情况。在实际当中,由于事务管理器自身的稳定性,可用性的影响,以及网络通信中可能产生的问题,出现的情况会复杂很多。此外,事务管理器在多个资源之间进行协调,它自身要进行很多日志记录的工作。网络上的交互次数的增多以及引入事务管理器的开销,是使用两阶段提交协议使分布式事务的开销增大的两个方面。
因此,在进行垂直拆分或者水平拆分后,需要想清楚是否一定要引入两阶段的分布式事务,在必要的情况下才建议使用。