0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

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

兩種web服務(wù)器的工作原理以及工作模式

馬哥Linux運(yùn)維 ? 來源:馬哥Linux運(yùn)維 ? 2023-04-14 11:28 ? 次閱讀

Nginx才短短幾年,就拿下了Web服務(wù)器大壁江山,眾所周知,Nginx在處理大并發(fā)靜態(tài)請求方面,效率明顯高于Httpd,甚至能輕松解決C10K問題。

在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來使用。根據(jù)我的測試結(jié)果,Nginx + PHP(FastCGI) 可以承受3萬以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。

一般來說,4GB內(nèi)存的服務(wù)器+Apache(prefork模式)一般只能處理3000個并發(fā)連接,因?yàn)樗鼈儗⒄加?GB以上的內(nèi)存,還得為系統(tǒng)預(yù)留1GB的內(nèi)存。我曾經(jīng)就有兩臺Apache服務(wù)器,因?yàn)樵谂渲梦募性O(shè)置的MaxClients為4000,當(dāng)Apache并發(fā)連接數(shù)達(dá)到3800時(shí),導(dǎo)致服務(wù)器內(nèi)存和Swap空間用滿而崩潰。

而這臺 Nginx + PHP(FastCGI) 服務(wù)器在3萬并發(fā)連接下,開啟的10個Nginx進(jìn)程消耗150M內(nèi)存(15M10=150M),開啟的64個php-cgi進(jìn)程消耗1280M內(nèi)存(20M64=1280M),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB內(nèi)存。如果服務(wù)器內(nèi)存較小,完全可以只開啟25個php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500M。

在3萬并發(fā)連接下,訪問Nginx+ PHP(FastCGI) 服務(wù)器的PHP程序,仍然速度飛快。

為什么Nginx在處理高并發(fā)方面要優(yōu)于httpd,我們先從兩種web服務(wù)器的工作原理以及工作模式說起。

一、Apache三種工作模式

我們都知道Apache有三種工作模塊,分別為:prefork、worker、event。

prefork:多進(jìn)程,每個請求用一個進(jìn)程響應(yīng),這個過程會用到select機(jī)制來通知。

worker:多線程,一個進(jìn)程可以生成多個線程,每個線程響應(yīng)一個請求,但通知機(jī)制還是select不過可以接受更多的請求。

event:基于異步I/O模型,一個進(jìn)程或線程,每個進(jìn)程或線程響應(yīng)多個用戶請求,它是基于事件驅(qū)動(也就是epoll機(jī)制)實(shí)現(xiàn)的。

1、prefork的工作原理

如果不用“–with-mpm”顯式指定某種MPM,prefork就是Unix平臺上缺省的MPM。它所采用的預(yù)派生子進(jìn)程方式也是 Apache1.3中采用的模式。prefork本身并沒有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨(dú)的子進(jìn)程來處理不同的請求,進(jìn)程之間是彼此獨(dú)立的,這也使其成為最穩(wěn)定的MPM之一。

2、worker的工作原理

相對于prefork,worker是2.0版中全新的支持多線程和多進(jìn)程混合模型的MPM。由于使用線程來處理,所以可以處理相對海量的請求,而系統(tǒng)資源的開銷要小于基于進(jìn)程的服務(wù)器。但是,worker也使用了多進(jìn)程,每個進(jìn)程又生成多個線程,以獲得基于進(jìn)程服務(wù)器的穩(wěn)定性,這種MPM的工作方 式將是Apache2.0的發(fā)展趨勢。

3、event 基于事件機(jī)制的特性

一個進(jìn)程響應(yīng)多個用戶請求,利用callback機(jī)制,讓套接字復(fù)用,請求過來后進(jìn)程并不處理請求,而是直接交由其他機(jī)制來處理,通過epoll機(jī)制來通知請求是否完成;在這個過程中,進(jìn)程本身一直處于空閑狀態(tài),可以一直接收用戶請求??梢詫?shí)現(xiàn)一個進(jìn)程程響應(yīng)多個用戶請求。支持持海量并發(fā)連接數(shù),消耗更少的資源。

二、如何提高Web服務(wù)器的并發(fā)連接處理能力

有幾個基本條件:

基于線程,即一個進(jìn)程生成多個線程,每個線程響應(yīng)用戶的每個請求。

基于事件的模型,一個進(jìn)程處理多個請求,并且通過epoll機(jī)制來通知用戶請求完成。

