可以对多个分布式数据目的地Nodejs进行事务控制吗?

问题描述 投票:0回答:2

我有将数据写入nodejs中的多个数据目的地的情况

writeToMySql(data); //Step 1
postRestApi(data);  //Step 2
writeToSqlServer(data); //Step 3 

所以问题是数据目的地是分布式的。我想做一些类似“交易”的事情,如果3步中的任何一步失败,所有1,2,3都回滚

但是第2步是rest Api,如果数据发布到Api,我无法回滚,因为数据在另一个服务器/服务中;

那么有什么方法可以实现这个概念吗?谢谢大家;

node.js transactions rollback
2个回答
0
投票

一般来说,Node JS 和其他“现代”软件开发平台不支持它。您需要依赖像 sagas 这样的旧技术,这意味着以编程方式检测和回滚事务的开发开销。

但重要的是要记住,这与其说是语言问题,不如说是平台问题。例如,HTTP 不是事务性的,因此如果您在 HTTP 上实现 REST 风格的 API,您将无法获得其他企业分布式计算功能。例如,如果您使用 SOAP 或 CORBA(这很常见)实现了 REST 风格,那么是的,XA 等功能都是这些协议的一部分。

虽然这种情况正在慢慢改变,但由于缺乏意识,1980 年和 1990 年开发的许多分布式计算功能(例如分布式事务管理和安全/身份传播)并未包含在“现代”软件开发中。随着支持者在问题空间中获得更多经验,这些传统功能正在慢慢被纳入“现代”软件开发中。


0
投票

没有完整、可靠的方法来完成您所要求的事情。分布式系统(不共享单一可靠事务边界的系统)的本质是,在所有情况下都不可能提供与集中式系统相同的保证(例如 DBMS 提供的 ACID 保证)。

但是,有一些有用的解决方案模式可以帮助使问题更易于管理且不那么严重。其中包括两阶段提交、Saga 和 Paxos。每个人都有很多可用的资源。

上述模式的细节在很大程度上取决于分布式事务中涉及的服务/API 的行为,因此您不太可能找到任何类型的预构建解决方案,但您可能会找到一个框架或一些帮助程序让任务变得不那么繁重。

© www.soinside.com 2019 - 2024. All rights reserved.