【问题标题】:Spring Boot Microservice With Configurable Communication Method具有可配置通信方式的 Spring Boot 微服务
【发布时间】:2021-03-12 01:06:07
【问题描述】:

考虑这种情况:我有 N>2 个软件组件(微服务),它们可以通过两种不同的通信协议进行通信,具体取决于它们的部署方式。也就是说,我有两种部署场景:

  1. 组件将部署在同一台机器上。在这种情况下,如果我考虑性能,我不知道使用 HTTP 来通信这两个组件是否有意义。我知道有更有效的方法可以使用java在同一台机器上通信两个进程,例如套接字、RMI、RPC ...

  2. 组件将部署在 N 台不同的机器上。在这种情况下,在我看来,使用 HTTP 与这些组件通信是有意义的。

简而言之,我想做的是能够根据我执行部署的方式来配置通信协议:在单台机器上,例如使用RMI,但是当我在两台机器上部署时,使用HTTP .

有谁知道我如何使用 Spring Boot 做到这一点?

非常感谢!

【问题讨论】:

  • 你的两个组件是否可以使用不同的协议相互通信?如果你已经实现了你只需要通过例如使用环境变量来告诉组件部署模式
  • @TongChen 是的。问题是组件内的开发如何受到影响,当您有可能使用两种通信方式时,spring Boot 是如何完成的
  • 弹簧配置文件可能会有所帮助。

标签: java spring spring-boot microservices


【解决方案1】:

我的理解是…… 如果组件(生产者和消费者)部署在同一主机上,则使用优化的协议,如果在不同的主机上,则使用 HTTP(s) 首先,必须有一个认真的司机沿着这条路线走。我认为这里的驱动程序是性能。您希望在本地部署中提供更快的性能,而在分布式部署中提供相对较低的速度。顺便说一句,鉴于我们处于分布式部署世界(或至少我们的目标),HTTP 将会继续存在。不鼓励使用自定义协议。

无论如何...我会说您的生产者应用程序应该处于自我修复/发现模式。在启动时(或定期),它可以检查“优化”端点的健康状况并确定优化接收器是否在附近。接收器需要站在负载平衡器后面。如果接收器未启动,则转到 HTTP(S) 并在运行时相应地设置此实例。

对于消费者,它需要保持两个门(HTTP 和优化)打开。它应该准备好处理来自任一通道的请求。

在 SpringBoot 中,您可以实现 healthCheck 并根据优化端点的健康状况打开/关闭发射器。如果两个端点都不健康,那么生产者肯定不会发出任何东西。除此之外,其余的只是正常的依赖注入。

【讨论】:

  • 感谢您的回复。我更新了问题,因为场景不仅是客户端服务器,任何组件都可以是客户端或服务器
【解决方案2】:

RMI 或 HTTP 等协议的基本构建块是套接字通信。如果您不寻求 HTTP 或 RMI 的舒适性,并且优先考虑性能,那么纯套接字通信是您的选择。

这会引发其他问题,例如部署困难。您应该提前知道两个节点的 IP 地址。

另一种选择是使用unix -domain socket 进行服务器内部通信。为此,您必须依赖JunixSocket

如果您想走另一条路线,请检查所有inter process communication 选项。

编辑

正如您在评论中所说的“这不再是两个组件的问题,而是多个组件的问题”。在这种情况下,每个组件都应该是一个微服务,并且应该能够相互交互。如果选择最可扩展的协议是 REST/RPC,那么两者都在底层使用 HTTP 协议。 REST 是使用 CRUD 操作针对数据源开发 API 的理想解决方案。 RPC 更倾向于面向动作的 API。您可以找到更多详细信息来识别 REST 和 RPC here 之间的区别。

【讨论】:

  • 非常感谢您的回复和您提供的信息。我已经更新了这个问题,因为场景不仅是客户端服务器,任何组件都可以是客户端或服务器。另一个问题是 HTTP 与同一台机器上更专业的协议的成本效益是否有显着差异
  • 理想情况下,您不应该修改您的问题,这将使我已经写的答案无效。最佳做法是通过问题底部的附加详细信息更新您的问题,并使用子标题EDIT。我再次阅读了您的问题,但此时我无法区分您的新编辑。
  • 非常感谢您的建议。它不再是两个组成部分的问题,而是多个组成部分的问题。根据每个组件处理的业务逻辑,它们中的任何一个都可以用作客户端或服务器。例如,一个只专注于身份验证,另一个专注于安排访问等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-17
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-09
  • 2015-10-05
  • 2017-10-04
相关资源
最近更新 更多