精品免费在线观看-精品欧美-精品欧美成人bd高清在线观看-精品欧美高清不卡在线-精品欧美日韩一区二区

17站長網

17站長網 首頁 網站 服務器 查看內容

nginx是如何實現高性能和可擴展性的?

2022-10-6 08:58| 查看: 1356 |來源: 互聯網

NGINX的整體架構的特點是由一組進程協同工作: 主進程:負責執行特權操作,如閱讀配置文件、綁定套接字、創建/通知協調(Signalling)子進程。 工作進程:負責接收和處理連接請求,讀取和寫入磁盤,并與上游服務

NGINX的整體架構的特點是由一組進程協同工作:

主進程:負責執行特權操作,如閱讀配置文件、綁定套接字、創建/通知協調(Signalling)子進程。

工作進程:負責接收和處理連接請求,讀取和寫入磁盤,并與上游服務器通信。當NGINX處于活躍狀態時,只有工作進程是忙碌的。

緩存加載器進程:負責將磁盤高速緩存加載到內存中。這個進程在啟動時運行后隨即退出。

緩存管理器進程:負責整理磁盤緩存的數據保證其不越界。這個進程會間歇性運行。

NGINX能夠實現高性能和可擴展性的關鍵取決于兩個基本的設計選型:

盡可能限制工作進程的數量,從而減少上下文切換帶來的開銷。默認和推薦配置是讓每個CPU內核對應一個工作進程,從而高效利用硬件資源。

工作進程采用單線程,并以非阻塞的方式處理多個并發連接。

NGINX的每個工作進程通過狀態機處理多個連接請求,這個狀態機被實現為非阻塞的工作方式:

每個工作進程需要處理若干套接字,包括監聽套接字或者連接套接字。

當監聽套接字收到新的請求時,會打開一個新的連接套接字來處理與客戶端的通信。

當一個事件到達連接套接字時,工作進程迅速完成響應,并轉而處理其他任何套接字新收到的事件。

Garrett說,NGINX選擇這樣的設計,使它從根本上區別于其他Web服務器。通常的Web服務器會選用將每個連接分配給獨立線程的模式,這使得多個連接的處理非常容易,因為每個連接可以被認為是包含多個步驟的一個線性序列,但這樣會產生上下文切換的開銷。事實上,工作線程大部分的時間處于阻塞的狀態,在等待客戶端或其它上游服務器。當試圖執行I/O等操作的并發連接數/線程數的規模超過一定閾值,或是內存消耗殆盡的時候,上下文切換的成本就顯現出來了。

從另一方面講,NGINX的設計是不讓工作進程阻止網絡流量,除非沒有任何工作要做。此外,每一個新的連接只消耗很少的資源,僅包括一個文件描述符和少量的工作進程內存。

總的來說,NGINX的這種工作模式在系統調優后,它的每個工作進程都能夠處理成百上千的HTTP并發連接。

深入NGINX:我們如何設計它的性能和擴展性

NGINX之所以能在性能上如此優越,是由于其背后的設計。許多web服務器和應用服務器使用簡單的線程的(threaded)、或基于流程的(process-based)架構,NGINX則以一種復雜的事件驅動(event-driven)的架構脫穎而出,這種架構能支持現代硬件上成千上萬的并發連接。

Inside NGINX infographic涉及了從高層次進程架構的挖掘,到NGINX的單進程處理多連接的圖解。本篇文章講解了這些工作細節。

設置場景——NGINX進程模型

Setting the Scene ? the NGINX Process Model

為了更好地理解設計,你需要了解NGINX是如何工作的。NGINX有一個主進程(master process)(執行特權操作,如讀取配置、綁定端口)和一系列工作進程(worker process)和輔助進程(helper process)。

這個四核服務器內,NGINX主進程創建了4個工作進程和2個緩存輔助進程(cache helper processes)來管理磁盤內容緩存(on-disk content cache)。

為什么架構很重要?

Why Is Architecture Important?

