国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

NGINX 1.9.1 新特性:套接字端口共享

v1 / 2798人閱讀

摘要:套接字端口共享選項允許多個套接字監聽同一個綁定的網絡地址和端口,這樣一來內核就可以將外部的請求連接負載均衡到這些套接字上來。致謝感謝在英特爾工作的盧英奇和,他們每個人各自貢獻了使得套接字端口共享生效的解決方案。

  

英文原文地址:Socket Sharding in NGINX Release 1.9.1
譯者:UPYUN CDN 開發工程師 其實不想走

NGINX 1.9.1 發布版本中引入了一個新的特性 —— 允許套接字端口共享,該特性適用于大部分最新版本的操作系統,其中也包括 DragonFly BSD 和內核 3.9 以后的 Linux 操作系統。套接字端口共享選項允許多個套接字監聽同一個綁定的網絡地址和端口,這樣一來內核就可以將外部的請求連接負載均衡到這些套接字上來。(對于 NGINX Plus 的用戶來說,該特性將會在年底發布的版本 7 中得到支持)

實際上很多潛在的用戶希望使用端口重用功能。其他服務也可以簡單的進行熱更新升級「NGINX 支持 多種方式 的熱更新」。對于 NGINX 來說,打開該選項可以通過在特定場景下減少連接鎖競爭而提高性能。

如下圖所示,在該選項沒有生效的前提下,一個多帶帶的監聽套接字會通知所有的工作進程,每個進程則會試圖爭搶接管某個連接:

當該選項生效時,這個時候對于每個網絡地址和端口就會有多個監聽套接字,每個工作進程對應一個套接字,內核會決定由哪個監聽套接字(也就是決定哪個工作進程)接管進來的連接。這個特性可以減少進程與進程之間為接收連接產生的鎖競爭而提高多核系統的性能。但是,如果當一個工作進程處于阻塞操作時,這個時候不僅會影響已經被該進程接收的連接,還會阻塞由系統準備分配給該進程的連接請求:

配置套接字共享

如下面配置所示,可以通過在 listen 指令后添加新的參數 reuseport 來為 HTTP 或者 TCP(流模塊)打開套接字端口共享功能:

對于套接字來說,添加 reuseport 參數也就等于禁止了 accept_mutex 指令了,因為 mutex 對于 reuseport 來說是多余的,不過對于那些不希望使用套接字端口共享特性的端口來說,我們則有必要設置 accept_mutex。

reuseport 性能壓力測試

我通過運行 wrk 壓測工具來壓測一個跑在 36 核亞馬遜實例上并開啟 4 個工作進程的 NGINX。為了減少網絡對于測試結果的影響,我們的客戶端和 NGINX 都是運行在本地的,并且 NGINX 只返回 OK 字符串而不返回文件。我對比了三個不同的配置,一個是默認的(等同于 accept_mutex on),另一個是 accept_mutex off,還有一個則是 reuseport。正如下圖所示,使用 reuseport 后每秒能處理的請求數比其他的兩個增加了 2-3 倍,并且同時減少了平均延遲和平均延遲的標準差。

我還嘗試客戶端和 NGINX 分別運行在不同的主機上跑相關的壓力測試,但這一次 NGINX 返回的是一個 HTML 文件。正如下表所示,與上圖的結果類似,使用端口重用能減少請求的處理延遲,并且延遲標準差減少的更加明顯(大概是 10 倍)。其他結果(并沒有在下表中顯示)則更加讓人欣喜。通過端口重用,請求的壓力被各個工作進程均衡掉,而在默認條件下(也就是 accept_mutex 打開),一些工作進程會得到比較高的負載,而在 accept_mutex 關閉的時候,所有的進程都會顯示負載比較高。

