Docker swarm 确保一个副本总是访问其他服务的同一个副本
Docker swarm make sure that one replica always access the same replica of other service
嘿,起初我不确定这是否可能。我的 docker 集群中有两种不同的服务。每个服务被复制 n 次。服务A通过dns访问服务B。下面是我的 docker 撰写文件的简化版本:
version: "3.7"
services:
A:
image: <dockerimage_A>
deploy:
replicas: 5
B:
image: <dockerimage_B>
deploy:
replicas: 5
服务 A 的副本通过来自 docker 的 DNS 条目访问服务 B 的副本并向 B 发送任务。B 任务的运行时间变化且处于阻塞状态。从 A 到 B 的连接也被阻塞。由于循环负载平衡,如果 A 和 B 的一个副本组合很快,那么快速的 A 连接到另一个 B 仍然被阻塞,而另一个 B 没有任何事情可做。
如果 A 的一个副本总是路由到 B 的同一个副本,那么解决这个问题将是理想的。是否有可能以这种方式更改负载平衡?
我通过以下 hacky 解决方案自行解决了这个问题,方法是使用插槽 ID 分别为每个副本设置主机名。
services:
A:
hostname: "A-{{.Task.Slot}}"
deploy:
replicas: 2
B:
environment:
- SERVICEA=http://A-{{.Task.Slot}}/
deploy:
replicas: 2
嘿,起初我不确定这是否可能。我的 docker 集群中有两种不同的服务。每个服务被复制 n 次。服务A通过dns访问服务B。下面是我的 docker 撰写文件的简化版本:
version: "3.7"
services:
A:
image: <dockerimage_A>
deploy:
replicas: 5
B:
image: <dockerimage_B>
deploy:
replicas: 5
服务 A 的副本通过来自 docker 的 DNS 条目访问服务 B 的副本并向 B 发送任务。B 任务的运行时间变化且处于阻塞状态。从 A 到 B 的连接也被阻塞。由于循环负载平衡,如果 A 和 B 的一个副本组合很快,那么快速的 A 连接到另一个 B 仍然被阻塞,而另一个 B 没有任何事情可做。
如果 A 的一个副本总是路由到 B 的同一个副本,那么解决这个问题将是理想的。是否有可能以这种方式更改负载平衡?
我通过以下 hacky 解决方案自行解决了这个问题,方法是使用插槽 ID 分别为每个副本设置主机名。
services:
A:
hostname: "A-{{.Task.Slot}}"
deploy:
replicas: 2
B:
environment:
- SERVICEA=http://A-{{.Task.Slot}}/
deploy:
replicas: 2