任何Unix應用程序的根本基礎都是線程或進程。(從Linux操作系統的角度看,線程和進程基本上是相同的,主要區別是他們共享內存的程度。) 進程或線程,是一組操作系統可調度的、運行在CPU內核上的獨立指令集。大多數復雜的應用程序都并行運行多個線程或進程,原因有兩個:

● 可以同時使用更多的計算機內核。

●線程和進程使并行操作很容易實現(例如,同時處理多個連接)。

進程和線程都消耗資源。它們都使用內存和其他OS資源,導致內核頻繁切換(被稱作上下文切換(context switch)的操作)。大多數現代服務器可以同時處理數百個小的、活躍的(active)線程或進程,但一旦內存耗盡,或高I/O負載導致大量的上下文切換時,服務器的性能就會嚴重下降。

對于網絡應用,通常會為每個連接(connection)分配一個線程或進程。這種架構易于實現,但是當應用程序需要處理成千上萬的并發連接時,這種架構的擴展性就會出現問題。

NGINX是如何工作的?

How Does NGINX Work?

NGINX使用一個了可預見式的(predictable)進程模型,調度可用的硬件資源:

1.主進程執行特權操作,如讀取配置和綁定端口,還負責創建子進程(下面的三種類型)。

2.緩存加載進程(cache loader process)在啟動時運行,把基于磁盤的緩存(disk-based cache)加載到內存中,然后退出。對它的調度很謹慎,所以其資源需求很低。

3.緩存管理進程(cache manager process)周期性運行,并削減磁盤緩存(prunes entries from the disk caches),以使其保持在配置范圍內。

4.工作進程(worker processes)才是執行所有實際任務的進程:處理網絡連接、讀取和寫入內容到磁盤,與上游服務器通信等。

多數情況下,NGINX建議每1個CPU核心都運行1個工作進程,使硬件資源得到最有效的利用。你可以在配置中設置如下指令:

worker_processes auto

當NGINX服務器在運行時,只有工作進程在忙碌。每個工作進程都以非阻塞的方式處理多個連接,以消減上下文切換的開銷。

每個工作進程都是單線程且獨立運行的,抓取并處理新的連接。進程間通過共享內存的方式,來共享緩存數據、會話持久性數據(session persistence data)和其他共享資源。

NGINX內部的工作進程

Inside the NGINX Worker Process

每一個NGINX的工作進程都是NGINX配置(NGINX configuration)初始化的,并被主進程設置了一組監聽套接字(listen sockets)。

NGINX工作進程會監聽套接字上的事件(accept_mutex和kernel socket sharding),來決定什么時候開始工作。事件是由新的連接初始化的。這些連接被會分配給狀態機(state machine)——HTTP狀態機是最常用的,但NGINX還為流(原生TCP)和大量的郵件協議(SMTP,IMAP和POP3)實現了狀態機。

狀態機本質上是一組告知NGINX如何處理請求的指令。大多數和NGINX具有相同功能的web服務器也使用類似的狀態機——只是實現不同。

調度狀態機

Scheduling the State Machine

把狀態機想象成國際象棋的規則。每個HTTP事務(HTTP transaction)都是一局象棋比賽。棋盤的一邊是web服務器——坐著一位可以迅速做出決定的大師級棋手。另一邊是遠程客戶端——在相對較慢的網絡中,訪問站點或應用程序的web瀏覽器。

然而,比賽的規則可能會很復雜。例如,web服務器可能需要與各方溝通(代理一個上游的應用程序),或者和認證服務器交流。web服務器的第三方模塊也可以拓展比賽規則。

阻塞狀態機

A Blocking State Machine

回憶一下我們之前對進程和線程的描述:是一組操作系統可調度的、運行在CPU內核上的獨立指令集。大多數web服務器和web應用都使用一個連接 /一個進程或一個連接/一個線程的模型來進行這局國際象棋比賽。每個進程或線程都包含一個將比賽玩到最后的指令。在這個過程中,進程是由服務器來運行的,它的大部分時間都花在“阻塞(blocked)”上,等待客戶端完成其下一個動作。