基于磁盤的AIO(異步I/O)

支持mmap內(nèi)存映射,mmap傳統(tǒng)的web服務(wù)器,進(jìn)行頁面輸入時(shí),都是將磁盤的頁面先輸入到內(nèi)核緩存中,再由內(nèi)核緩存中復(fù)制一份到web服務(wù)器上,mmap機(jī)制就是讓內(nèi)核緩存與磁盤進(jìn)行映射,web服務(wù)器,直接復(fù)制頁面內(nèi)容即可。不需要先把磁盤的上的頁面先輸入到內(nèi)核緩存去。

剛好,Nginx 支持以上所有特性。所以Nginx官網(wǎng)上說,Nginx支持50000并發(fā),是有依據(jù)的。

三、Nginx優(yōu)異之處

傳統(tǒng)上基于進(jìn)程或線程模型架構(gòu)的Web服務(wù)通過每進(jìn)程或每線程處理并發(fā)連接請求,這勢必會在網(wǎng)絡(luò)和I/O操作時(shí)產(chǎn)生阻塞,其另一個必然結(jié)果則是對內(nèi)存或CPU的利用率低下。

生成一個新的進(jìn)程/線程需要事先備好其運(yùn)行時(shí)環(huán)境,這包括為其分配堆內(nèi)存和棧內(nèi)存,以及為其創(chuàng)建新的執(zhí)行上下文等。這些操作都需要占用CPU,而且過多的進(jìn)程/線程還會帶來線程抖動或頻繁的上下文切換,系統(tǒng)性能也會由此進(jìn)一步下降。

另一種高性能web服務(wù)器/Web服務(wù)器反向代理:Nginx,Nginx的主要著眼點(diǎn)就是其高性能以及對物理計(jì)算資源的高密度利用,因此其采用了不同的架構(gòu)模型。受啟發(fā)于多種操作系統(tǒng)設(shè)計(jì)中基于“事件”的高級處理機(jī)制,Nginx采用了模塊化、事件驅(qū)動、異步、單線程及非阻塞的架構(gòu),并大量采用了多路復(fù)用及事件通知機(jī)制。

在Nginx中,連接請求由為數(shù)不多的幾個僅包含一個線程的進(jìn)程Worker以高效的回環(huán)(run-loop)機(jī)制進(jìn)行處理,而每個Worker可以并行處理數(shù)千個的并發(fā)連接及請求。

四、Nginx 工作原理

Nginx會按需同時(shí)運(yùn)行多個進(jìn)程:一個主進(jìn)程(master)和幾個工作進(jìn)程(worker),配置了緩存時(shí)還會有緩存加載器進(jìn)程(cache loader)和緩存管理器進(jìn)程(cache manager)等。所有進(jìn)程均是僅含有一個線程,并主要通過“共享內(nèi)存”的機(jī)制實(shí)現(xiàn)進(jìn)程間通信。主進(jìn)程以root用戶身份運(yùn)行,而worker、cache loader和cache manager均應(yīng)以非特權(quán)用戶身份運(yùn)行。

在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯的替代品。

Nginx 安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法),Bugs 非常少的服務(wù)器: Nginx 啟動特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個月也不需要重新啟動. 你還能夠 不間斷服務(wù)的情況下進(jìn)行軟件版本的升級 。

五、Nginx 的誕生主要解決C10K問題

最后我們從各自使用的多路復(fù)用IO模型來分析:

1、select模型:(apache使用,由于受模塊等限制,用的不多);

單個進(jìn)程能夠 監(jiān)視的文件描述符的數(shù)量存在最大限制;

select()所維護(hù)的 存儲大量文件描述符的數(shù)據(jù)結(jié)構(gòu) ,隨著文件描述符數(shù)量的增長,其在用戶態(tài)和內(nèi)核的地址空間的復(fù)制所引發(fā)的開銷也會線性增長;

由于網(wǎng)絡(luò)響應(yīng)時(shí)間的延遲使得大量TCP連接處于非活躍狀態(tài),但調(diào)用select()還是會對 所有的socket進(jìn)行一次線性掃描 ,會造成一定的開銷;

2、poll:poll是unix沿用select自己重新實(shí)現(xiàn)了一遍,唯一解決的問題是poll 沒有最大文件描述符數(shù)量的限制;

3、epoll模型:(Nginx使用)

epoll帶來了兩個優(yōu)勢,大幅度提升了性能:

