為什麼 reuse_port
記得 2008 年做性能測試的時候,新進7台 lenovo 4核4g 伺服器用于性能測試。
當時資源緊張,這7台伺服器都裝了雙系統(win2003/centos5)空閑時用于做殭屍電腦(壓測的agent)。
當時給nginx做了一系列測試,印象很深的是:在這批機器上,nginx狀态頁面的壓測。
大概3年後,那批 lenovo 伺服器已經沒人瞧得上了,隻能做殭屍電腦。
然而,一次不經意的測試,發現再牛的伺服器,短連接配接最佳qps也高不了多少。
而且,殭屍電腦的資源沒用完,被測試伺服器的資源也用不完,網絡也沒瓶頸。
最後,我們發現了 so_reuseport。對,瓶頸在這(監聽的入口)!
引入 lvs fullnat
當時用的 centos 5、6,核心版本都還在 2.6。
嘗試過新核心,遇到一些奇怪的現象無力維護,最終放棄。
也可以用nginx監控多個ip來突破瓶頸(多虛拟幾個ip),維護成本略高。
也可以用lvs的nat方式來做轉發,然而nat對網絡的要求你懂的。
最終我們決定使用 淘寶lvs,依賴 淘寶核心。
然後使用 fullnat ,将對外端口映射到每個節點的多個端口(而非多ip)。
曾線上上做過極端測試,效果非常顯著。然後我們就上線了!
壓測 reuse_port

探個究竟
測試環境