Supose我需要實現一個Web應用程序,該應用程序將具有大量的併發用戶。我決定使用node.js,因爲它擴展得非常好,它有很好的性能,開源社區等等。然後,爲了避免瓶頸,因爲我可以在同一個事件循環中擁有超過一百萬用戶,我決定使用一個簇進程利用多核CPU。此外,我有3臺機器(main + 2),因爲我需要用Cassandra處理大數據。太棒了,這意味着我有3 * n node.js進程,其中n是cpu的核心數(機器是相同的)。如何設計分佈式node.js web服務器
好了,然後我開始研究,我有以下模式結束:
- Nginx的偵聽端口80和僅用於提供靜態內容(IMG,CSS,JS等)。
將動態流量轉發到haproxy。我知道如何配置nginx,但我仍然需要看看haproxy,所以我會說haproxy正在偵聽端口4000. Nginx和haproxy安裝在主機(入口點)。 - 3臺機器之間的Haproxy負載平衡。它的流量轉發到端口4001,也就是Node.js的進程正在聽4001
- 每node.js中具有n個過程的集羣聽4001
如果我是正確的單http請求將被轉發到單個node.js進程。
創建會話是很正常的,對吧?會話只是一個映射,而這個映射是一個Object,而這個Object存在於一個node.js過程中。 Haproxy將配置循環調度程序,因此可以將同一用戶轉發到不同的node.js進程。我如何跨所有node.js進程共享相同的會話對象?我如何共享全局對象(這包括在同一臺計算機(node.js集羣)和整個網絡中)? 我應該如何設計一個帶有node.js的分佈式Web應用程序?有沒有任何模塊可以簡化同步任務?
haproxy有多種處理粘性會話的方法,http:// stacko verflow.com/questions/6498030/load-balancing-haproxy-or-other-sticky-sessions。對於全局對象,請使用redis或其他東西。 – numbers1311407
類似於http://stackoverflow.com/questions/5398209/scaling-node-js-across-multiple-cores-servers還只有3個服務器。 –