2015-11-12 35 views
1

负载均衡网络插座似乎是一个问题使用群集模块(PM2 &永远)时:
https://github.com/Unitech/pm2/issues/81
https://stackoverflow.com/a/28075728/275491确实N |固体运行时的负载平衡的WebSockets与粘性会话?

旅客索赔来解决这个问题: https://www.phusionpassenger.com/library/walkthroughs/basics/nodejs/fundamental_concepts.html#vs-cluster-module

这个环节讨论“粘负载均衡“:与网络套件有关的集群模块: http://socket.io/docs/using-multiple-nodes/

机会是,其中一些客户可能有这样的WebSocket,我们可以马上写一个活跃的双向沟通​​渠道,但其中一些可能会使用长轮询。

如果他们使用长轮询,他们可能会或可能不会派我们可以写入请求。他们可能在这些请求之间“处于中间”。在这些情况下,这意味着我们必须在这个过程中缓冲消息。为了让客户在发送他的请求时成功声明这些消息,最简单的方法是让他连接到同一个进程。

是否N | Solid也解决了与集群模块相关的负载平衡具有进程相似性的websockets的问题?

回答

1

由于您可以更灵活地存储会话信息(在redis上可以),并且可以非常容易地按需扩展更多进程或更多计算机,因此websockets负载均衡的任务可以通过nginx更好地完成。

在这方面,N |固表现得比Node.js的

正如你提到的一样,“粘性会话”是处理此问题的方法。在Redis实例或其他数据存储上存储和管理会话信息,您的进程可以同步,您可以将正确的会话路由到正确的进程。

出于性能方面的集群模块不会在进程之间共享内存,因此,最好的方法是使用粘性会话,让平衡器使用会话信息决定路线。粘滞会话还可以让任何进程从会话存储中获取相同的信息。

+0

我更新了我的问题就在眼前更相关的问题。这个页面描述得很好:http://socket.io/docs/using-multiple-nodes/本质上,nginx可以返回到正确的ip:port,但将cluser模块或在这种情况下N | Solid Runtime,路由到正确的流程实例? –

+0

最好的办法有设计的应用程序要多实例,因此多个实例可以从会话存储相同的信息和行为的过程中同样无动于衷。 –