1
我想使用socket.io,但我將運行我的應用的多個實例,所以這就是事情變得有趣的地方。Socket.io和Redis pub/sub
我需要在不同的端口上運行多個實例。這裏沒問題。
我決定不使用Node自己的集羣,我將使用Nginx進行負載平衡(這就是爲什麼我創建應用程序的多個實例)。 Nginx支持websockets,所以這一個也被整理出來。
考慮到將會有多個實例,並非所有實例都不能直接相互通信(用戶A連接到實例X,如果用戶B連接到實例Y,那麼它們將無法與服務器通信是互相獨立的),所以我需要使用Redis的pub/sub機制作爲包裝來模仿socketio的發射功能。這樣,即使我有多個應用程序實例或在不同的服務器上運行它,只要連接到同一個Redis服務器,每個人都可以相互通話。爲了達到這個目標,我需要使用socket.io-redis和socket.io-emitter模塊。
我說得沒錯,這種方法有什麼問題嗎?
我想利用所有的CPU,似乎有兩種方式來實現它,使用集羣模塊(本地解決方案)或創建多個實例(等於核心數),使用Redis的pub/sub進行套接字通信因爲如果它們不在同一臺服務器上,它們不能直接對話),並讓Nginx處理這些實例之間的負載平衡。它也應該適用於運行多個實例的多個服務器。那是對的嗎? – salep
我認爲你所說的會起作用,只是認爲你可能想仔細檢查一下,你是否真的受到CPU的限制。當然,如果只用一個進程就會遇到CPU/IO問題,那麼擁有可擴展的解決方案當然很好,但這並不能保證你會遇到瓶頸。 –
我很可能不會很快遇到這個瓶頸(可能永遠不會),但我希望有一個可擴展的解決方案,可以利用盡可能多的資源。謝謝! – salep