麻豆成人91精品二区三区,国产91在线播放,加勒比无码专区中文字幕,欧美黑人XXXX高潮猛交

×

Nginx、Apache的工作原理以及Nginx為何比Apache高效

  • 作者:新網(wǎng)
  • 來(lái)源:新網(wǎng)
  • 瀏覽:100
  • 2018-05-02 09:20:55

眾所周知Nginx在處理大并發(fā)靜態(tài)請(qǐng)求方面,效率明顯高于httpd,甚至能輕松解決C10K問(wèn)題。在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來(lái)使用。根據(jù)我的測(cè)試結(jié)果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3萬(wàn)以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。 一般來(lái)說(shuō),4GB內(nèi)存的服務(wù)器+Apache(prefork模式)一般只能處理3000個(gè)并發(fā)連接,因?yàn)樗鼈儗⒄加?GB以上的內(nèi)存,還得為系統(tǒng)

 眾所周知Nginx在處理大并發(fā)靜態(tài)請(qǐng)求方面,效率明顯高于httpd,甚至能輕松解決C10K問(wèn)題。在高并發(fā)連接的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品。Nginx同時(shí)也可以作為7層負(fù)載均衡服務(wù)器來(lái)使用。根據(jù)我的測(cè)試結(jié)果,Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 可以承受3萬(wàn)以上的并發(fā)連接數(shù),相當(dāng)于同等環(huán)境下Apache的10倍。

 
timg.jpg
一般來(lái)說(shuō),4GB內(nèi)存的服務(wù)器+Apache(prefork模式)一般只能處理3000個(gè)并發(fā)連接,因?yàn)樗鼈儗⒄加?GB以上的內(nèi)存,還得為系統(tǒng)預(yù)留1GB的內(nèi)存。我曾經(jīng)就有兩臺(tái)Apache服務(wù)器,因?yàn)樵谂渲梦募性O(shè)置的MaxClients為4000,當(dāng)Apache并發(fā)連接數(shù)達(dá)到3800時(shí),導(dǎo)致服務(wù)器內(nèi)存和Swap空間用滿(mǎn)而崩潰。
 
而這臺(tái) Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服務(wù)器在3萬(wàn)并發(fā)連接下,開(kāi)啟的10個(gè)Nginx進(jìn)程消耗150M內(nèi)存(15M*10=150M),開(kāi)啟的64個(gè)php-cgi進(jìn)程消耗1280M內(nèi)存(20M*64=1280M),加上系統(tǒng)自身消耗的內(nèi)存,總共消耗不到2GB內(nèi)存。如果服務(wù)器內(nèi)存較小,完全可以只開(kāi)啟25個(gè)php-cgi進(jìn)程,這樣php-cgi消耗的總內(nèi)存數(shù)才500M。
 
在3萬(wàn)并發(fā)連接下,訪問(wèn)Nginx 0.7.14 + PHP 5.2.6 (FastCGI) 服務(wù)器的PHP程序,仍然速度飛快。為什么Nginx在處理高并發(fā)方面要優(yōu)于httpd,我們先從兩種web服務(wù)器的工作原理以及工作模式說(shuō)起。
 
apache三種工作模式
 
我們都知道Apache有三種工作模塊,分別為prefork、worker、event。
 
prefork:多進(jìn)程,每個(gè)請(qǐng)求用一個(gè)進(jìn)程響應(yīng),這個(gè)過(guò)程會(huì)用到select機(jī)制來(lái)通知。
 
worker:多線程,一個(gè)進(jìn)程可以生成多個(gè)線程,每個(gè)線程響應(yīng)一個(gè)請(qǐng)求,但通知機(jī)制還是select不過(guò)可以接受更多的請(qǐng)求。
 
event:基于異步I/O模型,一個(gè)進(jìn)程或線程,每個(gè)進(jìn)程或線程響應(yīng)多個(gè)用戶(hù)請(qǐng)求,它是基于事件驅(qū)動(dòng)(也就是epoll機(jī)制)實(shí)現(xiàn)的。
 
4.2 prefork的工作原理
 
如果不用“--with-mpm”顯式指定某種MPM,prefork就是Unix平臺(tái)上缺省的MPM.它所采用的預(yù)派生子進(jìn)程方式也是 Apache1.3中采用的模式。prefork本身并沒(méi)有使用到線程,2.0版使用它是為了與1.3版保持兼容性;另一方面,prefork用單獨(dú)的子進(jìn)程來(lái)處理不同的請(qǐng)求,進(jìn)程之間是彼此獨(dú)立的,這也使其成為最穩(wěn)定的MPM之一。
 
4.3 worker的工作原理
 
相對(duì)于prefork,worker是2.0版中全新的支持多線程和多進(jìn)程混合模型的MPM。由于使用線程來(lái)處理,所以可以處理相對(duì)海量的請(qǐng)求,而系統(tǒng)資源的開(kāi)銷(xiāo)要小于基于進(jìn)程的服務(wù)器。但是,worker也使用了多進(jìn)程,每個(gè)進(jìn)程又生成多個(gè)線程,以獲得基于進(jìn)程服務(wù)器的穩(wěn)定性,這種MPM的工作方 式將是Apache2.0的發(fā)展趨勢(shì)。
 
