【发布时间】:2017-11-18 19:36:37
【问题描述】:
我整理了一个架构,下面最好描述它的高层次
- 五节点 docker swarm 集群
- 假设我的 dockerized 微服务的 5 个实例在每个 swarm 节点上运行一个副本
- 服务通过 REST 端点提供功能
- 其中一个功能是下载,它们运行良好,我在 Scala/Play 框架中编写了一些代码,对服务进行了 docker 化并部署了它。
- 我也知道,由于我使用 swarm ,它在内部为我执行每个请求的 LB。
我有一些关于 WebSocket 的问题,以及负载均衡器如何在下载过程中不破坏内容。
- 我开始下载 5GB 文件,它可以工作。我正在使用 HTTP 流或分块,我想这没关系。现在我的问题是,一旦我的 REST 下载端点被击中,TCP 连接保持打开状态,并且由于它是打开的,直到服务器关闭连接,因此群负载平衡不会干扰?简而言之,每次客户端请求 HTTP 调用时,swarm 都会对其进行负载平衡,但是一旦建立了 TCP 套接字(如特定下载示例的情况),请求将由一个节点提供服务,因为在下载过程中连接不会重新建立?
- 如果客户端打开一个 web socket,它会命中运行服务的 swarm 节点之一,并且 websocket 连接是打开的,同一个服务实例会推送通知吗?
- 如果由于某种原因 websocket 死掉了,客户端可能会建立一个新的连接,但请求可能会在某个其他服务实例上结束,并且会一直保持这种状态,直到再次建立新的连接?
以上3点在我的理解中是否正确?是否有一些阅读材料/博客我可以找到更多详细说明这一点?
【问题讨论】:
标签: docker load-balancing docker-swarm