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

微服务间通信性能

赵智
2023-03-14

“在微服务之间添加的同步依赖关系越多,例如查询请求,客户端应用程序的总体响应时间就越差。

“这是真的吗?我认为在同步通信中,我们比异步通信更直接地得到反馈。例如,假设一个用户向微服务a发送http请求,微服务a又异步地向另一个微服务B发送请求,并异步地等待它的答复。如果微服务B关闭,那么用户将等待到超时才能得到响应,而在同步通信中,他将立即得到响应。

共有1个答案

申屠俊发
2023-03-14

虽然在技术上可以等待“异步”消息答复,但您不应该这样做。因此,这两种体系结构并不完全同构。“异步通信”通常是指微服务领域中的反应模型,在某些事件总线中使用触发和忘记消息。它也改变了用户体验,所以它可能不适用于所有业务。

举你的例子,如果微服务B关闭了

  • 同步情况:调用链失败,并向用户报告错误。
  • 反应消息案例:服务A立即向业务事务启动的用户发送响应,他们稍后将得到最终结果。如果B醒来,它将处理该消息,并可以通过例如打开的WebSocket(如果有的话)向客户机发送答复。

如果微服务B已启动

  • 同步情况:A将等待B处理请求,因此它将延迟响应。链中的服务越多,响应就越延迟
  • 反应消息情况:同上,A立即返回,等等…

正如您所看到的,在反应性的情况下,请求不会因为较长的处理链而延迟,相反,它会随着过程的进行而通过反应性地发送中间结果来改变用户体验。当然,您的业务必须支持这种事务性模型。

 类似资料:
  • 我实际上在研究微服务,我面临一个问题。 上下文 我正在开发两个微服务: 用户管理,基于spring,使用MySQL数据库 计划管理,基于ASP.NET与SQL Server数据库。此服务的唯一访问点是列出一些RESTFULendpoint的API,如 计费管理,基于MongoDB的node.js。 问题 > 我该怎么做才能只允许通过用户服务访问规划信息,而不耦合这两个服务?知道以后可以从其他地方访

  • 我在微服务之间的通信上遇到了麻烦。我有许多spring boot应用程序,它们之间有许多请求HTTP和AMQP(RabbitMQ)。在本地(在dev中),我使用没有Docker图像的Eureka(Netflix Oss)。

  • 我正在从事 服务项目,主要从服务间通信之间的安全角度提出疑问。在我的项目中,我们有 API 网关,它可以筛选所有传入请求是否存在安全问题,然后再将它们路由到适当的微服务。API 网关位于客户端应用程序和微服务之间。然后,它会限制微服务的公开,同时提供其他请求管理功能,例如身份验证、SSL 终止、协议转换、监视、请求路由、缓存等。 假设案例微服务1(MS1) 部门答案预计在这里。

  • 导航异步、非阻塞和反应性是一项非常有用的工作。。。给定2个非阻塞、无功、垂直。基于x/quarkus的微服务A和B,其中约束条件是A必须通过http与B通信。如果我想让服务保持被动(非阻塞): 我应该使用Vertex web客户端吗?文档说明它是一个异步客户机,但我假设它是vert。基于x的它也是非阻塞的吗?(我在这里区分异步和非阻塞) 任何帮助都会很好。谢谢

  • 我目前正在做一个Spring Boot微服务项目。我已经创建了服务,每个服务都是单独运行的。有了这个,我需要一些服务来与其他服务进行通信。我怎样才能做到这一点? 我看到了一些关于这一点的博客,它们使用Netflix、Eureka云服务器来实现这一点。有没有什么方法可以在本地环境中实现这一点,而不使用云服务器?