[1] 比較了常見的應用伺服器和Web伺服器。 [2] 介紹了在項目構建中,應用伺服器和Web伺服器所承擔的不同作用。
如上圖所示,絕大部分的公司會採用Apache+tomcat集群(或jetty集群)來部署公司的Web服務,
Web伺服器和應用伺服器關係,先介紹一下我們常說的伺服器:
- Tomcat伺服器,是運行servlet和JSP Web應用軟體的,基於java的Web應用軟體容器。(需要裝JDK)
- Apache伺服器,可以運行在所有的Unix、Linux、Windows系統平臺上,市場占有率達60%,是世界上用的最多的Web伺服器。
- IIS是一種web服務組件,它只能運行在Windows平臺上,它包括Web伺服器、FTp伺服器、NNTP伺服器和SMTP伺服器,分別用於網頁瀏覽、文件傳輸、新聞服務和郵件發送。
Apache伺服器只支持靜態頁面的請求,對於諸如jsp的動態網頁則需要Tomcat應用伺服器。也就是說,當一個請求被送到Web伺服器里來時,它只單純的把請求傳遞給可以很好的處理請求的程式。Web伺服器僅僅提供一個可以執行伺服器端程式和返迴響應的環境,而不會超出職能範圍。伺服器端程式通常具有事務處理,資料庫連接和消息等功能。很顯然,Web伺服器不支持事務處理和資料庫連接池,但它可以配置各種策略來實現容錯性和可擴展性,例如負載均衡,緩衝。總而言之,Web伺服器專門處理HTTP請求(request),應用程式伺服器來實現商業邏輯(business logic)。
整合Apache伺服器和Tomcat伺服器(或Jetty伺服器)的優勢,考慮到以下幾點:在單一的伺服器上執行WEB應用程式有一些重大的問題,當網站成功建成並開始接受大量請求時,單一伺服器終究無法滿足需要處理的負荷量。另外一個常見的問題是會產生單點故障,如果該伺服器壞掉,那麼網站就立刻無法運作了。不論是因為要有較佳的擴充性還是容錯能力,我們都會想在一臺以上的伺服器電腦上執行WEB應用程式。所以,這時候我們就需要用到集群技術了。
客戶系統一般採用Apache httpd作為web伺服器,即作為Tomcat的前端處理器,根據具體情況而定,有些情況下是不需要Apache httpd作為 web 伺服器的,如系統展現沒有靜態頁面那就不需要Apache httpd,那時可以直接使用Tomcat作為web 伺服器來使用。使用Apache httpd主要是它在處理靜態頁面方面的能力比Tomcat強多了。圖中,通過 Apache-Server 作為中轉伺服器,實現多個 tomcat 伺服器之間的分散式處理,用戶直接請求Apache-Server,然後 Apache-Server會將請求分發到具體的tomcat-server,之後tomcat-server響應客戶請求並返回結果到Apache-Server,最後Apache-Server返回結果給用戶。
最後來說說常見的幾種web伺服器的負載均衡策略:
- 輪詢策略,每一次來自網路的請求輪流分配給內部中的伺服器,從1至N然後重新開始。此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。
- 權重輪循均衡,根據伺服器的不同處理能力,給每個伺服器分配不同的權值,使其能夠接受相應權值數的服務請求。例如:伺服器A的權值被設計成1,B的權值是3,C的權值是6,則伺服器A、B、C將分別接受到10%、30%、60%的服務請求。此種均衡演算法能確保高性能的伺服器得到更多的使用率,避免低性能的伺服器負載過重。
- 隨機均衡:把來自網路的請求隨機分配給內部中的多個伺服器。
- DNS響應均衡,在Internet上,無論是HTTP、FTP或是其它的服務請求,客戶端一般都是通過功能變數名稱解析來找到伺服器確切的IP地址的。在此均衡演算法下,分處在不同地理位置的負載均衡設備收到同一個客戶端的功能變數名稱解析請求,併在同一時間內把此功能變數名稱解析成各自相對應伺服器的IP地址(即與此負載均衡設備在同一位地理位置的伺服器的IP地址)並返回給客戶端,則客戶端將以最先收到的功能變數名稱解析IP地址來繼續請求服務,而忽略其它的IP地址響應。在種均衡策略適合應用在全局負載均衡的情況下,對本地負載均衡是沒有意義的。
- 反向代理負載均衡,使用代理伺服器可以將請求轉發給內部的Web伺服器,讓代理伺服器將請求均勻地轉發給多台內部Web伺服器之一上,從而達到負載均衡的目的。這種代理方式與普通的代理方式有所不同,標準代理方式是客戶使用代理訪問多個外部Web伺服器,而這種代理方式是多個客戶使用它訪問內部Web伺服器,因此也被稱為反向代理模式。