我们正在使用微服务重写遗留应用程序。每个微服务都有自己的数据库。有一些API调用需要调用另一个微服务并将数据持久化到两个数据库中。在这种情况下,如何有效地实现分布式事务管理?
因为我们没有完全迁移到新的微服务环境,所以我们仍然将数据写回到旧的monolith。为此,当微服务端点被调用时,我们从微服务api调用monolith服务来写回相同的数据。在这种情况下如何处理相同的问题。
先谢了。
我们正在使用微服务重写遗留应用程序。每个微服务都有自己的数据库。有一些API调用需要调用另一个微服务并将数据持久化到两个数据库中。在这种情况下,如何有效地实现分布式事务管理?
因为我们没有完全迁移到新的微服务环境,所以我们仍然将数据写回到旧的monolith。为此,当微服务端点被调用时,我们从微服务api调用monolith服务来写回相同的数据。在这种情况下如何处理相同的问题。
先谢了。
3条答案
按热度按时间wko9yo5t1#
有不同的分布式事务框架,通常作为JBoss和WebLogic等重型应用服务器的一部分包含和维护。
此类服务通常使用的标准是雅加达交易(JTA;以前称为Java事务API)。
Tomcat和Spring都不支持开箱即用的分布式事务,你可以使用第三方框架比如Atomikos来添加这个功能(我刚在谷歌上搜索过,从来没用过)。
但是请记住,JTA的微服务不再是“微”了:-)
以下是对可用技术和可能的解决方法的简要概述:
https://www.baeldung.com/transactions-across-microservices
h9a6wy2h2#
如果您可以负担得起稍后写入遗留系统(即允许在更新微服务和遗留系统之间存在一些延迟),则可以使用发件箱模式。
从本质上讲,这意味着您以事务方式向微服务数据库写入通常写入的表和要应用的更改的附加“发件箱”表,然后有一个单独的进程读取该表并更新遗留系统。
您还可以在微服务中使用的数据库上使用变更数据捕获机制来实现类似的功能。
ilmyapht3#
查看“为什么2阶段提交不适合微服务架构?"中的答案:https://stackoverflow.com/a/55258458/3794744