Tomcat與Apache、ngix的比較

Tomcat與Apache、ngix的比較

1. 定義

1.1 Apache

Apache HTTP服務器是一個模塊化的服務器,可以運行在幾乎所有廣泛使用的計算機平臺上。其屬於應用服務器。Apache支持支持模塊多,性能穩定,Apache本身是靜態解析,適合靜態HTML、圖片等,但可以通過擴展腳本、模塊等支持動態頁面等。

(Apche可以支持PHPcgiperl,但是要使用Java的話,你需要Tomcat在Apache後臺支撐,將Java請求由Apache轉發給Tomcat處理。)

缺點:配置相對複雜,自身不支持動態頁面。

1.2. Tomcat:

Tomcat是應用(Java)服務器,它只是一個Servlet(JSP也翻譯成Servlet)容器,可以認爲是Apache的擴展,但是可以獨立於Apache運行。

1.3. Nginx

Nginx是俄羅斯人編寫的十分輕量級的HTTP服務器,Nginx,它的發音爲“engine X”,是一個高性能的HTTP和反向代理服務器,同時也是一個IMAP/POP3/SMTP 代理服務器。

2. 比較

Nginx優點:負載均衡、反向代理、處理靜態文件優勢。nginx處理靜態請求的速度高於apache;

Apache優點:相對於Tomcat服務器來說處理靜態文件是它的優勢,速度快。Apache是靜態解析,適合靜態HTML、圖片等。

Tomcat:動態解析容器,處理動態請求,是編譯JSP\Servlet的容器,Nginx有動態分離機制,靜態請求直接就可以通過Nginx處理,動態請求才轉發請求到後臺交由Tomcat進行處理。

Apache在處理動態有優勢,Nginx併發性比較好,CPU內存佔用低,如果rewrite頻繁,那還是Apache較適合。

反向代理的理解:

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡上的服務器,

並將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現爲一個服務器。

3.相關概念

3.1 HTTP server

HTTP服務器本質上也是一種應用程序——它通常運行在服務器之上,綁定服務器的IP地址並監聽某一個tcp端口來接收並處理HTTP請求,這樣客戶端(一般來說是IE, Firefox,Chrome這樣的瀏覽器)就能夠通過HTTP協議來獲取服務器上的網頁(HTML格式)、文檔(PDF格式)、音頻(MP4格式)、視頻(MOV格式)等等資源。下圖描述的就是這一過程:

不僅僅是apache和ngix,絕大多數語言也實現了簡單的http 服務器。使用這些類庫能夠非常容易的運行一個HTTP服務器,它們都能夠通過綁定IP地址並監聽tcp端口來提供HTTP服務。

 

HTTP Server 關心的是 HTTP 協議層面的傳輸和訪問控制,所以在 Apache/Nginx 上你可以看到代理、負載均衡等功能。客戶端通過 HTTP Server 訪問服務器上存儲的資源(HTML 文件、圖片文件等等)。

3.2 應用容器

Tomcat就是一個「Servlet/JSP」應用的容器。

應用服務器,則是一個應用執行的容器。它首先需要支持開發語言的 Runtime(對於 Tomcat 來說,就是 Java),保證應用能夠在應用服務器上正常運行。其次,需要支持應用相關的規範,例如類庫、安全方面的特性。對於 Tomcat 來說,就是需要提供 JSP/Sevlet 運行需要的標準類庫、Interface 等。

爲了方便,應用服務器往往也會集成 HTTP Server 的功能,但是不如專業的 HTTP Server 那麼強大,所以應用服務器往往是運行在 HTTP Server 的背後,執行應用,將動態的內容轉化爲靜態的內容之後,通過 HTTP Server 分發到客戶端。

 

雖然Tomcat也可以認爲是HTTP服務器,但通常它仍然會和Nginx配合在一起使用:

  • 動靜態資源分離——運用Nginx的反向代理功能分發請求:所有動態資源的請求交給Tomcat,而靜態資源的請求(例如圖片、視頻、CSS、JavaScript文件等)則直接由Nginx返回到瀏覽器,這樣能大大減輕Tomcat的壓力。
  • 負載均衡,當業務壓力增大時,可能一個Tomcat的實例不足以處理,那麼這時可以啓動多個Tomcat實例進行水平擴展,而Nginx的負載均衡功能可以把請求通過算法分發到各個不同的實例進行處理

 

相關鏈接:

https://www.zhihu.com/question/32212996

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