4.4 event 基于事件機(jī)制的特性
 
一個(gè)進(jìn)程響應(yīng)多個(gè)用戶(hù)請(qǐng)求,利用callback機(jī)制,讓套接字復(fù)用,請(qǐng)求過(guò)來(lái)后進(jìn)程并不處理請(qǐng)求,而是直接交由其他機(jī)制來(lái)處理,通過(guò)epoll機(jī)制來(lái)通知請(qǐng)求是否完成;在這個(gè)過(guò)程中,進(jìn)程本身一直處于空閑狀態(tài),可以一直接收用戶(hù)請(qǐng)求。可以實(shí)現(xiàn)一個(gè)進(jìn)程程響應(yīng)多個(gè)用戶(hù)請(qǐng)求。支持持海量并發(fā)連接數(shù),消耗更少的資源。
 
如何提高Web服務(wù)器的并發(fā)連接處理能力
 
有幾個(gè)基本條件:
 
1.基于線程,即一個(gè)進(jìn)程生成多個(gè)線程,每個(gè)線程響應(yīng)用戶(hù)的每個(gè)請(qǐng)求。
 
2.基于事件的模型,一個(gè)進(jìn)程處理多個(gè)請(qǐng)求,并且通過(guò)epoll機(jī)制來(lái)通知用戶(hù)請(qǐng)求完成。
 
3.基于磁盤(pán)的AIO(異步I/O)
 
4.支持mmap內(nèi)存映射,mmap傳統(tǒng)的web服務(wù)器,進(jìn)行頁(yè)面輸入時(shí),都是將磁盤(pán)的頁(yè)面先輸入到內(nèi)核緩存中,再由內(nèi)核緩存中復(fù)制一份到web服務(wù)器上,mmap機(jī)制就是讓內(nèi)核緩存與磁盤(pán)進(jìn)行映射,web服務(wù)器,直接復(fù)制頁(yè)面內(nèi)容即可。不需要先把磁盤(pán)的上的頁(yè)面先輸入到內(nèi)核緩存去。
 
剛好,Nginx 支持以上所有特性。所以Nginx官網(wǎng)上說(shuō),Nginx支持50000并發(fā),是有依據(jù)的。
 
Nginx優(yōu)異之處
 
傳統(tǒng)上基于進(jìn)程或線程模型架構(gòu)的web服務(wù)通過(guò)每進(jìn)程或每線程處理并發(fā)連接請(qǐng)求,這勢(shì)必會(huì)在網(wǎng)絡(luò)和I/O操作時(shí)產(chǎn)生阻塞,其另一個(gè)必然結(jié)果則是對(duì)內(nèi)存或CPU的利用率低下。生成一個(gè)新的進(jìn)程/線程需要事先備好其運(yùn)行時(shí)環(huán)境,這包括為其分配堆內(nèi)存和棧內(nèi)存,以及為其創(chuàng)建新的執(zhí)行上下文等。這些操作都需要占用CPU,而且過(guò)多的進(jìn)程/線程還會(huì)帶來(lái)線程抖動(dòng)或頻繁的上下文切換,系統(tǒng)性能也會(huì)由此進(jìn)一步下降。另一種高性能web服務(wù)器/web服務(wù)器反向代理:Nginx(Engine X),nginx的主要著眼點(diǎn)就是其高性能以及對(duì)物理計(jì)算資源的高密度利用,因此其采用了不同的架構(gòu)模型。受啟發(fā)于多種操作系統(tǒng)設(shè)計(jì)中基于“事件”的高級(jí)處理機(jī)制,nginx采用了模塊化、事件驅(qū)動(dòng)、異步、單線程及非阻塞的架構(gòu),并大量采用了多路復(fù)用及事件通知機(jī)制。在nginx中,連接請(qǐng)求由為數(shù)不多的幾個(gè)僅包含一個(gè)線程的進(jìn)程worker以高效的回環(huán)(run-loop)機(jī)制進(jìn)行處理,而每個(gè)worker可以并行處理數(shù)千個(gè)的并發(fā)連接及請(qǐng)求。
 
Nginx 工作原理
 
Nginx會(huì)按需同時(shí)運(yùn)行多個(gè)進(jìn)程:一個(gè)主進(jìn)程(master)和幾個(gè)工作進(jìn)程(worker),配置了緩存時(shí)還會(huì)有緩存加載器進(jìn)程(cache loader)和緩存管理器進(jìn)程(cache manager)等。所有進(jìn)程均是僅含有一個(gè)線程,并主要通過(guò)“共享內(nèi)存”的機(jī)制實(shí)現(xiàn)進(jìn)程間通信。主進(jìn)程以root用戶(hù)身份運(yùn)行,而worker、cache loader和cache manager均應(yīng)以非特權(quán)用戶(hù)身份運(yùn)行。
 
在高連接并發(fā)的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品
 
