SAS 系統管理 (102)

教學目標

初步了解 SAS 9 平台中網頁應用程式伺服器的重點概念。

重點概念

首先 SAS 9 平台中的網頁應用程式伺服器皆是基於 Pivotal tc Server 開發,所謂 tc Server 主要是基於開放源始碼 Apache Tomcat ,所謂 Tomcat 主要是由 Apache 軟體基金會下 Jakarta 專案開發的 Servlet 容器,按照 Sun Microsystems 提供的技術規範,實現了對 Servlet 和 JavaServer Page(JSP)的支援,並且實作網站應用程式伺服器的一些功能。而 Tomcat 最外層的容器稱為 Server 代表整個伺服器,其中至少包括一個 Service,主要用於具體提供服務,而 Service 主要包括兩個部分,分別為 Connector 和 Container,所謂 Connector 主要是負責網路連線和請求回應等相關事件,所謂 Container 主要是用於封裝和管理 Servlet 以及處理相關請求。請注意一個 Tomcat 只能有一個 Server,一個 Server 可以包括多個 Service,一個 Service 可以包括多個 Connector,但是只能有一個 Container。

接著 Tomcat 中的 Server 主要是由 org.apache.catalina.startup.Catalina 類別服務進行管理,所謂 Catalina 服務就是整個 Tomcat 的管理類別。其中主要有三個方法分別為 load、start 和 stop,主要用於管理整個伺服器的生命週期,load 方法主要用於根據 server.xml 檔案建立伺服器,而 start 方法則是啟動伺服器,至於 stop 方法則是停止伺服器。若以 SAS 平台中 SASServer1_1 伺服器為例,則一開始就會啟動 Catatlina 服務。

啟動 Catatlina 服務

1
2
2018-12-20 13:33:58,597 INFO  (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Initialization processed in 557 ms
2018-12-20 13:33:59,347 INFO (WrapperSimpleAppMain) [org.apache.catalina.core.StandardService] Starting service Catalina

再來 Tomcat 中的 Container 主要是由 Engine、Host、Context 和 Wrapper 四個子容器所組成,所謂 Engine 主要是用於管理多個站點,但是一個 Service 僅會有一個 Engine,所謂 Host 主要代表一個站點,也能夠稱為虛擬主機,所謂 Context 主要代表一個應用程式皆會對應一個 web.xml 設定檔,所謂 Wrapper 主要代表一個 Servlet。其中 Host 和 Context 的差別在於 Context 代表一個應用,預設在 webapps 資料夾下的每個目錄皆是一個應用,其中 ROOT 目錄中存放著主應用,其它目錄存放著子應用。若以 SAS 平台中 SASServer1_1 伺服器為例,則會先啟動 Engine 容器,之後依序部署子應用設定描述檔 (XML 檔案),此外部署過程中會建立 SecureRandom 實體以利產生 Session ID,但在 Windows 平台主要預設會以 SHA1PRNG 演算法為主,所以不影響效能。

啟動 Engine 容器

1
2018-12-20 13:33:59,347 INFO  (WrapperSimpleAppMain) [org.apache.catalina.core.StandardEngine] Starting Servlet Engine: Pivotal tc Runtime 3.0.0.RELEASE/7.0.55.A.RELEASE

部署 XXX 子應用設定

1
2
2018-12-20 13:33:59,347 INFO  (localhost-startStop-4) [org.apache.catalina.startup.HostConfig] Deploying configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml
2018-12-20 13:34:21,172 INFO (localhost-startStop-2) [org.apache.catalina.startup.HostConfig] Deployment of configuration descriptor D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\conf\Catalina\localhost\XXX.xml has finished in 21,825 ms

建立 SecureRandom 實體

1
[org.apache.catalina.util.SessionIdGenerator] Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [171] milliseconds.

最後當所有子應用皆部署完成之後,就會啟動 Tomcat 伺服器, 若以 SAS 平台中 SASServer1_1 伺服器為例,在實務上客戶端啟動時間通常需要 10 分鐘至 15 分鐘,主要花費的時間皆在於載入子應用設定為主,若子應用設定越多,則啟動時間越慢,至於是否能夠優化啟動時間,就目前測試若採用 m5.xlarge 等級的 AWS 雲端主機 (4 個 vCPU 、 16GB 記憶體和最多 3,500Mbps 的 EBS 頻寬),在不調整硬碟每秒輸入/輸出 (IOPS) 的情況下就能夠將啟動時間縮短為 3 分鐘至 5 分鐘。

啟動 Tomcat 伺服器

1
2
3
2018-12-20 13:36:20,560 INFO  (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deploying web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT
2018-12-20 13:36:20,888 INFO (localhost-startStop-5) [org.apache.catalina.startup.HostConfig] Deployment of web application directory D:\SAS\Config\Lev1\Web\WebAppServer\SASServer1_1\webapps\ROOT has finished in 328 ms
2018-12-20 13:36:20,914 INFO (WrapperSimpleAppMain) [org.apache.catalina.startup.Catalina] Server startup in 142317 ms

總結 SAS 平台中的網站應用程式伺服器主要以 Tomcat 伺服器為基礎進行開發,因此深入了解 Tomcat 伺服器核心原理將有助於平台開發與維運,此外使用者主要會透過 Apache HTTP Server 網站伺服器連線至不同的網站應用程式伺服器,此時必須要注意網站伺服器設定檔中的「stickysession」參數值是否與網站應用程式伺服器設定檔「context.xml」中的「sessionCookieName」參數值一致,至於為何要一致細節之後再分享啦。

相關資源