Tomcat应用部署是否要一个萝卜一个坑?

简介: 经常有读者在后台向我提问,一些个性化的问题就直接在后台回复了。也有些比较普遍的问题,比如下面这个:自己的项目有多个应用,这些应用是要部署到同一个 Tomcat 里好,还是多个应用分别部署到不同的 Tomcat 里,每个里面只部署一个应用好呢?最近在 Tomcat 官方的「邮件组」里也看到类似的问题,可能这个问题不分国界。

经常有读者在后台向我提问,一些个性化的问题就直接在后台回复了。也有些比较普遍的问题,比如下面这个:

自己的项目有多个应用,这些应用是要部署到同一个 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。

总结下,生产上如果应用小,嫌麻烦,出问题可接受,都放到一起也没问题。如果占用资源比较大,需要稳定性等,尽量独立部署,开发环境就怎么方便怎么来。

欢迎工作一到五年的Java工程师朋友们加入Java填坑之路:860113481

群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

 

相关文章
|
2月前
|
监控 Java 应用服务中间件
部署tomcat部署实战案例
本文是关于Tomcat部署实战案例的教程,包括通过yum和二进制方式部署Tomcat的详细步骤,以及如何监控Tomcat服务。
206 84
部署tomcat部署实战案例
|
3月前
|
Java 应用服务中间件 Windows
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
|
2月前
|
应用服务中间件 Docker 容器
docker应用部署---Tomcat的部署配置
这篇文章介绍了如何使用Docker部署Tomcat服务器,包括搜索和拉取Tomcat镜像、创建容器并设置端口映射和目录映射,以及如何创建一个HTML页面并使用外部机器访问Tomcat服务器。
docker应用部署---Tomcat的部署配置
|
1月前
|
应用服务中间件 数据库
Tomcat 的数据库连接池设置与应用
Tomcat 的数据库连接池设置与应用
38 3
|
26天前
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
81 0
|
3月前
|
应用服务中间件 Docker 容器
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
这篇文章介绍了在Docker中安装Tomcat的过程,包括搜索Tomcat镜像、拉取镜像、目录挂载的准备、创建并挂载容器,以及如何进入容器和进行测试。文中还说明了如何将WAR包部署到Tomcat服务器并访问部署的应用。
在服务器中使用Docker安装Tomcat、同时实现目录挂载、并且部署War包到服务器
|
2月前
|
前端开发 Java 应用服务中间件
react自学(6) 部署到tomcat中
react自学(6) 部署到tomcat中
|
3月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
74 3
|
3月前
|
缓存 前端开发 Java
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
【Azure 应用服务】App Service 使用Tomcat运行Java应用,如何设置前端网页缓存的相应参数呢(-Xms512m -Xmx1204m)?
|
4月前
|
Java 应用服务中间件 Shell