Nginx-03-Nginx 項目架構

Nginx 現狀

nginx(發音爲“engine x”)是一個免費的開源Web服務器,由俄羅斯軟件工程師Igor Sysoev編寫。自2004年公開發布以來,nginx一直專注於高性能,高併發性和低內存使用。

Web服務器功能之上的其他功能,如負載*衡,緩存,訪問和帶寬控制,以及與各種應用程序高效集成的能力,有助於使nginx成爲現代網站架構的不錯選擇。

目前,nginx是互聯網上第二大最受歡迎的開源Web服務器。

14.1。爲什麼高併發性很重要?

如今,互聯網如此廣泛和無處不在,很難想象它不是十年前我們所知道的那樣。從簡單的HTML生成可點擊文本,基於NCSA,然後是Apache Web服務器,到全球超過20億用戶使用的永遠在線的通信媒體,它已經有了很大的發展。隨着永久連接的PC,移動設備和最*的*板電腦的激增,互聯網領域正在迅速變化,整個經濟已經成爲數字連線。在線服務變得更加精細,明顯偏向即時可用的實時信息和娛樂。運行在線業務的安全方面也發生了重大變化。因此,網站現在比以前複雜得多,並且通常需要更多的工程努力才能具有健壯性和可擴展性。

網站架構師面臨的最大挑戰之一就是併發。自Web服務開始以來,併發水*一直在不斷增長。一個流行的網站服務數十萬甚至數百萬同時用戶並不罕見。十年前,併發的主要原因是緩慢的客戶端 - 具有ADSL或撥號連接的用戶。如今,併發性是由移動客戶端和較新的應用程序體系結構的組合引起的,這些體系結構通常基於維護持久連接,該連接允許客戶端使用新聞,推文,朋友訂閱源等進行更新。另一個有助於提高併發性的重要因素是現代瀏覽器的行爲改變,它可以打開四到六個同時連接到網站的連接,以提高頁面加載速度。

爲了說明慢客戶端的問題,想象一個簡單的基於Apache的Web服務器,它產生一個相對較短的100 KB響應 - 一個帶有文本或圖像的網頁。生成或檢索此頁面只需幾分之一秒,但需要10秒才能將其傳輸到帶寬爲80 kbps(10 KB / s)的客戶端。從本質上講,Web服務器會相對快速地提取100 KB的內容,然後在釋放連接之前,它將忙於將內容緩慢地發送到客戶端10秒鐘。現在假設您有1,000個同時連接的客戶,他們請求了類似的內容。如果每個客戶端僅分配1 MB的額外內存,則會產生1000 MB(約1 GB)的額外內存,專門用於爲1000個客戶端提供100 KB的內容。實際上,基於Apache的典型Web服務器通常爲每個連接分配超過1 MB的額外內存,令人遺憾的是,幾十kbps仍然是移動通信的有效速度。雖然在某種程度上通過增加操作系統內核套接字緩衝區的大小來改善向慢速客戶端發送內容的情況,但這不是解決該問題的一般方法,並且可能具有不良副作用。

對於持久連接,處理併發性的問題更加明顯,因爲爲了避免與建立新HTTP連接相關聯的延遲,客戶端將保持連接,並且對於每個連接的客戶端,Web服務器分配了一定量的內存。

因此,爲了處理與增長的受衆相關的增加的工作量以及因此更高的併發水* - 並且能夠持續這樣做 - 網站應該基於許多非常有效的構建塊。雖然硬件(CPU,內存,磁盤),網絡容量,應用程序和數據存儲架構等方程式的其他部分顯然很重要,但是在Web服務器軟件中,客戶端連接被接受和處理。因此,Web服務器應該能夠隨着每秒同時連接和請求數量的增加而非線性地擴展。

Apache不合適嗎?

