SO_REUSEPORT選項

SO_REUSEPORT選項[1]

概述

SO_REUSEPOR這個socket選項可以讓你將多個socket綁定在同一個監聽端口,然后讓內核給你自動做負載均衡,將請求平均地讓多個線程進行處理。

安全性考慮

  1. 第一個進程必須enable了這個選項之后,后續的進程才可以通過enable這個選項將socket綁定到同一個端口上。
  2. 綁定到同一個端口的進程的effective user id必須一致。

上述規定是為了避免hijacking:惡意用戶通過監聽相同的端口來獲取用戶信息。

在沒有SO_REUSEPORT的年代

在SO_REUSEPORT沒有出現之前,多線程編程一般有兩種獲取到來的請求。

  1. 指派一條線程專門進行accept,獲取socket后分派給worker線程。這種方法使得進行accept的線程成為了單點,容易成為性能的瓶頸。
  2. 多個線程同時進行accept。這種方法的問題是每一個線程accept成功的概率不均勻,導致負載不均衡。

SO_REUSEPORT的負載均衡算法

使用(remote_ip, remote_port, local_ip, local_port)來進行哈希,因此可以保證同一個client的包可以路由到同一個進程。但是,當一個listen的進程加進來或者terminate的時候,由于沒有實現一致性哈希,結果可能導致有些請求由于路由到另外一個進程上,client-server的三次握手過程可能會被重置。


  1. 本文內容主要來自https://lwn.net/Articles/542629/ ?

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 32,747評論 24 1,002
  • 什么是Nginx? Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器N...
    jiangmo閱讀 2,574評論 1 9
  • 小時候,經常看一個動畫片叫《快樂的阿凡提》,故事主要是講機智勇敢善良的阿凡提跟財主巴依老爺斗智斗勇,幫助窮人兄...
    白喵嗚閱讀 347評論 0 0
  • 在小程序上線之前,互聯網圈子對小程序的期望非常之高,仿佛錯過這一波,就錯過了一場饕餮大宴。 老話說得好:理想是豐滿...
    宣炳剛閱讀 337評論 0 1