如果我的 Node.js 服务器在等待 Web 服务回调时崩溃会怎样?
What happens if my Node.js server crashes while waiting for web services callback?
我刚刚开始研究 Node.js 创建一个异步调用多个 Web 服务来完成单个客户端请求的 Web 应用程序。我认为在 SOA 中这被称为组合服务/事务。
我的 Node.js 应用程序将负责在组合服务中的任何 Web 服务调用失败时完成任何补偿操作。例如,如果服务 A 和 B return 'success',但服务 C returns 'fail',Node.js 可能需要应用补偿操作(有效撤消)在服务 A 和 B 上。
我的问题是,如果我的 Node.js 服务器崩溃了怎么办?我可能正在进行复合交易。已多次调用 Web 服务,我正在等待回调。如果我的节点服务器崩溃,用于回调的响应将闻所未闻。那么其中一个 Web 服务可能不成功,并且需要对其他服务采取一些补偿措施。
我不确定一旦我的节点服务器重新联机,我将如何解决这个问题。如果服务 A 和 B 成功但 C 没有成功,这可能会使系统处于不一致状态。
分布式事务 are bad for SOA - they introduce dependency,rigidity , security and performance problems. You can implement a Saga 相反,这意味着您的每个服务都需要了解正在进行的操作,并在发现问题时采取补偿措施。您希望为每个服务保存状态,以便它们在恢复时知道要达到一致的内部状态。
如果您发现必须使用分布式事务,那么您可能应该重新考虑服务之间的界限。
(根据评论更新)
即使你使用 Saga,你可能会发现你需要一些协调者来控制补偿——但如果你的服务是自治的,他们就不需要那个中央协调者——他们会自己执行补偿行动——例如,如果他们使用预订模式 infoq.com/news/2009/09/reservations 。他们可以在预订到期时进行补偿。否则,您可以将状态保存在某处(redis/db/zookeeper 等),然后在协调器恢复时检查
我刚刚开始研究 Node.js 创建一个异步调用多个 Web 服务来完成单个客户端请求的 Web 应用程序。我认为在 SOA 中这被称为组合服务/事务。
我的 Node.js 应用程序将负责在组合服务中的任何 Web 服务调用失败时完成任何补偿操作。例如,如果服务 A 和 B return 'success',但服务 C returns 'fail',Node.js 可能需要应用补偿操作(有效撤消)在服务 A 和 B 上。
我的问题是,如果我的 Node.js 服务器崩溃了怎么办?我可能正在进行复合交易。已多次调用 Web 服务,我正在等待回调。如果我的节点服务器崩溃,用于回调的响应将闻所未闻。那么其中一个 Web 服务可能不成功,并且需要对其他服务采取一些补偿措施。
我不确定一旦我的节点服务器重新联机,我将如何解决这个问题。如果服务 A 和 B 成功但 C 没有成功,这可能会使系统处于不一致状态。
分布式事务 are bad for SOA - they introduce dependency,rigidity , security and performance problems. You can implement a Saga 相反,这意味着您的每个服务都需要了解正在进行的操作,并在发现问题时采取补偿措施。您希望为每个服务保存状态,以便它们在恢复时知道要达到一致的内部状态。
如果您发现必须使用分布式事务,那么您可能应该重新考虑服务之间的界限。
(根据评论更新) 即使你使用 Saga,你可能会发现你需要一些协调者来控制补偿——但如果你的服务是自治的,他们就不需要那个中央协调者——他们会自己执行补偿行动——例如,如果他们使用预订模式 infoq.com/news/2009/09/reservations 。他们可以在预订到期时进行补偿。否则,您可以将状态保存在某处(redis/db/zookeeper 等),然后在协调器恢复时检查