Spring 批处理多个数据源和 ChainedTransactionManager 风险
Spring Batch multiple datasources and ChainedTransactionManager risks
我正在研究 Spring 由两个数据源组成的批处理的可行性。 Spring 批处理元数据的 SQL 数据源和业务数据的 MongoDB 数据源(具有事务用途)。交易方面在这里提出了几个问题。
以下主题: 和相关资源为我的问题提供了一些答案。
答案提到使用Spring的JtaTransactionManager
来管理两个数据源上的分布式事务。
该技术使用 2PC 协议。如果我理解正确的话,它也是最可靠的解决方案。 https://www.infoworld.com/article/2077963/distributed-transactions-in-spring--with-and-without-xa.html?page=2
另一方面,我找到了一些关于 Spring 的 ChainedTransactionManager
的资源。该技术使用尽力而为 1PC 协议。这个解决方案不太健壮,如果我理解正确的话,如果基础设施出现问题(例如网络故障),系统可能会处于不一致的状态。
ChainedTransactionManager
的优点是更容易实现并提供更好的性能。我看到它已被弃用 https://github.com/spring-projects/spring-data-commons/issues/2232.
在 Spring 批次中使用 ChainedTransactionManager
的具体风险是什么?万一出错,我的Spring批量元数据和Mongo中的业务数据是否不一致?
我想还有重试或块跳过策略需要考虑的因素?
非常感谢您的帮助。
In case of an error, can I have inconsistencies between the Spring batch metadata and the business data in Mongo?
是的,这是您应该注意的风险。
避免这种情况的常用技术是禁用状态管理并使用 process indicator pattern. You can find an example here。
我正在研究 Spring 由两个数据源组成的批处理的可行性。 Spring 批处理元数据的 SQL 数据源和业务数据的 MongoDB 数据源(具有事务用途)。交易方面在这里提出了几个问题。
以下主题:JtaTransactionManager
来管理两个数据源上的分布式事务。
该技术使用 2PC 协议。如果我理解正确的话,它也是最可靠的解决方案。 https://www.infoworld.com/article/2077963/distributed-transactions-in-spring--with-and-without-xa.html?page=2
另一方面,我找到了一些关于 Spring 的 ChainedTransactionManager
的资源。该技术使用尽力而为 1PC 协议。这个解决方案不太健壮,如果我理解正确的话,如果基础设施出现问题(例如网络故障),系统可能会处于不一致的状态。
ChainedTransactionManager
的优点是更容易实现并提供更好的性能。我看到它已被弃用 https://github.com/spring-projects/spring-data-commons/issues/2232.
在 Spring 批次中使用 ChainedTransactionManager
的具体风险是什么?万一出错,我的Spring批量元数据和Mongo中的业务数据是否不一致?
我想还有重试或块跳过策略需要考虑的因素?
非常感谢您的帮助。
In case of an error, can I have inconsistencies between the Spring batch metadata and the business data in Mongo?
是的,这是您应该注意的风险。
避免这种情况的常用技术是禁用状态管理并使用 process indicator pattern. You can find an example here。