天天看點

nginx代理websocket連接配接上限

  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

自己喜歡建站的小夥伴也可以聯系部落客友聯哦。

繼續閱讀