(1)基于事件的就緒通知方式 ,select/poll方式,進(jìn)程只有在調(diào)用一定的方法后,內(nèi)核才會對所有監(jiān)視的文件描述符進(jìn)行掃描,而epoll事件通過epoll_ctl()注冊一個文件描述符,一旦某個文件描述符就緒時(shí),內(nèi)核會采用類似call back的回調(diào)機(jī)制,迅速激活這個文件描述符,epoll_wait()便會得到通知

(2)調(diào)用一次epoll_wait()獲得就緒文件描述符時(shí),返回的并不是實(shí)際的描述符,而是一個代表就緒描述符數(shù)量的值,拿到這些值去epoll指定的一個數(shù)組中依次取得相應(yīng)數(shù)量的文件描述符即可,這里使用內(nèi)存映射(mmap)技術(shù), 避免了復(fù)制大量文件描述符帶來的開銷

(3)當(dāng)然epoll也有一定的局限性, epoll只有Linux2.6才有實(shí)現(xiàn) ,而其他平臺都沒有,這和apache這種優(yōu)秀的跨平臺服務(wù)器,顯然是有些背道而馳了。

(4)簡單來說epoll是select的升級版,單進(jìn)程管理的文件描述符沒有最大限制。但epoll只有l(wèi)inux平臺可使用。作為跨平臺的Apache沒有使用

審核編輯 :李倩

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

    關(guān)注

    12

    文章

    8979

    瀏覽量

    85100
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    277

    瀏覽量

    19903
  • Apache
    +關(guān)注

    關(guān)注

    0

    文章

    64

    瀏覽量

    12439
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    142

    瀏覽量

    12156

