2015-11-12 61 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

最好的辦法有設計的應用程序要多實例,因此多個實例可以從會話存儲相同的信息和行爲的過程中同樣無動於衷。 –