node.js - 如果我的 Node.js 服务器在等待 Web 服务回调时崩溃,会发生什么情况?

标签 node.js web-services transactions soa

我刚刚开始研究 Node.js 来创建一个 Web 应用程序,该应用程序异步调用多个 Web 服务来完成单个客户端请求。我认为在 SOA 中这被称为组合服务/事务。

如果组合服务中的任何 Web 服务调用失败,我的 Node.js 应用程序将负责完成任何补偿操作。例如,如果服务 A 和 B 返回“成功”,但服务 C 返回“失败”,则 Node.js 可能需要对服务 A 和 B 应用补偿操作(有效撤消)。

我的问题是,如果我的 Node.js 服务器崩溃了怎么办?我可能正在进行一项复合交易。已多次调用 Web 服务,我正在等待回调。如果我的 Node 服务器崩溃,回调的响应将听不到。那么其中一项 Web 服务可能不成功,并且需要对其他服务采取一些补偿操作。

我不确定一旦我的 Node 服务器重新上线,我将如何解决这个问题。如果服务 A 和 B 成功,但 C 没有成功,这可能会使系统处于不一致的状态。

最佳答案

分布式事务are bad for SOA - 它们引入了依赖性、刚性、安全性和性能问题。您可以实现 Saga相反,这意味着您的每个服务都需要了解正在进行的操作,并在发现问题时采取补偿措施。您需要保存每个服务的状态,以便它们在恢复时知道达到一致的内部状态。

如果您发现必须进行分布式事务,那么您可能应该重新考虑服务之间的界限。

(评论更新) 即使您使用 Saga,您可能会发现您需要一些协调员来控制补偿 - 但如果您的服务是自治的,他们就不需要那个中央协调员 - 他们会自己执行补偿操作 - 例如,如果他们使用预订模式 infoq.com/news/2009/09/reservations 。他们可以在预订到期时进行补偿。否则,您可以将状态保留在某处(redis/db/zookeeper 等),然后在协调器恢复时检查该状态

关于node.js - 如果我的 Node.js 服务器在等待 Web 服务回调时崩溃,会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31612896/

相关文章:

Codeigniter 一笔交易有两种模型

node.js - burp 套件 REST Api 与 Nodejs

node.js - NodeJs 中的这一行是什么意思?

java - java web服务的推荐框架

java - 你好。我有 war 包装 spring boot soap web 服务,我部署到 tomcat 但 soapui 请求返回错误

python - AppEngine Transaction 是否需要执行 get 和 put 操作才能发挥作用?

javascript - Node.js 语法错误 : Unexpected identifier 'boolean' in ANTLR4 JavaScript Lexer

javascript - 使用 axios 从 Rest API 发出请求

java - JBAS017354 : Could not find the port number listening for protocol javax. ws.rs.core.Application

c# - 如何从交易建议中排除方法?