识别 docker 群中的不同副本



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

我面临的问题是,为了创建新的副本,将服务(service-name-4(复制并粘贴到我的docker组合上不是很方便。如果我能在需要时使用以下方法扩展服务会更好:docker service scale service-name=4.我想知道的是,是否有一种方法可以在 docker 群中区分单个副本。

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

TL;博士

如果客户端数远小于副本数,请考虑使用旁路服务器。否则,将作业留给 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 服务上留下不均匀分布的论点,这在很大程度上取决于负载平衡策略。

最新更新