如何處理 1M websocket 連線(Nginx/HAProxy/Amazon/Google)

如何處理 1M websocket 連線(Nginx/HAProxy/Amazon/Google)

什麼nginx或者哈代理建議對目標進行設置10萬並發網路套接字連線?我認為,單一 nginx 將無法承受這樣的流量以及並發連線。到 nginx/haproxy 的流量應該如何分割(DNS lvl 或任何可用的 Amazon/Google 選項)?單一 nginx 能夠處理多少並發 Websocket?

嘗試從Google搜尋和SO貼​​文收集相關資訊。

答案1

有人在 haproxy 負載平衡器後面運行聊天伺服器,負載甚至更高。在私人電子郵件(帶有統計頁面的副本)中向我報告的最高負載約為每個進程 300k 個連接(因此有 600k 個套接字)。請注意,預設情況下,Linux 下的進程限制為 1M 檔案描述符(因此有 500k 端對端連接),但可以在 /proc 中進行調整。

在這種負載下要考慮的最重要的事情是您需要的 RAM 量。核心端套接字緩衝區始終需要每側每個方向至少 4kB,因此每個端對端連線至少需要 16kB。 HAProxy 1.5 及更低版本的每個連接將有兩個緩衝區(例如:4kB 緩衝區足以用於 websocket)。 1.6 可以在沒有這些緩衝區的情況下運行,並且只將它們分配給罕見的資料連接。因此,每百萬個連接至少需要 16 GB RAM,舊版本則需要大約 24 GB。將其分散到 SMP 機器上的多個進程上以減少延遲可能是值得的。請記住,為了簡單地建立 1M 連接,在 100k conns/s 的情況下可能需要 10 秒。所有這些連接都會產生一些工作,每個工作需要幾個字節,處理 1M 的活動連接肯定會產生重要的工作和系統的高負載。

相關內容