【问题标题】:Distributed transaction using web services on different platforms在不同平台上使用 Web 服务的分布式事务
【发布时间】:2020-03-26 12:42:00
【问题描述】:

是否可以使用以不同技术实现的 Web 服务来实现事务性?

例如:假设我们要为 2 个不同的组织提供综合服务,每个组织已经使用不同的技术实施了不同的系统,并且位于不同的国家。 组织 A 有一个 Java 服务器公开 Rest 服务,允许消费者在表中插入数据,然后组织 B 有一个 .Net 服务器公开 Rest 服务,也允许消费者在表中插入数据。 然后我想创建一个新的服务器来将这两个服务集成为一个,允许消费者插入到两个组织的数据库中。因此,我必须从这个新服务器以事务方式调用这 2 个休息服务(这意味着如果出现故障,两个组织都将插入,或者没有一个将插入,它将回滚)。

即使服务器 1 和服务器 2 使用不同的技术实现,也可以实现吗?如果有 n 个服务器都采用不同的技术实现并且都暴露了 Rest 服务会怎样?

【问题讨论】:

    标签: web-services architecture integration distributed-transactions multiplatform


    【解决方案1】:

    在微服务架构的情况下,不可能有真正的交易。您必须实施补偿,以在发生故障时回滚更改。请参阅Saga pattern 了解其中一种方法。

    看看Cadence Workflow,它使实现 Sagas 变得微不足道。 Here is 一个例子。

    【讨论】:

    • 嘿Maxim,感谢您的回复,我的场景确实是微服务架构,我没有注意到...现在我的谷歌搜索更容易收集这方面的信息。我一直在阅读您关于使用 Saga 模式的建议,这是一种很好的方法,但是我不确定您所说的“在微服务架构中不可能进行真正的事务”是什么意思。根据一些文章,2PC 协议也可以在微服务上运行,只是由于性能问题不推荐使用,但可以实现。
    • 确实可以实现分布式事务。但在那之后我不会将架构称为“微服务架构”:)。 queue.acm.org/detail.cfm?id=3025012
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2017-09-29
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多