💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
>[info] 2PC-两阶段提交 两阶段提交又称**2PC(two-phase commit protocol**),2pc是一个非常经典的**强一致、中心化的原子提交协议**。这里所说的中心化是指协议中有两类节点:一个是中心化**协调者节点(coordinator)**和**N个参与者节点(partcipant)**。 ***** **第一阶段:请求/表决阶段:** ![](https://img.kancloud.cn/9f/72/9f72e428a1419fe57990f0873ba74b36_1058x275.png) ***** **第二阶段:提交/执行阶段(正常流程):** ![](https://img.kancloud.cn/cd/68/cd6875983d21313076c739949bfab276_1051x278.png) ***** **第二阶段:提交/执行阶段(异常流程):** ![](https://img.kancloud.cn/f1/59/f1596428350e4f782067b5f660695c5f_1022x281.png) ***** 实际上**分布式事务是一件非常复杂的事情**,两阶段提交只是通过增加了事务协调者(Coordinator)的角色来通过2个阶段的处理流程来解决分布式系统中一个事务需要跨多个服务节点的数据一致性问题。但是从异常情况上考虑,**这个流程也并不是那么的无懈可击**。 ***** **以下几点是XA-两阶段提交协议中会遇到的一些问题:** * **性能问题**。从流程上我们可以看得出,其最大缺点就在于它的执行过程中间,节点都处于阻塞状态。各个操作数据库的节点此时都占用着数据库资源,只有当所有节点准备完毕,事务协调者才会通知进行全局提交,参与者进行本地事务提交后才会释放资源。这样的过程会比较漫长,对性能影响比较大。 * **协调者单点故障问题**。事务协调者是整个XA模型的核心,一旦事务协调者节点挂掉,会导致参与者收不到提交或回滚的通知,从而导致参与者节点始终处于事务无法完成的中间状态。 * **丢失消息导致的数据不一致问题。** 在第二个阶段,如果发生局部网络问题,一部分事务参与者收到了提交消息,另一部分事务参与者没收到提交消息,那么就会导致节点间数据的不一致问题。