新聞資訊  快訊  焦點  財經  政策  社會
互 聯 網   電商  金融  數據  計算  技巧
生活百科  科技  職場  健康  法律  汽車
手機百科  知識  軟件  修理  測評  微信
軟件技術  應用  系統  圖像  視頻  經驗
硬件技術  知識  技術  測評  選購  維修
網絡技術  硬件  軟件  設置  安全  技術
程序開發  語言  移動  數據  開源  百科
安全防護  資訊  黑客  木馬  病毒  移動
站長技術  搜索  SEO  推廣  媒體  移動
財經百科  股票  知識  理財  財務  金融
教育考試  育兒  小學  高考  考研  留學
您當前的位置:首頁 > IT百科 > 站長技術 > 服務器

從Nginx、Apache工作原理看為什么Nginx比Apache高效

時間:2019-06-18 10:16:00  來源:  作者:

apache三種工作模式

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

prefork:多進程,每個請求用一個進程響應,這個過程會用到select機制來通知。

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

event:基于異步I/O模型,一個進程或線程,每個進程或線程響應多個用戶請求,它是基于事件驅動(也就是epoll機制)實現的。

prefork的工作原理

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

worker的工作原理

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

event 基于事件機制的特性

一個進程響應多個用戶請求,利用callback機制,讓套接字復用,請求過來后進程并不處理請求,而是直接交由其他機制來處理,通過epoll機制來通知請求是否完成;在這個過程中,進程本身一直處于空閑狀態,可以一直接收用戶請求。可以實現一個進程程響應多個用戶請求。支持持海量并發連接數,消耗更少的資源。

如何提高Web服務器的并發連接處理能力

有幾個基本條件:

1.基于線程,即一個進程生成多個線程,每個線程響應用戶的每個請求。

2.基于事件的模型,一個進程處理多個請求,并且通過epoll機制來通知用戶請求完成。

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

4.支持mmap內存映射,mmap傳統的web服務器,進行頁面輸入時,都是將磁盤的頁面先輸入到內核緩存中,再由內核緩存中復制一份到web服務器上,mmap機制就是讓內核緩存與磁盤進行映射,web服務器,直接復制頁面內容即可。不需要先把磁盤的上的頁面先輸入到內核緩存去。

剛好,Nginx 支持以上所有特性。所以Nginx官網上說,Nginx支持50000并發,是有依據的。

Nginx優異之處

傳統上基于進程或線程模型架構的web服務通過每進程或每線程處理并發連接請求,這勢必會在網絡和I/O操作時產生阻塞,其另一個必然結果則是對內存或CPU的利用率低下。生成一個新的進程/線程需要事先備好其運行時環境,這包括為其分配堆內存和棧內存,以及為其創建新的執行上下文等。這些操作都需要占用CPU,而且過多的進程/線程還會帶來線程抖動或頻繁的上下文切換,系統性能也會由此進一步下降。另一種高性能web服務器/web服務器反向代理:Nginx(Engine X),nginx的主要著眼點就是其高性能以及對物理計算資源的高密度利用,因此其采用了不同的架構模型。受啟發于多種操作系統設計中基于“事件”的高級處理機制,nginx采用了模塊化、事件驅動、異步、單線程及非阻塞的架構,并大量采用了多路復用及事件通知機制。在nginx中,連接請求由為數不多的幾個僅包含一個線程的進程worker以高效的回環(run-loop)機制進行處理,而每個worker可以并行處理數千個的并發連接及請求。

Nginx 工作原理

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

在高連接并發的情況下,Nginx是Apache服務器不錯的替代品

Nginx 安裝非常的簡單 , 配置文件非常簡潔(還能夠支持perl語法),Bugs 非常少的服務器: Nginx 啟動特別容易, 并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動. 你還能夠 不間斷服務的情況下進行軟件版本的升級 。

Nginx 的誕生主要解決C10K問題

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

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

單個進程能夠 監視的文件描述符的數量存在最大限制

select()所維護的 存儲大量文件描述符的數據結構 ,隨著文件描述符數量的增長,其在用戶態和內核的地址空間的復制所引發的開銷也會線性增長

由于網絡響應時間的延遲使得大量TCP連接處于非活躍狀態,但調用select()還是會對 所有的socket進行一次線性掃描 ,會造成一定的開銷

poll:poll是unix沿用select自己重新實現了一遍,唯一解決的問題是poll 沒有最大文件描述符數量的限制

epoll模型:(nginx使用)

epoll帶來了兩個優勢,大幅度提升了性能:

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

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

當然epoll也有一定的局限性, epoll只有linux2.6才有實現 ,而其他平臺都沒有,這和apache這種優秀的跨平臺服務器,顯然是有些背道而馳了。

簡單來說epoll是select的升級版,單進程管理的文件描述符沒有最大限制。但epoll只有linux平臺可使用。作為跨平臺的Apache沒有使用
 



