gpt4 book ai didi

docker - 具有随机端口的微服务和服务发现

转载 作者:行者123 更新时间:2023-12-02 18:42:02 25 4
gpt4 key购买 nike

我的问题与分布在多个主机之间的服务的微服务和服务发现有关。

设置如下:

  • 2 台 docker 主机(主机 A 和主机 B)
  • Consul 服务器(服务发现)

假设我有 2 个服务:

  • 服务A
  • 服务B

服务 B 部署了 10 次(使用随机端口):5 次在主机 A 上,5 次在主机 B 上。

例如,当服务 A 与服务 B 通信时,它会向 serviceB.example.com(硬编码)发送请求。

为了获得 IP 和端口,服务 A 应该向 Consul 服务器查询 SRV 记录。

它将获得 10 个 ip:port 对,客户端应为此应用一些负载平衡逻辑。

  • 有没有更简单的方法来处理这个问题,而无需我为此开发客户端解析器 (+LB) 库?
  • 有没有类似的东西已经在某处实现了?
  • 我做错了吗?

最佳答案

有几个选项:

  • 按照您的建议在客户端上进行负载平衡,为此您需要找到一个现成的服务发现库,该库可与 SRV 记录一起使用并处理负载平衡和断路。另一个答案建议 Netflix' ribbon我没有使用过,只有在使用 JVM 时才会感兴趣。请注意,如果您正在构建自己的服务,您可能会发现仅使用 Consul 的 HTTP API 来发现服务比使用 DNS SRV 记录更简单。这样您也可以“观察”更改,而不是缓存列表并让它变得陈旧。
  • 如果您不想重新发明那个特定的轮子,另一个流行且简单的选择是使用 HAProxy 实例作为负载平衡器。您可以通过 consul-template 将其与 consul 集成它将自动监视您的服务的新/失败实例并更新 LB 配置。然后,HAProxy 提供了强大的负载平衡和健康检查,并提供了很多选项(http/tcp、不同的平衡算法等)。一种可能的设置是在每个 docker 主机上有一个本地 HAProxy 实例,并为每个逻辑服务静态分配一个固定端口(可以将其存储在 Consul KV 中),因此您连接到 localhost:1234 以获取服务 A示例和服务 B 的 localhost:2345。本地实例意味着您无需为到负载均衡器实例然后到实际服务实例的额外往返支付费用,但这对您来说可能不是问题。

关于docker - 具有随机端口的微服务和服务发现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34841789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com