【问题标题】:How to do 2 phase commit between two micro-services(Spring-boot)?如何在两个微服务(Spring-boot)之间进行 2 阶段提交?
【发布时间】:2017-10-22 05:20:58
【问题描述】:

我有两个微服务 A 和 B,它们连接到单独的数据库,从微服务 A 我需要在相同的转换中持久(保存)A 和 B 的对象如何实现这一点。

我正在使用带有 netflix-oss 的 Spring 微服务。请就完成 2 阶段提交的最佳方法提出建议。

【问题讨论】:

    标签: spring-boot microservices distributed-transactions 2phase-commit


    【解决方案1】:

    你无法在分布式环境中的微服务中实现传统的事务系统。

    您应该使用 Event Sourcing + CQRS 技术,因为它们是原子的,您将获得诸如在单片系统中实现事务或 2PC 之类的东西。

    其他可能的方式是 transaction-log-mining,我认为linked-in 正在使用这种方式,但它有自己的优缺点。例如不同数据库的二进制日志不同,同一种数据库的事件不同版本也有差异。

    我建议您在事件存储中使用 Event Sourcing + CQRS 和字符串事件,然后在微控制器之间传输多个事件后尝试基于 CAP 定理 达到 最终一致性服务 A 和 B 并在每个步骤中更新域状态

    建议您使用 ActiveMQRabbitMQKafka 等消息代理在不同的微服务和字符串之间发送事件源事件它们在 mysql 或其他系统等事件存储中。

    除了模仿交易之外,这种方式的另一个好处是您将拥有完整的审核日志

    【讨论】:

    【解决方案2】:

    这是一个架构(微服务)问题。 Spring boot 或 netflix-oss 不提供直接解决方案。您必须实施自己的解决方案。请与event driven architecture 联系。它可以给你一些想法。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 2018-11-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-12
        • 2021-10-08
        • 2018-06-01
        • 2020-10-12
        • 2011-04-19
        相关资源
        最近更新 更多