0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

為什么Nginx可以支持高并發(fā)

阿銘linux ? 來源:阿銘linux ? 2023-02-13 10:48 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

結論

先說答案,Nginx之所以支持高并發(fā),是因為它是基于epoll的異步及非阻塞的事件驅(qū)動模型。 在這個模型下,Nginx服務端可以同一時間接收成千上萬個客戶端請求而不阻塞。這是因為Nginx會把一個一個的客戶端請求注冊成事件給到系統(tǒng)內(nèi)核,而這個事件管理器完全由系統(tǒng)內(nèi)核管理,Nginx只負責注冊和接收通知。下面再來詳細聊聊具體原因。

Nginx架構

Nginx啟動時,先啟動一個master進程,然后再根據(jù)配置文件里定義的參數(shù)來啟動對應數(shù)量的worker進程。

79cd42ac-ab48-11ed-bfe3-dac502259ad0.png

所以,Nginx是多進程模式,多個進程之間不會相互影響,多個worker進程還可以配置成使用不同的CPU來工作,從而提高了Nginx處理請求速度。

Nginx的異步非阻塞機制

首先理解同步和異步的概念,這兩個概念是從客戶端與服務端通信交互方式來說。

同步,指服務端接收到客戶端請求后,必須處理完該請求后(發(fā)送處理結果給客戶端),才會接收客戶端發(fā)送來的下一個請求。

異步,指服務端還沒有處理完客戶端請求(沒有發(fā)送處理結果給客戶端),就已經(jīng)接收下一個客戶端發(fā)來的請求了。

再來理解阻塞和非阻塞的概念。這兩個概念是從服務器內(nèi)部處理請求的方式來說的。

阻塞,指服務器接收到請求后,如果遇到IO阻塞,當前線程會被掛起,直到IO完成后喚醒當前線程,當前線程期間不會去處理其他事情。

非阻塞,指服務器接收到請求后,如果遇到IO阻塞,當前線程不會掛起,而是會立即返回去執(zhí)行下一個調(diào)用。

同步與異步,重點在于消息通知的方式。阻塞與非阻塞,重點在于等消息時候的行為。

事件驅(qū)動模型

上面提到的異步非阻塞機制,Nginx是通過基于事件的驅(qū)動模型來實現(xiàn)的。這個模型下,客戶端發(fā)起的所有請求在服務端都會被標記為一個事件,Nginx會把這些事件收集到“事件收集器”里,然后再把這些事件交給內(nèi)核去處理。

79eac494-ab48-11ed-bfe3-dac502259ad0.png

對于Nginx服務器來說,客戶端A的請求連接到服務端時,服務端進程(Nginx worker process)會處理該請求,此進程在沒有返回給客戶端A結果時,它又去處理了客戶端B的請求。 服務端把客戶端A以及客戶端B發(fā)來的請求作為事件交給了“事件收集器”,而“事件收集器”再把收集到的事件交由“事件發(fā)送器”發(fā)送給“事件處理器”進行處理。 最后“事件處理器”處理完該事件后,通知服務端進程,服務端進程再把結果返回給客戶端A、客戶端B。 在這個過程中,服務端進程做的事情屬于用戶級別的,而事件處理這部分工作屬于內(nèi)核級別的。 也就是說這個事件驅(qū)動模型是需要操作系統(tǒng)內(nèi)核來作為支撐的。

Nginx支持的事件驅(qū)動模型

Nginx支持的事件驅(qū)動模型有:select, poll, epoll, rtsig, kqueue, /dev/poll, eventport等,最常用的是前三種。

Select模型:首先會創(chuàng)建所關注事件的描述符集合。會分別創(chuàng)建讀(Read)事件、寫(Write)事件、異常發(fā)生(Exception)事件三類描述符集合來收集三類描述符。然后調(diào)用底層提供的select()函數(shù),等待事件發(fā)生。最后輪詢所有事件描述符集合中的每一個描述符,檢查是否有相應的事件發(fā)生,然后處理事件。

