分布式两阶段和三阶段、可靠性消息投递机制
程序员文章站
2022-05-09 15:59:27
...
总结就是:
有两种角色,协调者和参与者
两阶段:
1. 协调者给所有参与者发送准备消息,每个参与者要么直接返回失败,或者执行本地事务,写本地redo和undo日志,但不提交,并响应给协调者;
2. 协调者根据反馈情况给所有参与者发送是要中止操作还是提交操作,如果提交,则所有参与者提交事务,释放资源,如果中止,则所有参与者中止事务,释放资源,并响应给协调者。
三阶段:
1. 协调者给所有参与者发送是否可以准备,参与者根据自己是否能够顺利执行事务,要么响应Yes,要么响应No;
2. 协调者根据反馈情况通知参与者,如果都是Yes,则执行,否则中止,参与者就根据是执行来进行本地事务,写本地redo和undo日志,或者中止,并响应协调者;
3. 协调者根据响应情况通知参与者是要提交操作还是中止操作,同二阶段第2点。
可靠性消息投递机制(使用MQ来处理分布式事务):
1. 服务A先把消息持久化到本地数据库,并把状态设为待发送;
2. 服务A把消息发送到消息队列当中;
3. 服务B从消息队列获取消息并执行;
4. 服务B如果执行成功,则发送一个消息到消息队列响应服务A,如果失败,则不操作;
5. 服务A从消息队列获取响应结果;
6. 更改本地数据库对应的消息状态,改为完成;
7. 有一个定时任务,从本地数据库查找消息状态为未完成的,并重新投递到消息队列当中。
推荐阅读