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等多个知识点的架构资料)正当利用自己每一分每一秒的时间来学习提升自己,不要再用”没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Tomcat应用部署能否要一个萝卜一个坑?