Poll模型:與select的基本實現(xiàn)方式相同,只不過創(chuàng)建關注的描述符集合時,不分成三個集合,而是一個集合包括所有描述符。

Epoll模型:當描述符比較多時,遍歷描述符集合、然后查找每個描述符是否有相應事件發(fā)生這一過程會效率較低。Epoll選擇將描述符列表的管理交給內(nèi)核復制,一旦有事件發(fā)生,內(nèi)核會將有事件發(fā)生的描述符列表通知給進程,這樣避免了應用程序輪詢整個描述符列表。Epoll會通過相關調(diào)用,通知內(nèi)核創(chuàng)建一個N個描述符的事件列表,然后給這些描述符設置所關注的事件,并把他添加到內(nèi)核的事件列表中,在編碼過程中也可以通過相關調(diào)用對事件列表中的描述符進行動態(tài)地刪除和修改。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 服務器
    +關注

    關注

    13

    文章

    9770

    瀏覽量

    87767
  • 架構
    +關注

    關注

    1

    文章

    528

    瀏覽量

    25951
  • MASTER
    +關注

    關注

    0

    文章

    108

    瀏覽量

    11706
  • 服務端
    +關注

    關注

    0

    文章

    68

    瀏覽量

    7226
  • nginx
    +關注

    關注

    0

    文章

    169

    瀏覽量

    12568

原文標題:為什么Nginx可以支持高并發(fā)

