2016-11-15 18 views
0

我想使用nginx的,以在不同端口上運行我的節點應用中的多個實例之間的負載平衡。我想知道的是,在不同端口上運行的不同實例是否可以相互通信。例如,如果我在一個實例上進行了聊天,那麼人們可以與另一個端口上運行的另一個應用程序實例進行通信,因爲負載均衡?如果是這樣如何?如果不是,我該如何做這項工作。 我非常感謝你對此的幫助。nginx的負載的NodeJS均衡共享信息

+0

如果您正在使用AWS或類似的網絡服務,我覺得還可以。 –

+0

您必須在您的實例之間共享後端,以支持某種形式的消息傳遞。 redis pubsub。 – cejast

回答

0

那麼你有兩個組的解決方案在這裏(請注意,在第二種方法沒有分享信息,你只要平衡負載的「聰明」的方式)

  1. 在應用水平。您必須配置您的應用程序或node.js(我不知道節點是否支持其他應用程序服務器),才能訪問共享後端,如評論中提到的@cejast。您有幾種方法可以實現這一目標,其中所有目標都是您的應用程序的每個實例,無論它在哪裏,都可以訪問所有用戶的實時信息。
  2. 具有負載平衡方法。您可以通過負載均衡的nginx的具體方法解決這個支持ip_hash(見here爲ip_has和其它負載均衡方法nginx的支持。) 隨着ip_hash nginx的將發送相同的IP(/ 24子網實際上)總是同一個實例,所以你不會擔心實例將不得不處理不知道的會話。

如果您將遵循負載平衡方法來解決您的問題,我建議準確瞭解它是如何工作的,因爲在某些情況下可能不適合您的需求。

例如,我前面提到的nginx ip_hash創建了一個散列,用於從IPv4的前3個八位字節獲得粘性,這意味着如果您的應用程序從特定類獲取大部分流量C子網負載平衡將不平衡那麼好。在這種情況下,您應該使用remote_addr變量。

這是一個nginx load balancing很好的參考。