1.web服務器進程(web server process)在監聽套接字上,監聽新的連接(客戶端發起的新比賽)。

2.一局新的比賽發起后,進程就開始工作,每一步棋下完后都進入阻塞狀態,等待客戶端走下一步棋。

3.一旦比賽結束,web服務器進程會看看客戶是否想開始新的比賽(這相當于一個存活的連接)。如果連接被關閉(客戶端離開或者超時),web服務器進程會回到監聽狀態,等待全新的比賽。

記住重要的一點:每一個活躍的HTTP連接(每局象棋比賽)都需要一個專用的進程或線程(一位大師級棋手)。這種架構非常易于擴展第三方模塊 (“新規則”)。然而,這里存在著一個巨大的不平衡:一個以文件描述符(file descriptor)和少量內存為代表的輕量級HTTP連接,會映射到一個單獨的進程或線程——它們是非常重量級的操作系統對象。這在編程上是方便的,但它造成了巨大的浪費。

NGINX是真正的大師

NGINX is a True Grandmaster

也許你聽說過車輪表演賽,在比賽中一個象棋大師要在同一時間對付幾十個對手。

Kiril Georgiev在保加利亞首都索菲亞同時對陣360名棋手,最終取得284勝,70平,6負的戰績。

這就是NGINX工作進程玩“國際象棋”的方式。每一個工作進程都是一位大師(記住:通常情況下,每個工作進程占用一個CPU內核),能夠同時對戰上百棋手(實際上是成千上萬)。

1.工作進程在監聽套接字和連接套接字上等待事件。

2.事件發生在套接字上,工作進程會處理這些事件。

●監聽套接字上的事件意味著:客戶端開始了一局新的游戲。工作進程創建了一個新的連接套接字。

●連接套接字上的事件意味著:客戶端移動了棋子。工作進程會迅速響應。

工作進程從不會在網絡上停止,它時時刻刻都在等待其“對手”(客戶端)做出回應。當它已經移動了這局比賽的棋子,它會立即去處理下一局比賽,或者迎接新的對手。

為什么它會比阻塞式多進程的架構更快?

Why Is This Faster than a Blocking, Multi-Process Architecture?

NGINX的規模可以很好地支持每個工作進程上數以萬計的連接。每個新連接都會創建另一個文件描述符,并消耗工作進程中少量的額外內存。每一個連接的額外消耗都很少。NGINX進程可以保持固定的CPU占用率。當沒有工作時,上下文切換也較少。

在阻塞式的、一個連接/一個進程的模式中,每個連接需要大量的額外資源和開銷,并且上下文切換(從一個進程到另一個進程)非常頻繁。

如果想了解更多,請查看由NGINX公司發展和聯合創始人副總裁Andrew Alexeev編寫的有關NGINX體系結構的文章。

通過適當的系統調優,NGINX能大規模地處理每個工作進程數十萬并發的HTTP連接,并且能在流量高峰期間不丟失任何信息(新比賽開始)。

配置更新和NGINX升級

Updating Configuration and Upgrading NGINX

僅包含少量工作進程的NGINX進程架構,使得配置、甚至是二進制文件本身的更新都非常高效。

更新NGINX的配置,是一個非常簡單的、輕量級的、可靠的操作。運行nginx ?s reload命令即可,該命令會檢查磁盤上的配置,并給主進程發送一個SIGHUP信號。

當主進程接收到SIGHUP信號后,會做兩件事:

1.重新加載配置,fork一套新的工作進程。這些新的工作進程會立即開始接受連接和處理流量(traffic)(使用新的配置)。

2.發出信號,通知舊的工作進程安靜地退出。這些舊進程不會再接受新的連接了。只要它們處理的HTTP請求結束了,它們就會干凈地關閉連接。一旦所有的連接都被關閉,工作進程也就退出了。

