嘿,一开始我不确定这是否可能。在我的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的同一个副本,那么解决这个问题将是理想的。是否有可能以这种方式改变负载平衡?
我自己解决了这个问题,通过使用插槽id分别为每个副本设置主机名。
services:
A:
hostname: "A-{{.Task.Slot}}"
deploy:
replicas: 2
B:
environment:
- SERVICEA=http://A-{{.Task.Slot}}/
deploy:
replicas: 2