2022-06-28 03:39:08
一、两阶段提交
两阶段提交(2PC,Two-Phase Commit)是一种用于确保分布式系统中所有节点数据一致性的协议。它分为两个阶段:
阶段一:准备阶段(Prepare Phase)
事务发起者(协调者)向所有参与者(执行者)发送事务请求,要求它们准备执行事务。
参与者执行本地事务的准备工作,如锁定资源、检查条件等,并返回准备结果给协调者。
如果所有参与者都返回成功,则进入阶段二;如果有任何参与者返回失败,则协调者取消事务,并向所有参与者发送取消请求。
阶段二:提交阶段(Commit Phase)
如果阶段一成功,协调者向所有参与者发送提交请求(Confirm)。
参与者执行本地事务的提交操作,释放锁定的资源,并返回提交结果给协调者。
如果协调者在阶段二中没有收到所有参与者的成功确认,或者阶段一中有参与者失败,则协调者需要取消事务(Cancel),并向所有参与者发送取消请求(尽管在阶段一已经失败的参与者无需再次取消)。
超时与异常处理:
问题:
二、三阶段提交
三阶段提交(3PC,Three-Phase Commit)是对两阶段提交的改进,通过增加一个准备提交阶段来降低数据不一致的风险。它分为三个阶段:
阶段零:检查阶段(CanCommit Phase)
协调者向所有参与者发送检查请求,询问它们是否可以提交事务。
参与者检查本地条件(如资源是否足够),并返回是否可以提交的结果。
阶段一:准备阶段(Prepare Phase)
如果阶段零成功,协调者向所有参与者发送准备请求,要求它们锁定资源并准备提交。
参与者执行准备操作,并返回准备结果。
阶段二:提交阶段(Commit Phase)
如果阶段一成功,协调者向所有参与者发送提交请求(DoCommit)。
参与者执行提交操作,并返回提交结果。
如果协调者在阶段二中没有收到所有参与者的成功确认,或者阶段一中有参与者失败,则进入回滚阶段(Rollback),向所有参与者发送回滚请求。
改进:
问题:
三、TCC框架
TCC(Try-Confirm-Cancel)框架是一种分布式事务的实现方式,它要求每个参与者都实现Try、Confirm、Cancel三个操作。
Try阶段:
事务管理方向所有参与者发起Try请求,参与者执行本地事务的预备操作,如锁定资源、检查条件等。
Try操作需要保证幂等性,即多次执行相同操作的结果应该是一致的。
Confirm阶段:
如果Try阶段所有参与者都返回成功,事务管理方向所有参与者发起Confirm请求,参与者执行本地事务的提交操作。
Confirm操作也需要保证幂等性。
Cancel阶段:
如果Try阶段有任何参与者返回失败,或者Confirm阶段有参与者失败,事务管理方向所有参与者发起Cancel请求,参与者执行本地事务的回滚操作。
Cancel操作同样需要保证幂等性。
特点:
优化空间:
综上所述,两阶段提交、三阶段提交和TCC框架都是用于解决分布式事务一致性问题的方法,它们各有优缺点,在实际应用中需要根据具体场景和需求选择合适的方法。