為什么選擇 Nginx
從上一節中,我們可以看到,Nginx 已經是 Web 服務器市場的新一哥。市場的選擇總歸是沒錯的,那么市場選擇它的理由又有哪些呢?
1. 高性能、高穩定、低資源消耗
Nginx 的進程模型采用了 Master/Workers 進程池的機制,即通常情況下,Nginx 會啟動一個 Master 進程(當然,也可以無 master 進程)和多個 Worker 進程對外提供服務。Master 進程是監控進程,本身并不處理具體的 TCP 和 HTTP 請求,只負責接受 UNIX 信號,管理 Worker 進程,類似于工地的包工頭。
Worker 進程是比較累的,負責處理客戶端的連接請求,它充分利用了 Linux 系統中的 epoll、kqueue 等機制,高效處理 TCP 和 HTTP 請求,利用這些特點,Nginx 充分挖掘了服務器的潛能,讓服務器更快響應用戶請求。
一般情況下,10000 個非活躍的 HTTP Keep-Alive 連接在 Nginx 中僅僅消耗 2.5M 內存,這是 Nginx 支持高并發連接的基礎,體現了 Nginx 高性能的特點。另外,由于官方提供的模塊都非常穩定,每個 Worker 進程都相對獨立,Woker 進程出錯時,Master 進程會立馬感知到并快速拉起新的 Worker 子進程不間斷提供服務,保證服務的穩定性。
nginx的進程模型
2. 高可擴展性
Nginx 的架構設計是非常優秀的,極具擴展性,它完全由多個不同功能、不同層次、不同類型且耦合度極低的模塊組成。
另外,我們還可以在官方提供的模塊上進行二次開發,例如 HTTP 模塊,其中設計了 HTTP 過濾器模塊,這樣我們開發一個新的 HTTP 模塊時,除了使用諸如 HTTP 核心模塊、events 模塊、log 模塊等不同層次的模塊,還可以原封不動地復用大量已有的 HTTP 過濾器模塊。
這種低耦合度的優秀設計,造就了 Nginx 龐大的第三方模塊,而且 Nginx 的模塊都是嵌入到二進制的文件中執行的,這樣使得第三方模塊同樣具備極其優秀的性能,充分利用 Nginx 的高并發特性,因此許多高流量的網站都會在 Nginx 基礎上開發符合自己業務特性的定制模塊,而且開發成本低,效果好。
另外,對于中小型企業來說,Nginx 開箱即用,其本身的高并發能力能滿足企業的大部分業務,因此 Nginx 在絕大部分互聯網企業中應用非常廣泛。
3. 熱部署
支持熱部署功能是 Nginx 的一個特色,許多大型門戶網站要求 24 小時不間斷提供服務,一旦出現服務停止,容易造成用戶投訴和用戶流失。Nginx 由于其管理進程和 Worker 進程的分離設計,使得其能提供熱部署功能,滿足大型站點在 7x24 小時不間斷服務的前提下升級 Nginx。
但要注意的是,Nginx 并不支持在不停止服務的情況下就更新配置、更換日志文件等功能。Nginx 的熱部署實現原理是,在不停止老進程的前提下,終止其連接請求,并啟動新的 Worker 進程處理新進來的連接請求,再慢慢終止老的 Worker 進程,實現新老交替。
4. 開源和免費
Nginx 和老大哥 Apache 一樣開源且免費。在如今的時代,開源才能有力地成長,免費才能讓更多的企業和個人開發者使用。 當然 Nginx 也有它的商業版本 Nginx plus,它有著更為豐富的功能和應用場景。然而免費版本的功能已經足夠強大,加上第三方層出不窮的插件模塊,幾乎能實現各種業務功能,再加上配合第三方的語言集成(perl、lua等),對于絕大多數企業和個人來說已經完全足夠。
當然,Nginx 的優點絕對不止于此。它最核心地功能是:在支持高并發請求的同時保持高效的服務。而這一點正是廣大開發者,也是各大企業迫切需要滿足的需求,以應對日益龐大的國內互聯網用戶群體。