1. 程式人生 > >Tomcat架構解析(一)-----Tomcat總體架構

Tomcat架構解析(一)-----Tomcat總體架構

連接 connect tex 引入 網絡協議 狀態圖 修改 strong 接口

Tomcat是非常常用的應用服務器,了解Tomcat的總體架構以及實現細節,對於理解整個java web也是有非常大的幫助。

一、Server

1、最簡單的服務器結構

最簡單的服務器結構如圖所示:

技術分享圖片

Server向客戶端提供服務,並且服務器可以start或stop。

缺點:如果需要該服務器支持多種網絡協議,就很難擴展,因此改進如下:

2、Connector和Container

技術分享圖片

將容器拆分成Connector以及Container,Connector用於和客戶端連接,可以擴展支持多種協議,建立連接之後將socket交給Container處理。

缺點:一個Server存在多個Connector和Container,因此Connector和Container之間就需要建立比較繁瑣的映射關系,改進如下:

3、加入Service

技術分享圖片

一個Server包括多個Service,一個Service可以包含多個Connector和一個Container,這樣Connector在獲得客戶端的socket之後,交給對應的Service,由Service來找到對應的Container,進而處理客戶端的相關請求。

缺點:應用服務器是一個運行環境,可能會有很多項目部署在Tomcat中,因此改進如下:

4、引入Context

技術分享圖片

將Container換成Engine,Context則表示應用本身,同時Engine和Context都包含start、stop方法,代表各個容器啟動、關閉的行為,將各個容器加載資源、釋放資源的動作解耦。

缺點:通常在一個主機下,提供多個域名的服務,因此引入Host,如下:

5、引入Host

技術分享圖片

缺點:一個Context中可以包含多個servlet實例,稱為Wrapper,改進如下:

6、Wrapper

技術分享圖片

Engine、Host、Context、Wrapper是一類組件,這類組件的作用就是處理接收客戶端的請求並且返回響應數據,並且有可能請求到Engine容器,Engine容器委托給子容器Host處理,修改如下:

技術分享圖片

使用Container代表容器,Engine、Host、Context、Wrapper都是Container的子容器,Container可以維護子容器。backgroundProcess()方法針對後臺處理,並且其基礎抽象類(ContainerBase)確保在啟動組件的同時,異步啟動後臺處理。

Tomcat的總體架構大致如此。

二、Lifecycle生命周期

所有的容器中都存在start()、stop()等方法,因此抽象出Lifecycle接口,該接口中定義了相關的生命周期的方法。主要方法如下:

技術分享圖片

技術分享圖片

技術分享圖片

Lifecycle狀態圖:

技術分享圖片

三、Pipeline和Valve

對於應用服務器來說,增強各組件的擴展性以及靈活性是非常重要的,Tomcat采用職責鏈模式來實現每個Container組件處理請求的功能。

Pipeline代表職責鏈,後者表示閥門,具體的處理過程,如圖所示:

技術分享圖片

說的簡單點,就是每條線路上包含哪些操作,操作按照順序一個個執行。Tomcat通過這種方式來決定每個容器的執行過程。之前的Tomcat架構圖加上職責鏈如下所示:

技術分享圖片

簡單的來說,Tomcat監聽客戶端的請求,獲得請求後交個各個組件去處理,返回響應數據到客戶端,並且Tomcat能支持HTTP、AJP等協議。並且在擴展性、可用性上有著非常優秀的設計。

Tomcat架構解析(一)-----Tomcat總體架構