文章出處:【微信號:aming_linux,微信公眾號:阿銘linux】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 0人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    解析keepalived+nginx實現(xiàn)可用方案技術

    之前講了Nginx 如何實現(xiàn)負載均衡以及如何實現(xiàn)動靜分離,實現(xiàn)系統(tǒng)的分布式部署,提高系統(tǒng)的并發(fā)性能。但是,有個問題:如果Nginx 系統(tǒng)掛了,整個系統(tǒng)就都不可用了。Nginx 處于整個
    的頭像 發(fā)表于 09-30 15:52 ?3999次閱讀
    解析keepalived+<b class='flag-5'>nginx</b>實現(xiàn)<b class='flag-5'>高</b>可用方案技術

    從服務端視角看并發(fā)難題

    `所謂服務器大流量并發(fā)指的是:在同時或極短時間內(nèi),有大量的請求到達服務端,每個請求都需要服務端耗費資源進行處理,并做出相應的反饋。 從服務端視角看并發(fā)服務端處理請求需要耗費服務端的
    發(fā)表于 11-02 15:11

    PHP開發(fā)中,如何處理負載、并發(fā)?

    對網(wǎng)絡依賴比較大。可以承擔負載壓力且穩(wěn)定,在硬件不差的情況下一般能支撐幾萬次的并發(fā)量,負載度比LVS相對小些。Nginx可以通過端口檢測到
    發(fā)表于 07-03 10:33

    16nginx+keepalived +zuul如何實現(xiàn)可用及負載均衡

    學習筆記微服務-16 nginx+keepalived +zuul 實現(xiàn)可用及負載均衡
    發(fā)表于 05-22 10:16

    Nginx支持更多的模塊

    商業(yè)版Nginx的擴展性得到了很大的提高,之前旨在開源服務器上支持的擴展模塊,現(xiàn)在的商業(yè)版也得到了支持。 Nginx的產(chǎn)品經(jīng)理說,昨天發(fā)布的Ngin
    發(fā)表于 10-11 11:25 ?0次下載

    一文讀懂Nginx、Apache工作原理

    并發(fā)連接的情況下,Nginx是Apache服務器不錯的替代品。Nginx同時也可以作為7層負載均衡服務器來使用。根據(jù)我的測試結果,
    發(fā)表于 04-26 11:33 ?2610次閱讀

    Nginx的詳細知識點講解

    Nginx是一個高性能的HTTP和反向代理服務器,特點是占用內(nèi)存少,并發(fā)能力強,事實上nginx并發(fā)能力確實在同類型的網(wǎng)頁服務器中表現(xiàn)較好 ngi
    的頭像 發(fā)表于 12-26 10:25 ?2846次閱讀
    <b class='flag-5'>Nginx</b>的詳細知識點講解

    如何徹底搞懂Nginx知識網(wǎng)結構

    ,性能是其最重要的要求,十分注重效率,有報告nginx支持高達50000個并發(fā)連接數(shù) 1.1反向代理 正向代理 正向代理:局域網(wǎng)中的電腦用戶想要直接訪問網(wǎng)絡是不可行的,只能通過代理服務器來訪問,這種代理服務就被稱為正向代理。
    的頭像 發(fā)表于 05-03 14:15 ?1854次閱讀
    如何徹底搞懂<b class='flag-5'>Nginx</b>知識網(wǎng)結構

    聊聊Nginx作為負載均衡器它支持的算法都有哪些?

    Nginx作為一款最流行WEB服務器軟件,同時也是一款反向代理和負載均衡軟件。毫不夸張地說,Nginx在負載均衡領域絕對是老大地位,這得益于它的并發(fā)和穩(wěn)定性
    的頭像 發(fā)表于 02-14 17:50 ?977次閱讀

    搭建Keepalived+Lvs+Nginx可用集群負載均衡

    Server)實現(xiàn)可用負載均衡 附:LVS的負載均衡算法 八、搭建Keepalived+Lvs+Nginx可用集群負載均衡 一、Nginx安裝 1、去官網(wǎng)http://
    的頭像 發(fā)表于 06-25 15:39 ?3642次閱讀
    搭建Keepalived+Lvs+<b class='flag-5'>Nginx</b><b class='flag-5'>高</b>可用集群負載均衡

    Nginx的特點和作用 Nginx常用命令和核心配置

    Nginx 是開源、高性能、可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟
    的頭像 發(fā)表于 09-01 09:53 ?1123次閱讀
    <b class='flag-5'>Nginx</b>的特點和作用 <b class='flag-5'>Nginx</b>常用命令和核心配置

    Nginx目錄結構有哪些

    什么是Nginx? Nginx是一個 輕量級/高性能的反向代理Web服務器,他實現(xiàn)非常高效的反向代理、負載平衡,他可以處理2-3萬并發(fā)連接數(shù),官方監(jiān)測能
    的頭像 發(fā)表于 11-11 11:27 ?932次閱讀
    <b class='flag-5'>Nginx</b>目錄結構有哪些

    Nginx 如何實現(xiàn)高性能低消耗

    Nginx 是一個輕量級的HTTP 服務程序,相比其他服務器程序如Apache,Nginx占用內(nèi)存少,穩(wěn)定性并發(fā)處理能力強。同時Nginx
    的頭像 發(fā)表于 11-11 11:31 ?804次閱讀
    <b class='flag-5'>Nginx</b> 如何實現(xiàn)高性能低消耗

    確保網(wǎng)站無縫運行:Keepalived可用與Nginx集成實戰(zhàn)

    的,用來管理并監(jiān)控LVS集群系統(tǒng)中各個服務節(jié)點的狀態(tài),后來又加入了可以實現(xiàn)可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx
    的頭像 發(fā)表于 11-27 09:08 ?1155次閱讀
    確保網(wǎng)站無縫運行:Keepalived<b class='flag-5'>高</b>可用與<b class='flag-5'>Nginx</b>集成實戰(zhàn)

    Nginx配置終極指南

    Nginx 是開源、高性能、可靠的 Web 和反向代理服務器,而且支持熱部署,幾乎可以做到 7 * 24 小時不間斷運行,即使運行幾個月也不需要重新啟動,還能在不間斷服務的情況下對軟
    的頭像 發(fā)表于 06-18 15:56 ?301次閱讀
    <b class='flag-5'>Nginx</b>配置終極指南

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品