Apache,這種網絡服務器軟件在很大程度上仍然主宰着互聯網,它的根源在於20世紀90年代初。最初,它的架構與當時存在的操作系統和硬件相匹配,但也與互聯網狀態相匹配,其中網站通常是運行單個Apache實例的獨立物理服務器。到了2000年代初,很明顯,無法輕鬆複製獨立的Web服務器模型以滿足不斷增長的Web服務的需求。儘管Apache爲未來的開發提供了堅實的基礎,但它的架構是爲每個新連接生成自己的副本,這不適合網站的非線性可伸縮性。最終,Apache成爲了一個通用的Web服務器,專注於擁有許多不同的功能,各種第三方擴展,以及幾乎任何類型的Web應用程序開發的普遍適用性。然而,沒有任何代價,在單個軟件中擁有如此豐富和通用的工具組合的缺點是可擴展性較差,因爲每個連接的CPU和內存使用量增加。

因此,當服務器硬件,操作系統和網絡資源不再成爲網站增長的主要限制時,全球的Web開發人員開始尋找更有效的運行Web服務器的方法。大約十年前,着名軟件工程師Daniel Kegel宣稱“現在是網絡服務器同時處理一萬個客戶端的時候了”,並預測了我們現在稱之爲互聯網雲服務的東西。凱格爾的C10K清單激發了許多嘗試來解決網絡服務器優化問題,同時處理大量客戶端,而nginx成爲最成功的客戶之一。

旨在解決10,000個同時連接的C10K問題,nginx在編寫時考慮了不同的體系結構 - 一個更適合同時連接數和每秒請求數的非線性可伸縮性。 nginx是基於事件的,因此它不遵循Apache爲每個網頁請求生成新進程或線程的風格。最終結果是,即使負載增加,內存和CPU使用仍然可以管理。 nginx現在可以在具有典型硬件的服務器上提供數萬個併發連接。

當nginx的第一個版本發佈時,它意味着與Apache一起部署,使得靜態內容(如HTML,CSS,JavaScript和圖像)由nginx處理,以卸載基於Apache的應用程序服務器的併發和延遲處理。在開發過程中,nginx通過使用FastCGI,uswgi或SCGI協議以及分佈式內存對象緩存系統(如memcached)增加了與應用程序的集成。還添加了其他有用的功能,例如具有負載*衡和緩存的反向代理。這些附加功能使nginx成爲有效的工具組合,可構建可擴展的Web基礎架構。

2012年2月,Apache 2.4.x分支向公衆發佈。雖然最新版本的Apache增加了新的多處理核心模塊和新的代理模塊,旨在增強可擴展性和性能,但現在判斷它的性能,併發性和資源利用率是否與純事件相當或更好還爲時尚早。驅動的Web服務器。不過,看看Apache應用程序服務器在新版本中的擴展性能會更好,因爲它可能會緩解後端方面的瓶頸,這在典型的nginx-plus-Apache Web配置中仍然沒有得到解決。

使用nginx有更多優勢嗎?

以高性能和高效率處理高併發性始終是部署nginx的關鍵優勢。但是,現在有更多有趣的好處。

