今天要來跟大家分享一個單一節點如何提高應用程式吞吐量與服務能力的方式
這個方式主要探討的是應用程式對於網路連線的 I/O 模型,試想一個常見的使用範例。
一個主要的 Process 會去聽取一個固定的 port number (ex port 80),並且通知後面眾多的 worker 來幫忙處理這些封包連線,而這些 worker 的工作就是處理連線。
整個架構中是一個 1 v.s N 的狀況, 一個負責 Listen ,N個負責處理連線內容
而今天要分享的則是想要讓架構變成 N v.s N 的狀況, 會有 N 個 Process, 每個 Process 配上一個 Worker。
而這 N個 process 同時共享一樣的 Port (ex, port 80)
這種情況下可以減少多個 worker 共享一個 listen socket 時的各種保護機制,取而代之的則是每個 listen socket 配上一個專屬的 worker 來處理。
要達成這樣的架構非常簡單,只要透過 SO_REUSEPORT 這個 socket option 告
訴 Kernel 當前這個 PORT 可以重複使用。
當封包送到 kernel 後則是由 kernel 幫你分配封包到所有使用相同地址的 Listen Socket (Process)
根據 nginx 官方文章的測試,這種架構下對於 RPS (Request per second) 有顯著的提升,有興趣的可以看看下列兩篇文章
參考文章:
- https://blog.cloudflare.com/the-sad-state-of-linux-socket-balancing/
- https://www.nginx.com/blog/socket-sharding-nginx-release-1-9-1/
「start nginx」的推薦目錄:
- 關於start nginx 在 矽谷牛的耕田筆記 Facebook 的精選貼文
- 關於start nginx 在 manual start nginx ,it ok with static html, but use systemctl start ... 的評價
- 關於start nginx 在 apiman-developer-portal/start-nginx-with-devportal.sh at main 的評價
- 關於start nginx 在 三步驟完成Filebeat 設定: 傳送Nginx Log 到Kibana 產生報表 的評價
- 關於start nginx 在 Deploy a Web Application Using Nginx | Edureka - YouTube 的評價
- 關於start nginx 在 Starting nginx on boot with systemd, Raspbian 8 (jessie)? 的評價
start nginx 在 apiman-developer-portal/start-nginx-with-devportal.sh at main 的推薦與評價
apiman-developer-portal/docker/start-nginx-with-devportal.sh ... a prefix is set we will replace the base path in index.html before starting the application. ... <看更多>
start nginx 在 三步驟完成Filebeat 設定: 傳送Nginx Log 到Kibana 產生報表 的推薦與評價
這篇文章會透過以下三個步驟,安裝並使用Filebeat 傳送Nginx Access Log ... 首先當然要下載nginx,下載解壓縮後到目錄直接 start nginx 然後瀏覽器 ... ... <看更多>
start nginx 在 manual start nginx ,it ok with static html, but use systemctl start ... 的推薦與評價
... <看更多>