编写一项服务,该服务必须与多个API对话,并且还必须与数据库进行某些事务。显然,异步调用的整个序列都可能失败,然后我想我必须回滚到目前为止已完成的步骤。对于DB,解决该任务的明显解决方案是使用事务。因此,如果任何步骤失败-事务就会简单地回滚。但是在混合分布式环境中发生同样的事情呢?
这里的最佳做法是什么?有没有?
答案 0 :(得分:1)
考虑到您拥有混合分布式环境和两阶段提交事务, 无效的选项,则可以应用 Saga模式。
基本思想是使服务/模块执行本地事务并协调其中的分布式事务,从而在必要时提供补偿操作以撤消操作。
这是一个复杂的模式,给您的系统增加了很多复杂性。但是,它为该问题提供了精心设计的解决方案。
参考:
答案 1 :(得分:1)
无论您是否仅使用rest API进行通信或使用其他协议或方法(例如Web套接字),都可以应用Saga模式。
该实现将需要对不同类型的调用进行抽象,但仍将其视为Saga模式。 Saga的编排仍处于应用程序级别,因此无论它是REST,WebSocket,WSDL还是其他对象,您都可以对其进行控制。
除了莱昂纳多提供的资源外,请查看此answer。