這個過程會導致CPU占用率和內存使用的一個小高峰,但相比于從活動連接中加載資源,這個小高峰可忽略不計。你可以在一秒內重新加載配置多次。極少情況下,一代又一代工作進程等待連接關閉時會出現問題,但即便出現問題,它們也會被立即解決掉。

NGINX的二進制升級過程更加神奇——你可以飛速地升級NGINX本身,服務器不會有任何的丟連接、宕機、或服務中斷等情況。

二進制升級過程與配置更新相似。新的NGINX主進程與原來的主進程并行,它們共享監聽套接字。兩個進程都是活躍的(active),它們各自的工作進程處理各自的流量(traffic)。然后,你可以通知舊的主進程與其工作進程完美退出。

在Controlling NGINX中,整個過程有更詳細的描述。

結論

Conclusion

NGINX的內部圖表高度概述了NGINX是如何運作的,但在這簡單的解釋背后是超過十年的創新與優化。這些創新與優化,使NGINX在多種硬件上表現出良好的性能,同時還具備現代web應用所需要的安全性和可靠性。

本文最后更新于 2022-10-6 08:58,某些文章具有時效性,若有錯誤或已失效,請在網站留言或聯系站長:17tui@17tui.com
·END·
站長網微信號:w17tui,關注站長、創業、關注互聯網人 - 互聯網創業者營銷服務中心

免責聲明:本站部分文章和圖片均來自用戶投稿和網絡收集,旨在傳播知識,文章和圖片版權歸原作者及原出處所有,僅供學習與參考,請勿用于商業用途,如果損害了您的權利,請聯系我們及時修正或刪除。謝謝!

17站長網微信二維碼

始終以前瞻性的眼光聚焦站長、創業、互聯網等領域,為您提供最新最全的互聯網資訊,幫助站長轉型升級,為互聯網創業者提供更加優質的創業信息和品牌營銷服務,與站長一起進步!讓互聯網創業者不再孤獨!

掃一掃,關注站長網微信

