负载平衡器和HTTP下载docker群上的stream

我已经把高层次的架构放在一起,下面会有详细的介绍

  • 五节点docker群集群
  • 有5个我的dockerized微服务实例在每个swarm节点上运行一个副本
  • 该服务通过REST端点提供function
  • 一个这样的function是下载,他们完美的工作,我写了一些代码在Scala / Play framerwork,docker化服务,并部署它。
  • 我也知道,因为我使用swarm,它在内部为每个请求做LB。

我在WebSocket上有一些问题,以及在下载过程中负载平衡器不会毁掉东西。

  1. 我开始一个5GB的文件下载,它的工作原理。 我正在使用HTTPstream或分块我想这没有关系。 现在我的问题是,一旦我的REST下载终点被击中,TCP连接保持打开状态,并且由于它在服务器closures连接之前一直打开,这是因为群集负载平衡不会干扰? 简而言之,每当客户端请求HTTP调用时,群集负载均衡,但是一旦build立了TCP套接字,就像在特定下载示例的情况下一样,请求由一个节点服务,因为在下载过程中连接不被重新build立?
  2. 如果一个客户端打开一个Web套接字,它将击中服务正在运行的群集中的一个节点,并打开Websocket连接,同一个服务实例将推送通知?
  3. 如果由于某种原因WebSocket死亡,客户端可能会build立一个新的连接,但是请求可能以其他服务实例结束,并且将保持这种状态直到重新build立新的连接。

我的理解是否超过3分? 是否有一些阅读材料/博客我可以find更多详细说明这一点?

也许使用像proxy LB,ip_hash模式的nginx

指定组应该使用负载均衡方法,其中根据客户端IP地址在服务器之间分配请求。 客户端IPv4地址的前三个八位字节或整个IPv6地址用作散列密钥。 该方法确保来自同一客户端的请求将始终传递到同一台服务器,除非该服务器不可用。 在后一种情况下,客户端请求将被传递给另一台服务器。 最有可能的是,它永远是同一台服务器。

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#ip_hash