天天看點

《深入了解Nginx:子產品開發與架構解析》一第1章 研究Nginx前的準備工作1.1 Nginx是什麼

2012年,nginx榮獲年度雲計算開發獎(2012 cloud award for developer of the year),并成長為世界第二大web伺服器。全世界流量最高的前1000名網站中,超過25%都使用nginx來處理海量的網際網路請求。nginx已經成為業界高性能web伺服器的代名詞。

那麼,什麼是nginx?它有哪些特點?我們選擇nginx的理由是什麼?如何編譯安裝nginx?這種安裝方式背後隐藏的又是什麼樣的思想呢?本章将會回答上述問題。

人們在了解新事物時,往往習慣通過類比來幫助自己了解事物的概貌。那麼,我們在學習nginx時也采用同樣的方式,先來看看nginx的競争對手—apache、lighttpd、tomcat、jetty、iis,它們都是web伺服器,或者叫做www(world wide web)伺服器,相應地也都具備web伺服器的基本功能:基于rest架構風格,以統一資源描述符(uniform resource identifier,uri)或者統一資源定位符(uniform resource locator,url)作為溝通依據,通過http為浏覽器等用戶端程式提供各種網絡服務。然而,由于這些web伺服器在設計階段就受到許多局限,例如當時的網際網路使用者規模、網絡帶寬、産品特點等局限,并且各自的定位與發展方向都不盡相同,使得每一款web伺服器的特點與應用場合都很鮮明。

tomcat和jetty面向java語言,先天就是重量級的web伺服器,它的性能與nginx沒有可比性,這裡略過。

iis隻能在windows作業系統上運作。windows作為伺服器在穩定性與其他一些性能上都不如類unix作業系統,是以,在需要高性能web伺服器的場合下,iis可能會被“冷落”。

apache的發展時期很長,而且是目前毫無争議的世界第一大web伺服器,圖1-1中是12年來(2010~2012年)世界web伺服器的使用排名情況。

從圖1-1中可以看出,apache目前處于領先地位。

apache有許多優點,如穩定、開源、跨平台等,但它出現的時間太長了,在它興起的年代,網際網路的産業規模遠遠比不上今天,是以它被設計成了一個重量級的、不支援高并發的web伺服器。在apache伺服器上,如果有數以萬計的并發http請求同時通路,就會導緻伺服器上消耗大量記憶體,作業系統核心對成百上千的apache程序做程序間切換也會消耗大量cpu資源,并導緻http請求的平均響應速度降低,這些都決定了apache不可能成為高性能web伺服器,這也促使了lighttpd和nginx的出現。觀察圖1-1中nginx成長的曲線,體會一下nginx搶占市場時的“咄咄逼人”吧。

《深入了解Nginx:子產品開發與架構解析》一第1章 研究Nginx前的準備工作1.1 Nginx是什麼

lighttpd和nginx一樣,都是輕量級、高性能的web伺服器,歐美的業界開發者比較鐘愛lighttpd,而國内的公司更青睐nginx,lighttpd使用得比較少。

在了解了nginx的競争對手之後,相信大家對nginx也有了直覺感受,下面讓我們來正式地認識一下nginx吧。

提示 nginx發音:engine ['nd3in] x。

igor sysoev将nginx的代碼開源,并且賦予其最自由的2-clause bsd-like license許可證。由于nginx使用基于事件驅動的架構能夠并發處理百萬級别的tcp連接配接,高度子產品化的設計和自由的許可證使得擴充nginx功能的第三方子產品層出不窮,而且優秀的設計帶來了極佳的穩定性,是以其作為web伺服器被廣泛應用到大流量的網站上,包括騰訊、新浪、網易、淘寶等通路量巨大的網站。

2012年2月和3月netcraft對web伺服器的調查如表1-1所示,可以看出,nginx的市場佔有率越來越大。

《深入了解Nginx:子產品開發與架構解析》一第1章 研究Nginx前的準備工作1.1 Nginx是什麼

nginx是一個跨平台的web伺服器,可運作在linux、freebsd、solaris、aix、mac os、windows等作業系統上,并且它還可以使用目前作業系統特有的一些高效api來提高自己的性能。

例如,對于高效處理大規模并發連接配接,它支援linux上的epoll(epoll是linux上處理大并發網絡連接配接的利器,9.6.1節中将會詳細說明epoll的工作原理)、solaris上的event ports和freebsd上的kqueue等。

又如,對于linux,nginx支援其獨有的 sendfile系統調用,這個系統調用可以高效地把硬碟中的資料發送到網絡上(不需要先把硬碟資料複制到使用者态記憶體上再發送),這極大地減少了核心态與使用者态資料間的複制動作。

種種迹象都表明,nginx以性能為王。

2011年7月,nginx正式成立公司,由igor sysoev擔任cto,立足于提供商業級的web伺服器。

繼續閱讀