最近在做微服务部署相关的项目,使用的容器为汤姆猫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;并且在整体部署规划上,将此类服务部署在同一节点上