识别 docker 群中的不同副本
Identify different replicas in docker swarm
我正在使用 docker swarm 部署多个服务,这些服务通过 gRPC 在它们之间进行通信。每个服务都有多个副本,我正在使用客户端负载平衡来平等地与他们交谈。我将服务域名作为环境变量传递,如下所示:service-name-1,service-name-2,service-name-3
因为如果我依赖 docker 的默认负载均衡器,我只会连接到一个副本,因为通道保持打开状态。
我面临的问题是在我的 docker compose 上复制和粘贴服务 (service-name-4
) 以创建新副本不是很方便。如果我可以在需要时通过以下方式扩展服务会更好:docker service scale service-name=4
。我想知道的是,是否有一种方法可以区分 docker 群中的各个副本。
我知道关于 "look-aside server" 负载平衡 gRPC 的建议。我只想知道这个问题是否有直接的解决方案。
TL;DR
如果客户端数量远小于副本数量,请考虑使用 look-aside 服务器。否则,将工作留给 docker 没有问题,只需像上面指定的那样增加副本数。
详细说明
我最终为我的特定用例使用了 look-aside 服务器。然而,我在上面 post 中描述的,毕竟不是什么大问题。让我解释一下:
假设有服务 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 服务分布不均的争论,但是,这在很大程度上取决于负载平衡策略。
我正在使用 docker swarm 部署多个服务,这些服务通过 gRPC 在它们之间进行通信。每个服务都有多个副本,我正在使用客户端负载平衡来平等地与他们交谈。我将服务域名作为环境变量传递,如下所示:service-name-1,service-name-2,service-name-3
因为如果我依赖 docker 的默认负载均衡器,我只会连接到一个副本,因为通道保持打开状态。
我面临的问题是在我的 docker compose 上复制和粘贴服务 (service-name-4
) 以创建新副本不是很方便。如果我可以在需要时通过以下方式扩展服务会更好:docker service scale service-name=4
。我想知道的是,是否有一种方法可以区分 docker 群中的各个副本。
我知道关于 "look-aside server" 负载平衡 gRPC 的建议。我只想知道这个问题是否有直接的解决方案。
TL;DR
如果客户端数量远小于副本数量,请考虑使用 look-aside 服务器。否则,将工作留给 docker 没有问题,只需像上面指定的那样增加副本数。
详细说明
我最终为我的特定用例使用了 look-aside 服务器。然而,我在上面 post 中描述的,毕竟不是什么大问题。让我解释一下:
假设有服务 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 服务分布不均的争论,但是,这在很大程度上取决于负载平衡策略。