当前位置: 首页 > 知识库问答 >
问题:

微服务交易

融烨华
2023-03-14

我读过一些关于微服务架构的文章,但没有人会讨论事务。尽管他们说这很难做到。也许有人能描述一下如何处理这个问题?

但不是从领域方面,而是从技术方面。假设我们有一个业务案例,我们需要调用两个不同的服务,它们都对数据库进行了一些更改。但是如果第二个发生错误,如何回滚呢?

谁知道这个问题的一些库或设计模式?

共有3个答案

况景龙
2023-03-14

阅读这个问题后,我想到的第一件原始的事情是创建每个添加api,其中包含一个删除api,比如说,一个额外的布尔标志delF。

布尔标志delFlag;

对于POST,将为0。对于DELETE,将为1。

现在您维护一个事务管理器,它是所有微服务的超级服务。在这个服务中,维护所有服务和API的调用队列。当一个服务失败时,获取调用api并调用该服务的delete方法,撤销你所做的一切。

PS-只是一个粗略的想法。如果你认为错了,请纠正我。

叶坚
2023-03-14

最好的设计是拥有独立的服务:每个服务只在自己的事务中工作,而您的工作流预计单个服务会出现故障。

如果您真的只需要在调用所有服务时没有错误的情况下提交,那么您应该创建一个更高级别的服务,在外部事务中执行这些调用。

梅安平
2023-03-14

我可能不是这方面的终极专家,但我相信你正在走向分布式事务。为了让它们运行,所有应用程序服务组件都需要一个公共的共享事务id,您必须确保每个组件都被告知事务的状态。它是异步的,因此您需要大量的编程技能。

以下是提到或讨论的分布式事务:

https://en.wikipedia.org/wiki/Distributed_transaction

http://contino.co.uk/microservices-not-a-free-lunch/

http://martinfowler.com/articles/microservices.html

人们似乎会尽量避免,因为这很难。也许这就是你找不到的原因。

希望这有助于向前迈出一步:-)

 类似资料:
  • 基本 Nest 微服务是一种使用与HTTP不同的传输层的应用程序。 安装 首先,我们需要安装所需的软件包: $ npm i --save @nestjs/microservices 概述 通常,Nest支持一系列内置的传输器。它们基于 请求-响应 范式,整个通信逻辑隐藏在抽象层之后。多亏了这一点,您可以轻松地在传输器之间切换,而无需更改任何代码行。我们不支持具有基于日志的持久性的流平台,例如 Ka

  • 我正在进行一个Personal项目,将一个整体的web应用程序转换为微服务(每个服务都有自己的数据库)。 第二个想法是使用RabbitMQ这样的消息代理。“Register Service”仍然在自己的数据库中插入有趣的东西,并以用户信息作为数据在队列中发布消息。“用户服务”使用此消息并将数据持久化到其“用户”数据库中。通过使用这个概念,这两个服务是完全隔离的,这可能是一个很好的想法。 但是,发送

  • 我是测微计新手。有人能告诉我如何在spring boot中集中管理微服务指标吗? 在哪里可以获得influxdb中所有注册的服务信息、矩阵和存储的度量?

  • 我有一个简单的设置,有一个Eureka服务注册服务器、一个用于公共API的服务和一个使用RESTTemplate从公共API调用的服务。Eureka告诉我服务已成功注册,但当我调用服务时 我得到以下异常 谢谢

  • 我读了一些文章,看了一些视频,但在为这些微服务提供服务方面,没有找到具体的建议。我的理解是,他们应该使用自己的应用程序服务器。 我的问题是它们应该部署在不同的服务器上,还是没关系。 当它们在同一台服务器(计算机)上提供服务时,不会有端口冲突吗?

  • 在单体架构时,因为服务不会经常和动态迁移,所有服务地址可以直接在配置文件中配置,所以也不会有服务发现的问题。但是对于微服务来说,应用的拆分,服务之间的解耦,和服务动态扩展带来的服务迁移,服务发现就成了微服务中的一个关键问题。 服务发现分为客户端服务发现和服务端服务发现两种,架构如下图所示。 这两种架构都各有利弊,我们拿客户端服务发现软件Eureka和服务端服务发现架构Kubernetes/SkyD