在過去幾年中,Web架構師已經接受了將其應用程序基礎結構與Web服務器分離和分離的想法。然而,以前以LAMP(Linux,Apache,MySQL,PHP,Python或Perl)爲基礎的網站形式,現在可能不僅僅是一個基於LEMP的(E'代表'引擎x')但是,越來越多的做法是將Web服務器推向基礎設施的邊緣,並以不同的方式圍繞它集成相同或經過改進的應用程序和數據庫工具集。

nginx非常適合這一點,因爲它提供了方便卸載併發,延遲處理,SSL(安全套接字層),靜態內容,壓縮和緩存,連接和請求限制,甚至來自應用程序的HTTP媒體流所需的關鍵功能層到更有效的邊緣Web服務器層。它還允許直接與memcached / Redis或其他“NoSQL”解決方案集成,以在爲大量併發用戶提供服務時提高性能。

隨着最*開發套件和編程語言的廣泛使用,越來越多的公司正在改變他們的應用程序開發和部署習慣。 nginx已成爲這些不斷變化的範例中最重要的組成部分之一,它已經幫助許多公司在預算範圍內快速啓動和開發其Web服務。

nginx的第一行是在2002年編寫的。2004年,它根據雙條款BSD許可證向公衆發佈。從那時起,nginx用戶的數量一直在增長,提供想法,並提交對整個社區非常有幫助和有益的錯誤報告,建議和觀察。

nginx代碼庫是原創的,完全是用C編程語言從頭開始編寫的。 nginx已經移植到許多架構和操作系統,包括Linux,FreeBSD,Solaris,Mac OS X,AIX和Microsoft Windows。 nginx有自己的庫,其標準模塊除了zlib,PCRE和OpenSSL之外不會超出系統的C庫,除非zlib,PCRE和OpenSSL可以選擇從構建中排除,如果不需要或者由於潛在的許可證衝突。

關於Windows版nginx的幾句話。雖然nginx適用於Windows環境,但nginx的Windows版本更像是概念驗證而不是功能齊全的端口。 nginx和Windows內核架構存在某些限制,目前這些架構不能很好地交互。 Windows的nginx版本的已知問題包括併發連接數量少得多,性能下降,沒有緩存以及沒有帶寬監管。面向Windows的nginx的未來版本將更緊密地匹配主流功能。

nginx 系列

Nginx-01-聊一聊 nginx

Nginx-01-Nginx 是什麼

Nginx-02-爲什麼使用 Nginx

Nginx-02-Nginx Ubuntu 安裝 + windows10 + WSL ubuntu 安裝 nginx 實戰筆記

Nginx-02-基本使用

Nginx-03-Nginx 項目架構

Nginx-04-Docker Nginx

Nginx-05-nginx 反向代理是什麼?windows 下如何配置使用 nginx

Nginx-06-nginx 彙總入門介紹

Nginx R31 doc 官方文檔-01-nginx 如何安裝

Nginx R31 doc-02-nginx 基本功能

Nginx R31 doc-03-HTTP Load Balancing HTTP 負載均衡

Nginx R31 doc-04-HTTP Health Checks

Nginx R31 doc-05-Dynamic Configuration of Upstreams with the NGINX Plus API 使用 NGINX Plus API 動態配置上游服務器

Nginx R31 doc-06-Accepting the PROXY Protocol

Nginx R31 doc-07-內容緩存

Nginx R31 doc-08-Configuring NGINX and NGINX Plus as a Web Server 配置 NGINX 和 NGINX Plus 作爲 Web 服務器

Nginx R31 doc-09-Serving Static Content 靜態內容

Nginx R31 doc-10-NGINX Reverse Proxy 反向代理

Nginx R31 doc-11-Compression and Decompression 壓縮與解壓縮

Nginx R31 doc-12-NGINX SSL Termination 安全加密

Nginx R31 doc-13-Limiting Access to Proxied HTTP Resources 訪問限流

Nginx R31 doc-14-Dynamic Denylisting of IP Addresses 動態拒絕IP地址

Nginx R31 doc-15-Live Activity Monitoring 實時活動監控

Nginx R31 doc-16-logging 配置日誌

Nginx R31 doc-17-debugging 調試

Nginx R31 doc-18-High Availability Support for NGINX Plus in On-Premises Deployments

Nginx 實戰-01-nginx ubuntu 安裝筆記

Nginx 實戰-01-nginx windows 安裝筆記

Nginx 實戰-02-nginx proxy_pass 服務代理訪問 使用筆記 ubuntu nodejs

Nginx 實戰-03-nginx 負載均衡

Nginx 實戰-04-nginx 不同的地址訪問不同的服務

Nginx 實戰-05-nginx 反向代理實現域名到指定的 ip

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章