【问题标题】:Identify different replicas in docker swarm识别 docker swarm 中的不同副本
【发布时间】:2020-02-09 23:17:31
【问题描述】:

我正在使用 docker swarm 部署多个服务,它们之间通过 gRPC 进行通信。每个服务都有多个副本,我使用客户端负载平衡来平等地与它们对话。我将服务域名作为环境变量传递,如下所示:service-name-1,service-name-2,service-name-3,因为如果我依赖 dockers 默认负载均衡器,我只会连接到一个副本,因为通道保持打开状态。

我面临的问题是在我的 docker compose 上复制和粘贴服务 (service-name-4) 以创建新副本不是很方便。如果我可以在需要时扩展服务会更好:docker service scale service-name=4。我想知道是否有一种方法可以区分 docker swarm 中的各个副本。

我知道用于负载平衡 gRPC 建议的“后备服务器”。我只是想知道这个问题是否有任何直接的解决方案。

【问题讨论】:

    标签: docker grpc docker-swarm high-availability


    【解决方案1】:

    TL;DR

    如果客户端数量远小于副本数量,请考虑使用后备服务器。否则,将作业留给 docker 并像上面指定的那样增加副本数是没有问题的。

    详细说明

    我最终为我的特定用例使用了后备服务器。但是,我在上面的帖子中描述的毕竟不是什么大问题。让我解释一下:

    假设有服务 A,它通过 gRPC 与服务 B 通信。仅当 A 的客户端数量小于可用 B 副本的数量时,才会存在此问题。例如:A 的 2 个副本和 B 的 4 个副本。在这种情况下,A1 将连接(并保持打开的连接)到 B1,A2 将连接到 B2,使 B3 和 B4 处于空闲状态。

    另一方面,如果客户端 A 的数量大于或等于可用副本 B 的数量,则服务将根据负载均衡策略有效地分配负载。例如 4 个 A 副本和 2 个 B 副本。在这种情况下,B1 将与 A1 和 A2 建立连接;剩下的交给 B2。

    可能存在关于连接断开导致 B 服务分布不均的争论,但这在很大程度上取决于负载平衡策略。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-26
      • 1970-01-01
      • 2017-04-02
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多