原文標(biāo)題:為什么 Nginx 比 Apache 更牛叉?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    請問怎樣去設(shè)計(jì)一嵌入式Web服務(wù)器系統(tǒng)?

    嵌入式Web服務(wù)器系統(tǒng)的工作原理是什么?怎樣去設(shè)計(jì)嵌入式Web服務(wù)器系統(tǒng)的硬件?怎樣去設(shè)計(jì)嵌入式Web
    發(fā)表于 06-02 07:11

    關(guān)于stm32服務(wù)器工作記錄

    最在做stm32 web服務(wù)器的東西,忙了一段時(shí)間終于弄完了,把這幾天關(guān)于stm32服務(wù)器工作記錄一下。剛接到這個任務(wù)的時(shí)候,不知道怎么下手,網(wǎng)上資料似乎不是很多,于是在下載了一個官
    發(fā)表于 08-04 09:35

    嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

    概況,工作原理,軟硬件設(shè)計(jì)及其在遠(yuǎn)程溫度監(jiān)控系統(tǒng)中的應(yīng)用作了一個較為系統(tǒng)的研究.首先介紹了嵌入式Web服務(wù)器的原理與應(yīng)用,然后針對嵌入式Web服務(wù)器
    發(fā)表于 11-09 08:41

    介紹嵌入式Web服務(wù)器工作原理

    嵌入式Web 服務(wù)器工作原理1、服務(wù)器軟件(BOA)始終在HTTP 端口守候客戶端的連接請求,當(dāng)客戶端向服務(wù)器發(fā)起一個連接請求后,客戶端和
    發(fā)表于 12-16 07:12

    簡單談?wù)?b class='flag-5'>兩種復(fù)位電路的工作原理

    單片機(jī)最小系統(tǒng),即單片機(jī)能正常工作的最簡單的電路。復(fù)位電路是單片機(jī)最小系統(tǒng)的組成部分之一。對于不同單片機(jī),復(fù)位方式有高電平復(fù)位和低電平復(fù)位,從而相對應(yīng)地就有兩種復(fù)位電路,高電平和低電平復(fù)位電路,本文以上電復(fù)位為例,簡單談?wù)勥@兩種
    發(fā)表于 01-17 08:52

    域名服務(wù)器工作原理

    域名服務(wù)器工作原理1. 引言 2. 域名 3. 分
    發(fā)表于 08-05 10:19 ?1903次閱讀

    網(wǎng)絡(luò)服務(wù)器,網(wǎng)絡(luò)服務(wù)器工作原理是什么?

    網(wǎng)絡(luò)服務(wù)器,網(wǎng)絡(luò)服務(wù)器工作原理是什么? 網(wǎng)絡(luò)服務(wù)器是指在網(wǎng)絡(luò)環(huán)境下運(yùn)行相應(yīng)的應(yīng)用軟件,為網(wǎng)上用戶提供共享信息資源和各種服
    發(fā)表于 03-22 11:22 ?1.5w次閱讀

    WEB服務(wù)器有哪幾種_web服務(wù)器工作原理

    如今的Web服務(wù)器有很多種,大家在做項(xiàng)目的時(shí)候根據(jù)自己的需求進(jìn)行靈活的選擇。下面小編就給大家分享一下目前都有哪些Web服務(wù)器。
    發(fā)表于 05-06 15:37 ?1.2w次閱讀
    <b class='flag-5'>WEB</b><b class='flag-5'>服務(wù)器</b>有哪幾種_<b class='flag-5'>web</b><b class='flag-5'>服務(wù)器</b>的<b class='flag-5'>工作原理</b>

    嵌入式web服務(wù)器系統(tǒng),嵌入式Web服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)

    概況,工作原理,軟硬件設(shè)計(jì)及其在遠(yuǎn)程溫度監(jiān)控系統(tǒng)中的應(yīng)用作了一個較為系統(tǒng)的研究.首先介紹了嵌入式Web服務(wù)器的原理與應(yīng)用,然后針對嵌入式Web服務(wù)器
    發(fā)表于 11-04 11:06 ?27次下載
    嵌入式<b class='flag-5'>web</b><b class='flag-5'>服務(wù)器</b>系統(tǒng),嵌入式<b class='flag-5'>Web</b><b class='flag-5'>服務(wù)器</b>的設(shè)計(jì)與實(shí)現(xiàn)

    獨(dú)立服務(wù)器的類型以及工作原理的介紹

    租用獨(dú)立服務(wù)器,您的網(wǎng)站的最佳性能得到保證,您不必?fù)?dān)心由于其高級備份系統(tǒng)而丟失敏感數(shù)據(jù)。如果你想知道如此強(qiáng)大的獨(dú)立服務(wù)器的類型和工作原理,那么這篇文章就是為你準(zhǔn)備的! 一、獨(dú)立服務(wù)器
    的頭像 發(fā)表于 03-25 17:12 ?1496次閱讀

    DHCP服務(wù)器工作原理及常見問題總結(jié)

    關(guān)于一些DHCP服務(wù)器工作原理、常見問題總結(jié)和虛擬機(jī)部署DHCP服務(wù)器時(shí)出現(xiàn)的問題
    的頭像 發(fā)表于 02-11 09:26 ?2371次閱讀

    PLC的兩種基本工作模式及掃描過程

    PLC有兩種基本的工作模式,即運(yùn)行(RUN)模式與停止(STOP)模式。在運(yùn)行模式,PLC通過反
    的頭像 發(fā)表于 07-03 16:52 ?4867次閱讀
    PLC的<b class='flag-5'>兩種</b>基本<b class='flag-5'>工作</b><b class='flag-5'>模式</b>及掃描過程

    高防服務(wù)器工作原理是什么?

    ,沒法正常提供服務(wù)。那么高防服務(wù)器工作原理是甚么? 高防服務(wù)器工作原理以下: 1、流量過濾和清洗: 高防
    的頭像 發(fā)表于 09-12 14:13 ?1069次閱讀

    高防美國云服務(wù)器工作原理是什么?

    高防美國云服務(wù)器工作原理主要基于強(qiáng)化的網(wǎng)絡(luò)防護(hù)措施和先進(jìn)的安全技術(shù)。那么高防美國云服務(wù)器工作原理是什么?Rak部落小編為您整理發(fā)布高防美國云服務(wù)
    的頭像 發(fā)表于 05-17 10:13 ?262次閱讀

    使用NS1串口服務(wù)器HTTP模式上傳服務(wù)器數(shù)據(jù)

    NS1的HTTP客戶端模式上傳服務(wù)器數(shù)據(jù)。一HTTP請求的格式在客戶機(jī)和服務(wù)器之間進(jìn)行請求-響應(yīng)時(shí),兩種最常被用到的方法是:GET和POST。GET:從指定的資源請求
    的頭像 發(fā)表于 08-30 12:36 ?253次閱讀
    使用NS1串口<b class='flag-5'>服務(wù)器</b>HTTP<b class='flag-5'>模式</b>上傳<b class='flag-5'>服務(wù)器</b>數(shù)據(jù)