大家都在看

  • 當我們在共享網絡訪問的時候,可能會遇到提示指定的網絡名不再可用的問題,這可能是由于我們的共享網絡出現了錯誤,也可能是被共享的對象所拒絕了。指定的網絡名 ......

    故障排除 2023-03-10
  •   文/曹楊  原標題:誰還看電視?  爸爸戴一副老花鏡,媽媽戴一副近視鏡,一人坐在沙發,一人躺在床上,各自刷著自己關注的博主更新的短視頻。電視也許開著,但只是背景。  這樣的畫面,幾乎成了洛奇家的常 ...

    站長 2020-12-09
  • 圖片來源于簡書  文/郭開森 楊帆  陸玖財經準備開新欄目了,每周一創始人郭開森和楊帆合體郭德帆,對行業進行一些觀察和評論,第一篇我們仍是打算寫社區團購,這是當下最火的話題。  來過陸玖財經做客的朋友們...

    熱議 2020-12-07
  • 1、首先進入到“百度”軟件中, 2、然后在其中輸入“百度識圖”, 3、之后點擊圖中的“開始使用”按鈕, 4、緊接著點擊右下角的“相冊”功能, 5、在相冊下 ......

    軟件教程 2023-02-17
  • 一、軟件沖突1、首先確認是否是應用程序沖突導致的。2、查看是否只有特定幾個游戲或應用會導致該問題。3、如果是應用沖突,那么只要卸載這些app就可以解決了。二 ......

    軟件教程 2022-12-27
  • 電腦端:1、大家可以點擊右邊鏈接進入網頁版的百度網盤,進入之后點擊“去登錄”。https://pan.baidu.com/2、之后正確的輸入賬號密碼進行登錄就好啦。手機端:1 ......

    軟件教程 2022-12-27
  • 在填寫一些項目申請書中,總是免不了要選擇一些數字,但是在方框中如何插入數字,該怎么辦呢?那么下面就由學習啦小編給大家分享下word在方框里輸入數字的技巧, ......

    Word教程 2023-04-27
  • 8月15日消息 上周,有媒體報道前身為百度圖片的“榴蓮”APP含有大量不雅視頻內容被用戶舉報。對此,百度圖片官方進行了回應,百度圖片表示已經對報道中所涉及的“生吃旋風哥”等爭議內容進行了下線處理。 此外,百度...

    站長 2016-08-15
  • 一、N100對比intel i3 1、N100的跑分達到了147210分,這個數據可以達到i3的七代級別。 2、在跑分上也是超越了大部分的I3七代CPU,不過比I3八代要弱勢一些。 3 ......

    硬件知識 2023-04-26
  • WPS Office手機版怎么加橫線?很多用戶還不知道WPS Office手機版怎么加橫線,WPS Office手機版怎么加橫線,WPS Office手機版怎么打橫線,WPS Office手機版怎么弄 ......

    WPS教程 2023-03-31
  • 迅雷前綴是什么 答:迅雷前綴是(magnet:?xt=urn:btih:)括號里的就是了。 我們只要在這段文字之后輸入后續的內容,就可以創建下載鏈接了。 1、磁力鏈接不基于文 ......

    軟件教程 2023-06-03
  • 一、內容特權。 1、半價點播。 許多站內視頻都需要付費觀看,而大會員用戶可以直接半價享受; 購買成功后的48h內無限次觀看。有部分的內容是只限在中國大陸內觀 ......

    軟件教程 2023-05-05
  • 1、首先打開小米運動的“實驗室功能”。 2、接著點擊“門卡模擬”。 3、然后點擊“我知道了”。 4、最后貼近就可以刷卡成功了。...

    硬件知識 2023-05-17
  • 1、打開手機輕顏相機app,點擊“我的”,點擊“設置”,2、點擊“幫助與反饋”,3、點擊右下角“在線咨詢”即可聯系客服,詢問自己的問題啦!...

    軟件教程 2023-03-16
  • 答:華為P系列: 華為p40,華為p40plus,華為p50,華為p50e,華為p60 華為mate系列: 華為mate40,華為mate50,華為mate50e,華為mate60 華為nova系列: 華為n ......

    鴻蒙系統 2023-04-24
  • 近期有用戶反映,電腦在更新Windows 11 Insider Preview 25252.1000后,出現了應用和已壓縮的文件點擊毫無反應,拖拽都不行,只能從開始菜單打開的情況,這是怎 ......

    windows11 2022-12-13
  • 可見單元格就是不包括隱藏或者篩選篩選后隱藏起來的單元格區域。方法:篩選或隱藏數據,復制需要粘貼的值,在目標單元格區域左上角的第一個單元格處右擊,選擇【 ......

    WPS教程 2022-12-10
  • 答:驍龍8+更好。 驍龍7+gen2實際上就是驍龍8+的低配版本。 在一些其他的核心架構方面都是保持一致的,比如說CPU的架構、GPU的架構等等。 驍龍7+和驍龍8+具體 ......

    硬件知識 2023-04-06
  •   文/黎明  一場針對中國互聯網巨頭的反壟斷風暴正在醞釀,而且這次動真格了。  11月10日,國家市場監管總局發布《關于平臺經濟領域的反壟斷指南(征求意見稿)》,要加大對互聯網巨頭涉嫌壟斷的調查和監管。 ...

    熱議 2020-11-14
  • win11系統如何釋放掉系統默認保留的存儲空間?一般情況下,Windows會保留一些存儲空間,以便設備獲得良好性能和成功更新。但是當出現系統盤儲存空間不足時,我們會將幾個G的保留空間釋放出來,以解燃眉之急。本期教...

    windows11 2022-11-17
  • 文件被win10系統誤報病毒自動刪除了如何進行恢復?有用戶下載了某些破解軟件卻被Win10系統誤認為是病毒文件而自動刪除,當然系統自帶殺毒軟件其實挺不錯的,就是有時候會誤報,大家遇到這種情況的時候就希望把誤刪的...

    windows10 2022-11-20
  • win11系統快速跳過聯網創建本地管理賬戶3種方法?現在市面上銷售的品牌筆記本和臺式機基本上都預裝Windows11家庭中文版正版操作系統,聯網后系統會自動激活。當用戶拿到新機器后還需要按照cortana(小娜)的提示一步...

    windows11 2022-11-13
  • 羅技g304dpi燈顏色代表什么:1、藍色:這種情況是正常工作的顯示,如果說是常亮或者閃爍,那都沒有問題這是在正常工作呢。2、紅色:如果說是紅燈閃爍的話那就是 ......

    硬件知識 2023-03-16
  • 答:在3DMark壓力測試當中,顯卡需要超高97%才能夠算合格,證明顯卡的穩定性是過關的。 1、一般的默認情況下在2500~3000分就算很正常的了。 2、分數越高說明顯卡 ......

    軟件教程 2023-06-01
  • 1、先打開機頂盒進入主界面,并且使用遙控器打開設置。 2、然后選擇“賬號與安全”,并且進入。 3、最后往下面翻就可以看到“ADB調試”的選項,直接開啟就行了 ......

    軟件教程 2023-06-01
  • 相信有非常多使用過筆記本的用戶都聽說過獨顯直連這個詞,但很多用戶并不了解獨顯直連是什么,又有什么用處,那么下面就和小編一起來看看什么是獨顯直連和開啟這 ......

    其它 2022-12-15
  • 答:中高端水平 i513500hx在處理器當中是處于一個中高端的水平。 i513500hx是第十一代酷睿處理器系列的一員,基礎頻率為2.4GHz,表現十分的不錯。 i513500hx介 ......

    硬件知識 2023-04-27
  • win11系統開機總是自動登錄OneDrive如何關閉?win11系統開機的時候,會自動啟動OneDrive,不想要啟動,該怎么操作呢?下面我們就來看看詳細的教程。 在OneDrive界面點小齒輪按鈕,下拉菜單中點【設置】。 單擊【...

    windows11 2022-11-15
  • 1、首先確認手機型號是否支持無線充電功能,(可以在品牌官網找到手機信息查看)2、查看充電板的指示燈是否亮起。指示燈不亮檢查充電器、數據線、電源之間連接是 ......

    硬件知識 2023-03-10
  • 背景 有時候我們需要獲取文件的創建時間。 例如: 我在研究 《xtrabackup 原理圖》的時候,想通過觀察確認 xtrabackup_log 是最早創建 并且是 最晚保存的 ......

    服務器 2022-10-17

