【问题标题】:Any established practices for implementing coordinated operations across multiple APIs?是否有跨多个 API 实施协调操作的既定实践?
【发布时间】:2020-02-28 08:45:41
【问题描述】:

编写一个服务,该服务必须与多个 API 通信,并且还要对 DB 执行一些事务。显然,整个异步调用序列中的任何一个都可能失败,然后我想我将不得不回滚到目前为止已经完成的步骤。在 DB 的情况下,任务的明显解决方案是使用事务。因此,如果任何步骤失败 - 事务只会被回滚。但是在混合分布式环境中发生同样的事情呢?

这里有哪些最佳做法?有吗?

【问题讨论】:

  • “混合分布式环境”到底是什么意思?您是指使用微服务还是更具体的分布式系统?
  • 我的意思是有些调用必须通过 Rest API 进行,有些调用必须通过 websocket 等等。
  • 请在此处查看我的回答 (stackoverflow.com/questions/58178511/…),它解释了 Saga 模式。

标签: rest api websocket microservices


【解决方案1】:

考虑到您拥有混合分布式环境和两阶段提交事务 无效选项,您可以应用 Saga 模式

基本思想是让您的服务/模块执行本地事务并协调它们之间的分布式事务,在必要时提供补偿操作以撤消操作。

这是一种复杂的模式,会给您的系统增加很多复杂性。但是,它为该问题提供了精心设计的解决方案。

参考资料:

【讨论】:

  • 我在想类似的东西 - RevertableOperation,它接受两个承诺,一个执行操作,另一个回滚。
【解决方案2】:

无论您是否仅使用 rest API 进行通信或其他协议或方法(如 Web Sockets),您都可以应用 Saga 模式。

实现需要对不同类型的调用进行抽象,但仍将其视为 Saga 模式。 Saga 的编排仍处于应用程序级别,因此无论它是 REST、WebSockets、WSDL 还是其他东西,您都可以控制它。

除了莱昂纳多提供的资源之外,请查看answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2015-06-14
    • 1970-01-01
    • 2015-06-05
    • 2011-08-22
    • 1970-01-01
    相关资源
    最近更新 更多