1. 程式人生 > >nginx為什麽性能這麽優越?

nginx為什麽性能這麽優越?

開發 title 相差 imap 反向 一個 engine 分配 個人

Nginx (“engine x”) 是一個高性能的 HTTP 和 反向代理 服務器 ,也是一個 IMAP/POP3/SMTP 代理 服務器 。 Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發布於2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。

nginx橫空出世之前,Apache服務器一直占據web服務器的壟斷地位,所以就用對比的方式來解釋nginx那麽強!

兩者性能差別的主要原因在於網絡IO模型選擇不同,apache使用了select,而nginx使用了epoll模型!

舉個例子:一個萬人村裏面選村長,有兩種方式:

①,讓每個人在紙條上寫下自己的名字,然後前村長去收集紙條(一個線程去遍歷),然後得到村長推薦候選人的名單(需要處理的連接),這就相當於select模型,去輪詢每一個連接,並對需要進行處理的連接進行處理!

②,每個人都可以毛遂自薦(每個連接都有可能活躍),想要競選的在旁邊站成一排(事件觸發,放入隊列中),然後就在這幾個人中選擇(幾個待處理的任務),相當於只要對少量的事件進行處理!

一個是從上萬人中循環得到幾個進行處理,一個是幾個自己站出來直接處理,這種效率相差不是一般的大吧?

nginx是基於epoll模型開發的,而epoll是基於JAVA NIO的同步非阻塞開發,在高並發情況下能支持更多的連接!

nginx是事件驅動的,一個主進程跟多個工作進程組成的工作模式,主線程負責循環分配事件,多個工作線程負責事件的處理!

我們通常使用nginx做什麽呢?

nginx作為高性能的http服務器和反向代理服務器,通常用做負載均衡組件,負責接受大量的連接然後基於一定的規則(輪詢,權重等)分發連接給不同的應用服務器進行處理!

而且負載均衡配置十分簡單,只需要在安裝好nginx之後,通過修改配置文件nginx.conf,將不同的連接分發到不同的服務器上(通過配置server),配置十分簡單!

Nginx Web服務器優點

Nginx 是一個很牛的高性能Web和反向代理服務器, 它具有有很多非常優越的特性:

在高連接並發的情況下,Nginx是Apache服務器不錯的替代品: Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一. 能夠支持高達 50,000 個並發連接數的響應, 感謝Nginx為我們選擇了 epoll and kqueue作為開發模型.

Nginx作為負載均衡服務器: Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務, 也可以支持作為 HTTP代理服務器對外進行服務. Nginx采用C進行編寫, 不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多.

作為郵件代理服務器: Nginx Web服務器同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器), Last.fm 描述了成功並且美妙的使用經驗.

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

nginx為什麽性能這麽優越?