1. 分布式事务
场景:服务A同时调用服务B和服务C,要求服务B和服务C同时成功时操作才成功。如果其中一个失败,需要进行事务性回滚。
方案:
(1)分阶段提交:引入一个全局事务管理模块,将服务B和服务C的事务分为parpare和commit两个阶段。第一阶段完成服务B和服务C各自的事务操作,第二阶段进行事务提交。如果失败了,则回滚。
(2)补偿机制:同样引入一个全局事务管理模块,在服务B和服务C的事务完成后,参与各自的DB事务。一旦出现问题,就诸葛回滚。
(3)异步消息:需要结合MQ来实现,即把全局事务状态放到MQ消息中,通过MQ消息来控制事务的提交。
2. dubbo协议
Dubbo支持dubbo、rmi、hessian、http、webservice、thrift、redis等多种协议,但是Dubbo官网是推荐我们使用Dubbo协议的。