1. nginx最多隻能維持(65535*後端伺服器IP個數)條websocket的長連接配接,如果後端websocket伺服器IP隻有一個,那麼就隻能最多支援65535條連接配接。瓶頸就産生在了nginx上。
2. 建議采用LVS的DR模式來做負載均衡,這樣最大長連接配接數目就隻和websocket伺服器資源(主要是記憶體)有關了,單台websocket伺服器很輕松可以支撐百萬級連接配接
用nginx做websocket的反向代理其中涉及到的資源有:
1. 記憶體(相關資料結構的存儲)、cpu、網絡
記憶體的占用分兩部分,一部分是核心中tcp協定棧結構占用的記憶體,一部分是nginx中維持雙向連接配接資料結構占用的記憶體
按照理想狀況,一條tcp連接配接的資料結構在記憶體中占用大約4KB左右,nginx的記憶體占用,沒有統計相關的結構體,這裡就等于2KB(nginx的記憶體利用非常高效,有記憶體池)
對于現在的伺服器來說記憶體、cpu、網絡都不會是瓶頸,是以這裡不做讨論。
2. 檔案描述符數量
可能需要調整核心參數,檔案描述符的數量其實也是和記憶體相關的,因為每打開一個tcp連接配接,就得占用一個檔案描述符。
核心參數:fs.file-max
這是和系統資源相關的,也不會是瓶頸
3. 端口号數量
核心參數為:net.ipv4.ip_local_port_range,且最大值為65535
linux核心是通過{local_ip, local_port, remote_ip, remote_port}這個四元組來辨別一條唯一的tcp連接配接的。
1)對于websocket伺服器自身而言,local_ip, local_port是确定的,在記憶體、cpu足夠的情況下,其可以支撐 (client_ip數量*2^16)條連接配接。也就是說隻要伺服器資源足夠,一定不會是瓶頸。
2)對于nginx伺服器來說,local_ip, local_port也是确定的,不同的是,它還要作為client去連接配接websocket伺服器,這是要占用一個端口的。
是以,nginx能支撐的websocket連接配接數最大為:(代理的websocket伺服器IP數量*2^16),如果隻有一個websocket伺服器IP,那麼就隻有65536,去掉0端口,就隻有65535.
部落客更多好文請移步:http://wjhsmart.vip
自己喜歡建站的小夥伴也可以聯系部落客友聯哦。