Tomcat應用部署是否要一個蘿蔔一個坑?

技術小能手發表於2018-11-07

經常有讀者在後臺向我提問,一些個性化的問題就直接在後臺回覆了。也有些比較普遍的問題,比如下面這個:

自己的專案有多個應用,這些應用是要部署到同一個 Tomcat 裡好,還是多個應用分別部署到不同的 Tomcat 裡,每個裡面只部署一個應用好呢?

最近在 Tomcat 官方的「郵件組」裡也看到類似的問題,可能這個問題不分國界。一些 Tomcat 的 commiter 也給出了自己的看法,大家看法都不一樣,正好我們們一起來看看,兩種情況相比較,到底怎樣使用適合。

首先我們自己先想一下,如果多個應用部署到一個 Tomcat 例項中,優劣分別有哪些呢?

優勢 :

 ●  安裝管理、監控都方便,只需要安裝一個 Tomcat,所有的操作都指向同一個例項即可。

劣勢:

 ●  多個應用共用 Tomcat 的記憶體,容易互相影響。如果有一個應用佔用堆太多,頻繁的 GC 也會使其他應用跟著暫停。

每個 Tomcat 例項部署一個應用呢?

優勢 :

 ●  多個應用之間 Tomcat 的記憶體互相隔離,互相之間無影響。一個應用crash,頻繁 GC,都隻影響其自己,影響面縮小。

劣勢:

 ●  相比一個例項,安裝管理、監控都較繁瑣一些。可以通過安裝一個例項,設定不同的CATALINA_HOME來簡化一些操作。

郵件組裡的問題描述比上面的更詳細一些。並且羅列了自己認為的優劣。

郵件內容較多,我選其中關鍵的幾段翻譯如下,其中描述意見分歧在開發人員和運維人員之間:

運維認為一個 Tomcat 部署多個應用,原因如下:

 ●  省記憶體 (每個 Tomcat 都會有記憶體的 footprint,即使沒有應用部署執行)
 ●  省去額外的檔案系統 (logs, tomcat installation, temp directory)
 ●  省去 nagios 監控配置
 ●  省去不少獨立的埠 (security considerations)
 ●  省去每個都打安全補丁

開發人員認為應該一個 Tomcat裡只部署一個應用,理由如下:

 ●  多個應用部署在一起,啟動時間太長
 ●  多個應用部署在一起,一個出了問題,會影響到其他的應用 (OOM, 執行緒數打滿 等等)
 ●  如果你需要線上上進行應用heap, 執行緒的dump, cpu使用等診斷分析,獨立部署則不會影響到其他應用

郵件組裡的回覆,大部分傾向於一個應用部署一個Tomcat:

 ●  這樣概念上最簡單,應用之間不會互相影響。同時呢,可以使用不同的JVM,不同的環境,不同的庫,不會互相限制,也不用測試這些應用間的相容性。
 ●  多個應用部在一起,如果都是佔用記憶體比較大的,比如佔用Heap 較多,如果趕上一次Full GC,就會導致暫停時間較長,這樣多個應用的執行緒都受影響。

Tomcat 的核心開發人員 Mark 認為這兩種情況應該視情況而定。如果你的一個應用需要特別多的資源,這樣儘量一個應用部署到一個Tomcat中以滿足企業的要求。否則,傾向於多個應用共用同一個 Tomcat ,這樣方便管理和運維。

我個人傾向於生產環境每個應用獨立部署,每個應用獨立監控,資源管理也互相隔離。在開發的時候,可以只設定一個 Tomcat 例項,部署多個應用到一個Tomct也更快捷,沒那麼多個性化要求,不需要再配置一堆的埠。當然,如果線上也都是各種小應用,沒什麼要求,部署到一起也OK。

總結下,生產上如果應用小,嫌麻煩,出問題可接受,都放到一起也沒問題。如果佔用資源比較大,需要穩定性等,儘量獨立部署,開發環境就怎麼方便怎麼來。

原文釋出時間為:2018-11-7

本文作者:侯樹成

本文來自雲棲社群合作伙伴“Java後端技術”,瞭解相關資訊可以關注“Java後端技術”。


相關文章