我有一个 TCP 服务作为 docker 容器在 Ubuntu VM 上运行。
由于设备负载,我不得不从单个 docker 容器转移到具有 3 个副本的 docker swarm(目前)。
我有一个 Django 服务,它访问此 TCP 服务,通过发送命令(C2D 命令)从连接到该服务的客户端检索数据。使用单个 docker 容器它工作得很好,但现在当我使用 docker 副本时,Django 服务随机命中每个副本,大多数时候我在命中服务 3 次后得到正确的响应(我猜是因为有 3 个副本,所以我必须打3次)
我是否需要更改 docker compose 文件中的某些内容,以允许副本相互交互并返回正确的响应?
我想通过一次点击检索正确的响应。
这是我尝试解决此问题的方法:
我尝试过使用 consul 进行服务发现,但是 docker swarm 没有注册该服务。尽管一个容器在 consul 下运行良好。
如果您将负载分散到 3 个容器,那么您将需要查询 3 个容器的状态。
您的 Django 服务可以查询“任务”以检索容器 IP 列表,然后查询每个 IP 以获取其持有的任何客户端数据。