在上述的壓力測試中,請求的頻率很高但是每個請求并不需要復雜的處理。其他一些初步的測試也表明端口重用特性在網絡流量匹配的時候最能提高性能。(該參數并不能在郵件模塊的上下文監聽指令中生效,因為郵件的網絡流量并不能匹配這個特性)。我們建議你在使用 reuseport 這個指令前先在你的 NGINX 實例上進行性能測試,而不是全部的 NGINX 實例都使用。對于測試 NGINX 的一些小提示,可以參考 Konstantin Pavlov 在 2014 NGINX 大會上的演講。

致謝

感謝在英特爾工作的盧英奇和 Sepherosa Ziehau,他們每個人各自貢獻了使得套接字端口共享生效的解決方案。NGINX 開發小組合并了他們倆的想法從而創造出目前看來比較理想的解決方案。

原文鏈接:http://io.upyun.com/2015/07/20/nginx-socket-sharding/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39186.html

相關文章

  • nginx架構

    摘要:反向代理反向代理反向代理負載均衡鑒權限流等邏輯架構在邏輯上分為入口層,模塊化的功能處理層,系統調用層。多個共同監聽事件并處理,反向代理會把請求轉發給后端服務。 一.概述 本文將深入剖析nginx的架構。 第一部分介紹nginx現有框架,用典型的4+1視圖闡述,包括邏輯架構,開發架構,運行架構,物理架構,功能用例,nginx為單機服務,不考慮物理架構。其中功能用例概述nginx功能;邏輯...

    smartlion 評論0 收藏0
  • nginx架構

    摘要:反向代理反向代理反向代理負載均衡鑒權限流等邏輯架構在邏輯上分為入口層,模塊化的功能處理層,系統調用層。多個共同監聽事件并處理,反向代理會把請求轉發給后端服務。 一.概述 本文將深入剖析nginx的架構。 第一部分介紹nginx現有框架,用典型的4+1視圖闡述,包括邏輯架構,開發架構,運行架構,物理架構,功能用例,nginx為單機服務,不考慮物理架構。其中功能用例概述nginx功能;邏輯...

    fuyi501 評論0 收藏0
  • [轉]深入 NGINX: 為性能和擴展所做之設計

    摘要:常規的網絡應用設計都是為每個連接分配一個線程或進程。深入理解進程每個進程都是用配置進行初始化的,并且由主進程提供了一組監聽套接字。套接字上發生事件后,進程開始進行處理監聽套接字上的事件意味著有個客戶端發起了一盤新的象棋游戲。 NGINX在web性能上的表現尤為出眾,這完全得益于其設計方式,許多web和應用服務器都是基于線程或進程這種簡單的架構,NGINX用了一種精妙的事件驅動架構,在現...

    caoym 評論0 收藏0
  • Nginx源碼分析】Nginx的內存管理

    摘要:而對于堆內存,通常需要程序員進行管理。我們通常說的內存管理亦是只堆空間內存管理。內存管理整體可以分為個部分,第一部分是常規的內存池,用于進程平時所需的內存管理第二部分是共享內存的管理。將內存塊按照的整數次冪進行劃分最小為最大為。 施洪寶 一. 概述 應用程序的內存可以簡單分為堆內存,棧內存。對于棧內存而言,在函數編譯時,編譯器會插入移動棧當前指針位置的代碼,實現棧空間的自管理。而對于...

    raise_yang 評論0 收藏0
  • Nginx源碼研究】內存管理部分

    摘要:而對于堆內存,通常需要程序員進行管理。二內存池管理說明本部分使用的版本為具體源碼參見文件實現使用流程內存池的使用較為簡單可以分為步,調用函數獲取指針。將內存塊按照的整數次冪進行劃分最小為最大為。 運營研發團隊 施洪寶 一. 概述 應用程序的內存可以簡單分為堆內存,棧內存。對于棧內存而言,在函數編譯時,編譯器會插入移動棧當前指針位置的代碼,實現棧空間的自管理。而對于堆內存,通常需要程序...

    sarva 評論0 收藏0

發表評論

0條評論

v1

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<