nginx是什么?可能很多人不是很了解,除非是做WEB服務器開發的朋友才可能涉獵,而且如果不懂C語言,又或者對WEB SERVER性能要求不高,也是沒必要去研究它的。
說到這里,大家想必已經知道,nginx就是一個高性能的WEB SERVER,它的工作就像apache, tomcat一樣。那么已經有apache這樣的成熟產品了,nginx又有何存在必要呢?下面說下它的特點,各位就明白為何nginx在世界WEB服務里占有相當大的份額了。
1、nginx支持linux的epoll,以及其他常見OS的高性能IO處理方式。
2、nginx用純C寫成。
3、nginx核心代碼全部用事件觸發機制完成。
4、nginx是跨平臺的。
?
大家從這4個主要特點,應該可以想見nginx到底是怎么玩的了吧?
第1點很清楚,nginx可以很輕松的支持2,3萬個并發連接,這個是epoll等模式先天支持的,還能CPU占用率超低。
第2點可以想見,nginx是高性能的。C語言的高效誰不知道呢?呵呵,讀它的代碼也是相當累,如果想去寫nginx的module,自然更累,下面會詳述。
第3點很重要,nginx全部用事件觸發寫成,實際用到的,也就是epoll提供的一些網絡IO事件的觸發處理。這點是WEB開發者在寫自己的module時,實現高性能web服務的關鍵。
第4點并不重要,因為寫web的人都是做服務的,大家大多都是在免費的LINUX上玩的,沒人會用nginx在windows上跑吧?如果在windows上跑,何必選開發難度大多了的nginx?所以這點不提。不過這一條讓大家在開發起來很不爽,為了與nginx代碼風格統一,不得不用大量的nginx封裝好的用來跨平臺的函數,比如ngx_memcpy之類。
?
解讀完這四點,一個有經驗的程序員應該明白何種情形應該選用nginx了吧?如果一個java小團隊,對服務的并發能力要求不高,又或者機器巨多,自然不需要去選擇開發成本較高的nginx了。而做習慣大規模高并發SERVER開發的同志們,則會心生疑惑,nginx的好處還有什么?上面的這些優點,完全可以自己寫個server實現,要nginx何用?我覺得,如果是做WEB SERVER,還是需要nginx的。
nginx實際封裝了基本的WEB SERVER功能,所以,首先它有良好的網絡IO處理系統,還有穩定的HTTP協議狀態機分析,內存池,進程間通訊,線程管理,并提供了基本的配置文件,LOG系統。在其上做不是特別復雜的WEB應用,還是很有優勢的,至少可以上application開發者不用花太多的精力在較底層的協議上去。
?
粗略介紹完nginx,大家有何感想?估計有很多人會打算詳細研究下它吧?
但nginx最大的不爽之處,就是資料極少,網上能搜到的文檔就那么幾份,如果不做module開發,那是足矣,可是如果有自己業務的特殊需求,并且希望按照nginx的設計理念去非阻塞化所有操作,把性能最大化,則必須邊看源碼邊調試了,連蒙帶猜,呵呵。
我就經過了這個痛苦過程,下面就給大家分享下nginx的module開發過程中的一些心得。