最近在做微服務部署相關的項目,使用的容器為湯姆貓tomcat,過程中通過和架構師的交流以及自己的理解得出了幾個關鍵信息
這里記錄下。
JVM和tomcat之間的關系,從下面的幾個方向說明:
1、JVM,java虛擬機,不同設備運行java應用程序的平台。
2、Tomcat,apache免費開源的web應用服務器,通過java語言編寫,換句話說:tomcat亦是一個java應用程序。
-------- 這里不難看出tomcat容器的啟動離不開JVM
3、JVM某種程度上可以被認為是一個虛擬的操作系統,它有着自己的內存模型等;
4、一個tomcat容器的啟動,相當於在JVM中啟動了一個進程;
5、一個tomcat容器中可以啟動多個web app這些被看做進程中啟動了多個線程。(通過在server.xml中指定多個context)
6、每個進程都有自己獨立的內存空間,因此進程間的通信較為困難;
7、而進程中的線程啟動時,不會額外的分配內存空間,換句話說:進程中的多個線程共享內存空間,因此通信較為方便快速。
另外一個思考就是:webUI服務中的java代碼是否有存在的必要??
現代微服務架構中,tomcat容器是一個厚重的web容器,一個微服務的啟動相當於在部署節點的JVM上增加了一個進程,這必然會帶來一定的內存開銷;
對於webUI性質的微服務,建議只保留純靜態文件(javascript、css、gif等),並且部署容器選擇更輕量級的nginx;並且在整體部署規划上,將此類服務部署在同一節點上