如果我的Node.js服务器在等待Web服务callback时崩溃,会发生什么?

我刚开始研究Node.js来创build一个asynchronous调用多个Web服务来完成一个客户端请求的Web应用程序。 我认为在SOA中,这就是所谓的复合服务/交易。

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

我的问题是,如果我的Node.js服务器崩溃? 我可能正在进行复合交易。 多次调用Web服务已经完成了,我正在等待callback。 如果我的节点服务器崩溃,callback意味着callback将闻所未闻。 那么可能有一个Web服务不成功,并且需要对其他服务进行一些补偿行动。

我不知道一旦我的节点服务器重新联机,我将如何解决这个问题。 如果服务A和B成功,这可能使系统处于不一致的状态,但是C没有。

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

如果你发现你必须有分布式交易,那么你应该重新思考你的服务之间的界限。

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