熱門排行

    最近更新

      返回頂部
      主站蜘蛛池模板: 伊人丁香 | 人人狠狠综合久久亚洲88 | 成人午夜爽爽爽免费视频 | 国产精品日韩 | 视色4se成人午夜精品 | 干综合网 | 国产精品欧美日韩精品 | 欧美日韩中文字幕在线视频 | 日韩欧美二区 | 亚洲一区二区三区久久 | 亚洲综合一区二区不卡 | 99久久亚洲综合精品网站 | 久久国产精品佐山爱 | 69男女囗交动态图视频 | 亚洲天堂h| 国产主播啪啪 | 色视频在线观看 | 免费高清欧美一区二区视频 | 91亚洲精品福利在线播放 | 韩日视频在线观看 | 狠狠干中文字幕 | 婷婷黄色片 | 午夜视频免费在线观看 | 一区二区三区日韩精品 | 国产精品4p露脸在线播放 | 成人禁啪啪网站 | 亚洲婷婷在线视频 | 国产精品一区二区四区 | 中国护士一级毛片免费版本 | 91www永久在线精品果冻传媒 | 欧美日韩亚洲另类人人澡 | 亚洲黄色在线观看视频 | 91精品国产三级在线观看 | 奇米狠狠干 | 欧美三级蜜桃2在线观看 | 成人黄页网站免费观看大全 | 久久91精品国产91久久麻豆 | 国产在线视频精品视频免费看 | 一级做a爰片 | 日本黄网址 | 四虎永久免费鲁大师 |