Nginx 安裝非常的簡(jiǎn)單 , 配置文件非常簡(jiǎn)潔(還能夠支持perl語(yǔ)法),Bugs 非常少的服務(wù)器: Nginx 啟動(dòng)特別容易, 并且?guī)缀蹩梢宰龅?*24不間斷運(yùn)行,即使運(yùn)行數(shù)個(gè)月也不需要重新啟動(dòng). 你還能夠 不間斷服務(wù)的情況下進(jìn)行軟件版本的升級(jí) 。
 
Nginx 的誕生主要解決C10K問(wèn)題
 
最后我們從各自使用的多路復(fù)用IO模型來(lái)分析:
 
select模型:(apache使用,由于受模塊等限制,用的不多)
 
單個(gè)進(jìn)程能夠 監(jiān)視的文件描述符的數(shù)量存在最大限制
 
select()所維護(hù)的 存儲(chǔ)大量文件描述符的數(shù)據(jù)結(jié)構(gòu) ,隨著文件描述符數(shù)量的增長(zhǎng),其在用戶(hù)態(tài)和內(nèi)核的地址空間的復(fù)制所引發(fā)的開(kāi)銷(xiāo)也會(huì)線性增長(zhǎng)
 
由于網(wǎng)絡(luò)響應(yīng)時(shí)間的延遲使得大量TCP連接處于非活躍狀態(tài),但調(diào)用select()還是會(huì)對(duì) 所有的socket進(jìn)行一次線性?huà)呙?,會(huì)造成一定的開(kāi)銷(xiāo)
 
poll:poll是unix沿用select自己重新實(shí)現(xiàn)了一遍,唯一解決的問(wèn)題是poll 沒(méi)有最大文件描述符數(shù)量的限制
 
epoll模型:(nginx使用)
 
epoll帶來(lái)了兩個(gè)優(yōu)勢(shì),大幅度提升了性能:
 
基于事件的就緒通知方式 ,select/poll方式,進(jìn)程只有在調(diào)用一定的方法后,內(nèi)核才會(huì)對(duì)所有監(jiān)視的文件描述符進(jìn)行掃描,而epoll事件通過(guò)epoll_ctl()注冊(cè)一個(gè)文件描述符,一旦某個(gè)文件描述符就緒時(shí),內(nèi)核會(huì)采用類(lèi)似call back的回調(diào)機(jī)制,迅速激活這個(gè)文件描述符,epoll_wait()便會(huì)得到通知
 
調(diào)用一次epoll_wait()獲得就緒文件描述符時(shí),返回的并不是實(shí)際的描述符,而是一個(gè)代表就緒描述符數(shù)量的值,拿到這些值去epoll指定的一個(gè)數(shù)組中依次取得相應(yīng)數(shù)量的文件描述符即可,這里使用內(nèi)存映射(mmap)技術(shù), 避免了復(fù)制大量文件描述符帶來(lái)的開(kāi)銷(xiāo)
 
當(dāng)然epoll也有一定的局限性, epoll只有Linux2.6才有實(shí)現(xiàn) ,而其他平臺(tái)都沒(méi)有,這和apache這種優(yōu)秀的跨平臺(tái)服務(wù)器,顯然是有些背道而馳了。
 
簡(jiǎn)單來(lái)說(shuō)epoll是select的升級(jí)版,單進(jìn)程管理的文件描述符沒(méi)有最大限制。但epoll只有linux平臺(tái)可使用。作為跨平臺(tái)的Apache沒(méi)有使用。
 
以上就是我們的今日分享,希望對(duì)您有所幫助。
 

免責(zé)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶(hù)自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),也不承認(rèn)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)本社區(qū)中有涉嫌抄襲的內(nèi)容,請(qǐng)發(fā)送郵件至:operations@xinnet.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

免費(fèi)咨詢(xún)獲取折扣

Loading
在线观看日韩色| 亚洲色依赖| 社会| 国产午夜无码视频免费网站| 成人特黄A级毛片免费| 久久久久影| 99精品无码人妻| 成人性生交大片免费看r???| 午夜成人无码福利免费视频| 国产亚洲一本大道| 精品国产亚洲精品| 欧美日韩亚洲天堂区| 波多野结衣1区| 亚洲色图激情文学| 五月亚洲伊人| xxxxx日韩高清| 亚洲一区二区三区波多野结衣| 亚洲一区二区综合| 欧美诱惑三s| 日韩精品人妻夜夜骚| 东京热国产精品无码专区免费| 日本色区| 欧美色图亚洲一区| 成人 站 在线 污| 无码中出国产| 日本ll码是xl码| 色诱久久av| 亚洲尤物中文字幕| 天堂最新无码| 触摸熟女逼一区二区| 狠狠干2021| 日韩人妻无码一区2区3区| 亚洲国产伊人| www7777人| 啊啊啊想要舒服视频| 亚洲中文字幕伊人| 亚洲午夜福利视频| 在线观看无码av网站永久| 黄色欧美大片在线观看| 视频无码免费播放| 精品欧美乱码|