Apache vs Nginx性能:優化技術

幾年前,Apache Foundation的web服務器(簡單地稱為“Apache”)非常普遍,以至於它成為“web服務器”一詞的同義詞。它在Linux系統上的守護進程的名稱是httpd(意思是簡單的http進程),並且在主要的Linux發行版中預先安裝。

它最初於1995年發佈,引用維基百科(Wikipedia)的話來說,“它在萬維網最初的發展中發揮了關鍵作用”。根據W3techs,它仍然是最常用的web服務器軟件。然而,根據過去十年的一些報告和與其他解決方案的比較,它的市場份額正在下降。Netcraft和Builtwith的報告略有不同,但都同意Apache市場份額的下降趨勢和Nginx的增長。

Nginx -讀作engine x -是Igor Sysoev在2004年發佈的,其明確的目的是超越Apache。Nginx的網站上有一篇值得一讀的文章,比較了這兩種技術。起初,它主要被用來作為Apache的補充,主要用於服務於靜態文件,但它市場佔有率一直在穩步增長,因為它一直在發展以處理web服務器的所有任務。

它通常被用作反向代理、負載平衡器和HTTP緩存。CDNs和視頻流媒體提供商使用它來構建他們的內容交付系統,其中性能至關重要。

Apache已經存在很長一段時間了,它有很多模塊可供選擇。Apache服務器管理是用戶友好。動態模塊加載允許將不同的模塊編譯並添加到Apache堆棧中,而無需重新編譯主服務器二進制文件。通常,模塊將位於Linux發行版存儲庫中,在通過系統包管理器安裝它們之後,可以使用諸如a2enmod之類的命令將它們優雅地添加到堆棧中。Nginx還沒有提供這種靈活性。當我們查看為HTTP/2設置Nginx的指南時,模塊是需要在構建時配置的Nginx。

另一個促成Apache市場規則的特性是.htaccess文件。它是Apache的銀彈,使它成為共享宿主環境的首選解決方案,因為它允許在目錄級別控制服務器配置。Apache服務的服務器上的每個目錄都可以有自己的.htaccess文件。

Nginx不僅沒有相應的解決方案,而且由於性能問題而不鼓勵使用這種方式。

Apache vs Nginx性能:優化技術

LiteSpeed(或LSWS)是一種具有一定靈活性的服務器競爭者,可以與Apache進行比較,同時不會犧牲性能。它支持apache風格的.htaccess、mod_security和mod_rewrite,值得共享環境考慮。它計劃作為Apache的臨時替代,並與cPanel和Plesk一起工作。它從2015年開始支持HTTP/2。

LiteSpeed有三個許可證等級,OpenLiteSpeed, LSWS標準和LSWS企業。Standard和Enterprise提供了一種可選的緩存解決方案,可與Varnish(相當於LSCache)相媲美,LSCache構建在服務器本身中,可以使用重寫規則在.htaccess文件(每個目錄)中進行控制。它還內置了一些可以減輕ddos攻擊的“電池”。這一點,再加上它的事件驅動架構,使它成為一個強有力的競爭者,主要目標是面向性能的主機提供商,但它甚至值得為更小的服務器或網站設置。

硬件方面的考慮

在對系統進行優化時,我們不能過分強調對硬件設置的重視。無論我們選擇哪種解決方案,擁有足夠的RAM是至關重要的。當web服務器進程或PHP這樣的解釋器沒有足夠的RAM時,它們就開始交換,有效地交換意味著使用硬盤來補充RAM內存。每次訪問該內存時,都會增加延遲。這將我們帶到了第二點——硬盤空間。使用快速SSD存儲是我們網站速度的另一個關鍵因素。我們還需要注意CPU的可用性,以及服務器數據中心與預期用戶的物理距離。

監視

監視每個進程的當前服務器堆棧性能的一種實用方法是htop,它可以在Linux、Unix和macOS上工作,並對我們的進程進行彩色概述。

Apache vs Nginx性能:優化技術

其他的監控工具有New Relic,一個高級的解決方案,包含了一組全面的工具,還有Netdata,一個開源的解決方案,它提供了很好的擴展性,細粒度的度量和一個可定製的web儀表板,既適用於小型VPS系統,也適用於監控服務器網絡。它可以通過電子郵件、Slack、pushbullet、Telegram、Twilio等發送任何應用程序或系統進程的警報。

Apache vs Nginx性能:優化技術

Monit是另一個headless的開源工具,它可以監視系統,可以配置為警告我們,或者重新啟動某些進程,或者在滿足某些條件時重新啟動系統。

測試系統

AB—Apache Benchmark—是Apache Foundation的一個簡單的負載測試工具,而Siege是另一個負載測試程序。這篇文章解釋瞭如何同時設置它們,這裡我們有一些關於AB的更高級的技巧,同時可以在這裡深入瞭解攻城。

如果您喜歡web界面,可以使用Locust,這是一個基於python的工具,對於測試網站性能非常方便。

安裝Locust之後,我們需要在目錄中創建一個locustfile,我們將在該目錄中啟動它:

從locust導入HttpLocust,TaskSet,任務

class UserBehavior(TaskSet):

@task(1)

def index(self):

self.client.get("/")

@task(2)

def shop(self):

self.client.get("/?page_id=5")

@task(3)

def page(self):

self.client.get("/?page_id=2")

class WebsiteUser(HttpLocust):

task_set = UserBehavior

min_wait = 300

Apache vs Nginx性能:優化技術

max_wait = 3000

然後我們從命令行啟動它:

locust --host=https://my-website.com

這些負載測試工具的一個警告是:它們具有DDoS攻擊的效果,因此建議您將測試限制在您自己的網站上。

Tuning Apache

Apache’s mpm

(多處理模塊)

Apache可以追溯到1995年和internet的早期,當時服務器的一種可接受的操作方式是在每個傳入的TCP連接上生成一個新進程並對其進行應答。如果有更多的連接出現,就會創建更多的工作流程來處理它們。生成新進程的成本很高,Apache開發人員設計了一個prefork模式,並預先生成了許多進程。在每個進程(比如mod_php)中嵌入動態語言解釋器的成本仍然很高,Apache的默認設置導致服務器崩潰的情況也很常見。每個進程只能處理一個傳入連接。

這個模型在Apache的MPM(多處理模塊)系統中稱為mpm_prefork_module。根據Apache的網站,這種模式只需要很少的配置,因為它是自調節的,而且最重要的是themaxrequestworker指令足夠大,可以處理預期收到的所有同時請求,但是足夠小,可以確保所有進程都有足夠的物理RAM。

Apache vs Nginx性能:優化技術


分享到:


相關文章: