docker swarm

时间:2017-11-18 19:36:38

标签: docker load-balancing docker-swarm

我已将最高级别的架构放在一起

  • 五节点泊坞群集
  • 说我的dockerized微服务的5个实例在每个群集节点上运行一个副本
  • 该服务通过REST端点提供功能
  • 一个这样的功能是下载并且它们完美地工作,我在Scala / Play framerwork中编写了一些代码,将服务停靠并部署它。
  • 我也知道,因为我使用swarm,它会根据我的请求在内部执行LB.

我对WebSocket有一些疑问,以及负载均衡器在下载过程中如何破坏事物。

  1. 我开始下载5GB文件,它可以正常运行。我正在使用HTTP流或chunked我想这没关系。现在我的问题是,一旦我的REST端点被点击,TCP连接仍然打开,并且由于它在服务器关闭连接之前一直打开,因此群集负载平衡不会干扰?简而言之,每次客户端请求HTTP调用时,swarm会对其进行负载平衡,但是一旦建立了TCP套接字(如特定下载示例),请求由一个节点提供服务,因为在下载过程中未重新建立连接?
  2. 如果一个客户端打开一个Web套接字,它会点击服务运行的swarm节点之一和websocket连接,因为它是打开的,同一个服务实例会推送通知吗?
  3. 如果由于某种原因,websocket死了,客户端可能会建立一个新连接,但请求可能最终会出现在其他一些服务实例上,并且会一直保持这种状态,直到再次建立新连接为止?
  4. 在我的理解中,3分是否正确?是否有一些阅读材料/博客我可以找到更多关于详细说明的内容?

1 个答案:

答案 0 :(得分:0)

可能使用nginx,如代理LB,ip_hash模式

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

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