Tags:Nginx   點擊:()  評論:()
聲明:本站部分內容來自互聯網,內容觀點僅代表作者本人,如有任何版權侵犯請與我們聯系,我們將立即刪除。
▌相關評論
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
▌相關推薦
HTTP負載均衡,也就是我們通常所有"七層負載均衡",工作在第七層"應用層"。而TCP負載均衡,就是我們通常所說的"四層負載均衡",工作在"網絡層"和"傳輸層"。例如,LVS(Linux Virtual Se...【詳細內容】
2019-07-26   Nginx  點擊:(1)  評論:(0)  加入收藏
1、概要從用戶在瀏覽器輸入域名開始,到web頁面加載完畢,這是一個說復雜不復雜,說簡單不簡單的過程,下文暫且把這個過程稱作網頁加載過程。下面我將依靠自己的經驗,總結一下整個...【詳細內容】
2019-07-24   Nginx  點擊:(5)  評論:(0)  加入收藏
Http中的Nginx版本信息查看http請求的response里面的header我們會發現有server這個參數,它表示服務端使用的是什么web服務器。例如新浪網:Server: nginx開源中國:Server: Teng...【詳細內容】
2019-07-22   Nginx  點擊:(3)  評論:(0)  加入收藏
對于經常使用電腦,或者開發人員來說,文標題中的幾個內容都是經常被提及的。特別對于一些經常需要訪問谷歌等被屏蔽的實際上還是很不錯的網站的網友來說,也有必要了解一下這方面...【詳細內容】
2019-07-19   Nginx  點擊:(2)  評論:(0)  加入收藏
這幾天將幾個WordPress的Web服務器從Apache切換到了Nginx,中間遇到了不少問題,因此記錄一下,以便日后維護使用。對于WordPress站點來說,固定鏈接主要是通過根目錄下的.htaccess...【詳細內容】
2019-07-19   Nginx  點擊:(5)  評論:(0)  加入收藏
1.什么是Nginx?Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器 目前...【詳細內容】
2019-07-16   Nginx  點擊:(8)  評論:(0)  加入收藏
Nginx 作為優秀的開源軟件,憑借其高性能高并發等特點,常常作為web和反向代理服務部署在生產環境中。但是當 Nginx 的規模較大時, Nginx 的運維成本也是不斷上升。本文介紹如何...【詳細內容】
2019-07-12   Nginx  點擊:(25)  評論:(0)  加入收藏
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,在BSD-like 協議下發行。其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的...【詳細內容】
2019-07-11   Nginx  點擊:(3)  評論:(0)  加入收藏
首先我們先了解一下Nginx是什么Nginx ("engine x") 是一個高性能的HTTP和反向代理 服務器,特點是占有內存少,并發能力強,事實上nginx的 并發能力確實在同類型的網頁服務器中表...【詳細內容】
2019-07-11   Nginx  點擊:(2)  評論:(0)  加入收藏
1.偽靜態的概念偽靜態是地址欄看起來是靜態,改變了地址的表現形式,但是后臺處理的還是動態頁面。2.偽靜態的優缺點優點:在SEO方面,偽靜態和靜態頁面是一樣的,由于搜索引擎比較喜...【詳細內容】
2019-07-10   Nginx  點擊:(10)  評論:(0)  加入收藏
Nginx的產生沒有聽過Nginx?那么一定聽過它的"同行"Apache吧!Nginx同Apache一樣都是一種WEB服務器。基于REST架構風格,以統一資源描述符(Uniform Resources Identifier)URI或者...【詳細內容】
2019-07-09   Nginx  點擊:(10)  評論:(0)  加入收藏
在/usr/local/nginx/conf/nginx.conf 配置文件中插入charset utf-8;或者charset 'utf-8';server { listen 80; server_name localhost; charset utf-8; #access_lo...【詳細內容】
2019-07-08   Nginx  點擊:(18)  評論:(0)  加入收藏
1 反向代理1.1 概念反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上...【詳細內容】
2019-07-02   Nginx  點擊:(21)  評論:(0)  加入收藏
Nginx現在已經是最火的負載均衡之一,在流量陡增的互聯網面前,接口限流也是很有必要的,尤其是針對高并發的場景。Nginx的限流主要是兩種方式:限制訪問頻率和限制并發連接數。 一...【詳細內容】
2019-07-01   Nginx  點擊:(33)  評論:(0)  加入收藏
apache三種工作模式我們都知道Apache有三種工作模塊,分別為prefork、worker、event。prefork:多進程,每個請求用一個進程響應,這個過程會用到select機制來通知。worker:多線程,一...【詳細內容】
2019-06-18   Nginx  點擊:(11)  評論:(0)  加入收藏
PHP-FPM 介紹CGI 協議與 FastCGI 協議每種動態語言( PHP,Python 等)的代碼文件需要通過對應的解析器才能被服務器識別,而 CGI 協議就是用來使解釋器與服務器可以互相通信。PHP...【詳細內容】
2019-06-17   Nginx  點擊:(9)  評論:(0)  加入收藏
很多場景下,不得不承認Nginx是個好東西,它給我們的跨系統間的訪問、安全性方面等等,帶來了極大的便利,況且它的性能也極高。Nginx是一個異步框架的 Web服務器,可用作正向代理,也可...【詳細內容】
2019-06-17   Nginx  點擊:(11)  評論:(0)  加入收藏
Nginx簡述Nginx是lgor Sysoev為俄羅斯訪問量第二的rambler.ru站點設計開發的。從2004年發布至今,憑借開源的力量,已經接近成熟與完善。Nginx功能豐富,可作為HTTP Web服務器,也可...【詳細內容】
2019-06-13   Nginx  點擊:(56)  評論:(0)  加入收藏
創建一個不能登錄的www-data用戶,屬于www-data組groupadd www-datauseradd -s /sbin/nologin -g www-data www-data修改nginx.confvim /etc/nginx/nginx.conf......#使nginx...【詳細內容】
2019-05-08   Nginx  點擊:(50)  評論:(0)  加入收藏
通俗點將,負載均衡就是因為訪問流量太大,導致項目訪問不流暢、甚至宕掉,所以通過一種分流的方式來緩解這種情況。 一、 工具nginx-1.8.0apache-tomcat-6.0.33二、 目標實現高性...【詳細內容】
2019-04-28   Nginx  點擊:(28)  評論:(0)  加入收藏
推薦資訊
相關文章
欄目更新
欄目熱門
31选7开奖11185