亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

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

v1 / 2857人閱讀

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

  

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

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

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

如下圖所示,在該選項(xiàng)沒有生效的前提下,一個(gè)多帶帶的監(jiān)聽套接字會(huì)通知所有的工作進(jìn)程,每個(gè)進(jìn)程則會(huì)試圖爭搶接管某個(gè)連接:

當(dāng)該選項(xiàng)生效時(shí),這個(gè)時(shí)候?qū)τ诿總€(gè)網(wǎng)絡(luò)地址和端口就會(huì)有多個(gè)監(jiān)聽套接字,每個(gè)工作進(jìn)程對(duì)應(yīng)一個(gè)套接字,內(nèi)核會(huì)決定由哪個(gè)監(jiān)聽套接字(也就是決定哪個(gè)工作進(jìn)程)接管進(jìn)來的連接。這個(gè)特性可以減少進(jìn)程與進(jìn)程之間為接收連接產(chǎn)生的鎖競爭而提高多核系統(tǒng)的性能。但是,如果當(dāng)一個(gè)工作進(jìn)程處于阻塞操作時(shí),這個(gè)時(shí)候不僅會(huì)影響已經(jīng)被該進(jìn)程接收的連接,還會(huì)阻塞由系統(tǒng)準(zhǔn)備分配給該進(jìn)程的連接請(qǐng)求:

配置套接字共享

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

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

reuseport 性能壓力測(cè)試

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

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

在上述的壓力測(cè)試中,請(qǐng)求的頻率很高但是每個(gè)請(qǐng)求并不需要復(fù)雜的處理。其他一些初步的測(cè)試也表明端口重用特性在網(wǎng)絡(luò)流量匹配的時(shí)候最能提高性能。(該參數(shù)并不能在郵件模塊的上下文監(jiān)聽指令中生效,因?yàn)猷]件的網(wǎng)絡(luò)流量并不能匹配這個(gè)特性)。我們建議你在使用 reuseport 這個(gè)指令前先在你的 NGINX 實(shí)例上進(jìn)行性能測(cè)試,而不是全部的 NGINX 實(shí)例都使用。對(duì)于測(cè)試 NGINX 的一些小提示,可以參考 Konstantin Pavlov 在 2014 NGINX 大會(huì)上的演講。

致謝

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

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

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/39186.html

相關(guān)文章

  • nginx架構(gòu)

    摘要:反向代理反向代理反向代理負(fù)載均衡鑒權(quán)限流等邏輯架構(gòu)在邏輯上分為入口層,模塊化的功能處理層,系統(tǒng)調(diào)用層。多個(gè)共同監(jiān)聽事件并處理,反向代理會(huì)把請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)。 一.概述 本文將深入剖析nginx的架構(gòu)。 第一部分介紹nginx現(xiàn)有框架,用典型的4+1視圖闡述,包括邏輯架構(gòu),開發(fā)架構(gòu),運(yùn)行架構(gòu),物理架構(gòu),功能用例,nginx為單機(jī)服務(wù),不考慮物理架構(gòu)。其中功能用例概述nginx功能;邏輯...

    smartlion 評(píng)論0 收藏0
  • nginx架構(gòu)

    摘要:反向代理反向代理反向代理負(fù)載均衡鑒權(quán)限流等邏輯架構(gòu)在邏輯上分為入口層,模塊化的功能處理層,系統(tǒng)調(diào)用層。多個(gè)共同監(jiān)聽事件并處理,反向代理會(huì)把請(qǐng)求轉(zhuǎn)發(fā)給后端服務(wù)。 一.概述 本文將深入剖析nginx的架構(gòu)。 第一部分介紹nginx現(xiàn)有框架,用典型的4+1視圖闡述,包括邏輯架構(gòu),開發(fā)架構(gòu),運(yùn)行架構(gòu),物理架構(gòu),功能用例,nginx為單機(jī)服務(wù),不考慮物理架構(gòu)。其中功能用例概述nginx功能;邏輯...

    fuyi501 評(píng)論0 收藏0
  • [轉(zhuǎn)]深入 NGINX: 為性能和擴(kuò)展所做之設(shè)計(jì)

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

    caoym 評(píng)論0 收藏0
  • Nginx源碼分析】Nginx的內(nèi)存管理

    摘要:而對(duì)于堆內(nèi)存,通常需要程序員進(jìn)行管理。我們通常說的內(nèi)存管理亦是只堆空間內(nèi)存管理。內(nèi)存管理整體可以分為個(gè)部分,第一部分是常規(guī)的內(nèi)存池,用于進(jìn)程平時(shí)所需的內(nèi)存管理第二部分是共享內(nèi)存的管理。將內(nèi)存塊按照的整數(shù)次冪進(jìn)行劃分最小為最大為。 施洪寶 一. 概述 應(yīng)用程序的內(nèi)存可以簡單分為堆內(nèi)存,棧內(nèi)存。對(duì)于棧內(nèi)存而言,在函數(shù)編譯時(shí),編譯器會(huì)插入移動(dòng)棧當(dāng)前指針位置的代碼,實(shí)現(xiàn)??臻g的自管理。而對(duì)于...

    raise_yang 評(píng)論0 收藏0
  • Nginx源碼研究】內(nèi)存管理部分

    摘要:而對(duì)于堆內(nèi)存,通常需要程序員進(jìn)行管理。二內(nèi)存池管理說明本部分使用的版本為具體源碼參見文件實(shí)現(xiàn)使用流程內(nèi)存池的使用較為簡單可以分為步,調(diào)用函數(shù)獲取指針。將內(nèi)存塊按照的整數(shù)次冪進(jìn)行劃分最小為最大為。 運(yùn)營研發(fā)團(tuán)隊(duì) 施洪寶 一. 概述 應(yīng)用程序的內(nèi)存可以簡單分為堆內(nèi)存,棧內(nèi)存。對(duì)于棧內(nèi)存而言,在函數(shù)編譯時(shí),編譯器會(huì)插入移動(dòng)棧當(dāng)前指針位置的代碼,實(shí)現(xiàn)??臻g的自管理。而對(duì)于堆內(nèi)存,通常需要程序...

    sarva 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<