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

通过API网关的内部通信微服务

吴哲
2023-03-14

在微服务体系结构中,有一种称为API网关的常见模式。

我知道所有来自API网关外部的通信都被用作单个入口点。

但是我也希望从微服务到微服务的内部通信是通过API网关进行的?我的意思是,这比建立点对点连接要容易得多。

那么,是什么反对将API网关也用于整个内部通信呢?

共有2个答案

松桐
2023-03-14

第一种方法(用于内部和外部调用的API网关)有两个问题需要考虑:

1) 网关服务上的负载将变得更高。如果内部服务平均对任何其他内部服务进行一次调用,则网关服务的负载将加倍。这可能会导致额外的延迟,不仅仅是因为额外的跃点,而是因为每个请求都必须通过网关服务上的额外负载进行协商。这将迫使您增加网关硬件(水平或垂直),而不会带来任何实际好处。

2)一旦负载上升并触及网关服务实例的峰值容量,这些实例可能会开始耗尽其资源,特别是处理线程或正在进行调用的线程。一般来说,这种情况可以通过卸载或限制一些新请求来处理。这可能意味着我们只能服务一定比例的请求,直到负载下降。然而,在我们的案例中,不仅新请求受到影响,而且所有正在等待网关服务资源释放用于内部调用的运行中的旧请求也将永远被阻止,直到它们超时,因为这些请求正在等待它们自己完成。我们最终得到了一个死锁的系统,在负载下降之前,它根本不会服务任何请求。如果没有正确地实现超时,它甚至可能永久陷入僵局,并且需要回收实例。

无论如何,这些都是我们在设计微服务时需要解决的一些挑战,但在这种情况下,我们可以避免这些问题。

严兴旺
2023-03-14

我试过三种口味

  1. 通过API网关的所有通信它使服务发现变得容易,所有通信都可以在一个点上被跟踪,但是它增加了网关后面的服务的延迟(不是很多,而是一个额外的跳跃)。您还可以取消身份验证,这意味着所有服务,即使是网关后面的服务,都需要获得正确的身份验证(这可能对某些应用程序不是缺点,但对其他应用程序来说,这很可能是缺点)
  2. 通过网关的外部服务它可以帮助您在网关上剥离身份验证。您可以强制对传入请求进行更严格的检查,您的服务可以直接相互交谈(但这意味着他们需要如何发现服务,我们使用基于route53的dns,以便他们命中的endpoint保持不变)。服务相互信任,这些通信不需要授权。
  3. 外部/内部网关我们也有一个场景,我们必须得到两个api网关,一个原因是需要对两个网关进行不同类型的检查,以及每个网关必须承受的不同负载
 类似资料:
  • 我正在使用microservies Architect学习API。下面是关于设置的小描述 我有两个微服务应用程序和API网关 包括API网关在内的所有应用程序都是NodeJS-Express app。 Auth Logic-JWT,在API网关上处理 使用http-proxy将每个传入的API网关请求传递给每个微服务应用程序。 还将用户信息作为代理头传递。 客户端请求流: 客户端使用JWT令牌从m

  • 我正在设置一个带有API网关(KONG)和微服务(Spring Boot应用程序)的环境,但我对它们之间的SSL通信有很多疑问/担忧。 我应该将SSL设置放在API网关还是微服务上? 目前,我的微服务应用程序有自己的SSL证书,它通过8443端口在容器中运行。 但是现在实现API网关,我不确定是否必须将其从我的微服务中删除并在API网关中设置,或者将其添加到两者中。 我希望我的微服务和API网关之

  • 我跟踪了服务,当它们部署在localhost中(通过eclipse)时,它们工作得很好。但在部署为单独的docker容器时无法调用rest服务。 我是一个新的docker并且参加了教程来了解这是如何工作的。 祖尔阿皮门路 用户服务 尤里卡注册服务信息 注意:“DE4396A354EA”是“用户服务”的容器id 请提供关于如何解决此问题的指导,并提供任何链接,我可以在这些链接中获得关于在docker

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

  • 我读了几篇文章,其中告诉我们关于微服务之间的通信,我选择了微服务之间基于事件的通信模式,但是现在我想知道客户端应该如何通信,如果它向API网关发送请求,应该等待响应(这可能需要时间,因为内部microsrvices之间的通信基于事件的性质),或者它应该说“处理”并进行轮询以检查请求是否完成? 客户的标准做法是什么

  • 首先,我对AWS很陌生。以下是我想要达到的目标: null 因此,现在我有了一个专用子网,其endpoint允许HTTP(S)流量。该endpoint具有某些(专用)DNS名称,(可能)也具有专用IP(找不到) 现在我想要添加一个API网关来前面的一些AWS lambda。我创建所述API,并将其作为endpoint类型->Private 下面是:正式文档将API网关“链接”到VPCendpoin