多个后台服务,放到一个 tomcat 还是分开放在不同的 tomcat 呢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
NoKey
V2EX    程序员

多个后台服务,放到一个 tomcat 还是分开放在不同的 tomcat 呢

  NoKey 2020-04-27 15:12:10 +08:00 4849 次点击
这是一个创建于 2042 天前的主题,其中的信息可能已经有所发展或是发生改变。

比如我这里有 10 个服务,10 个 war 包

是放在同一个 tomcat 呢

还是放在不同的 tomcat 里呢?

放在一个 tomcat 和多个 tomcat,对于同一台机器来说,有多大差异呢?

这里面按照什么参数来考量呢?

求大佬指点一下,谢谢

29 条回复    2020-04-29 23:48:24 +08:00
fkdog
    1
fkdog  
   2020-04-27 15:18:18 +08:00
那肯定要放多个 tomcat 啊。
方便各个实例进行调整参数不影响其他服务。
gz911122
    2
gz911122  
   2020-04-27 15:18:22 +08:00
jar 包呗 多省事

tomcat 好麻烦啊...
kop1989
    3
kop1989  
   2020-04-27 15:20:20 +08:00
好问题,帮顶了。我也想知道 tomcat 有没有类似 iis 的“应用程序池”概念。还是一个 tomcat 实例就只能是一个“应用程序池”。
Hanggi
    4
Hanggi  
   2020-04-27 15:21:01 +08:00
golang 就没有这个问题。
kaifang
    5
kaifang  
   2020-04-27 15:21:57 +08:00
用 docker ?
qwerthhusn
    6
qwerthhusn  
   2020-04-27 15:24:53 +08:00
现在裸用 tomcat 的不多了,都是 spring boot 了
spring boot 一个应用里面内嵌一个 tomcat 容器

所以我感觉还是单独用比较好
* 重启停用或者重新部署某个应用,可能需要重启 tomcat,重新加载 10 个应用
* 没法精细调控每个应用的内存大小等
* 涉及到日志,比如 tomcat 打印的一些日志,可能会把所有应用的混在一块,比如 access.log
vincent927
   7
vincent927  
   2020-04-27 15:39:56 +08:00
从稳定性来讲,肯定是放不同 tomcat 好
freedom0072006
    8
freedom0072006  
   2020-04-27 15:45:13 +08:00
不同
xetv
    9
xetv  
   2020-04-27 15:47:43 +08:00
各自分开放,每个服务需要多少内存各自配置,放一起可能会比较频繁出现 OOM,而且你还不好排查。总之就是一个 tomcat 放多个 war 包问题多到头大。
NoKey
    10
NoKey  
OP
   2020-04-27 16:29:46 +08:00
@xetv 我在想这个问题。比如,所有服务需要的内存加到一起 16 个 g,那么,我就给这个 tomcat 分 16 个 g,和每个 tomcat 各自分,有多大差别。然后,tomcat 的线程和连接数量等设置问题,同一台机器的话,这个设置肯定有个上限,设置成一个和多台分开设置,加到一起的,始终不能超过上限。那么,就配置这方面来说,是不是放一个和放多个是一样的。优势是不是还是在可以单独停机上面
NoKey
    11
NoKey  
OP
   2020-04-27 16:30:36 +08:00
@qwerthhusn 我们这里要把 springboot 编成 war 包放到 tomcat 里
daozhihun
    12
daozhihun  
   2020-04-27 17:43:52 +08:00
建议分开,不然一个挂了可能导致全都挂了。
tomcat 的内存占用我觉得并不是问题,spring boot 框架本身的内存占用才是大头,相比之下 tc 的开销可以忽略了
securityCoding
    13
securityCoding  
   2020-04-27 17:45:24 +08:00
建议不同 tomcat , 不过现在大都是 fatjar 了
janda
    14
janda  
   2020-04-27 20:44:05 +08:00
可以多个 tomcat 、前面放一个 nginx 挡着!反向代理设置每个 tomcat 的路径、不影响使用
cpstar
    15
cpstar  
   2020-04-27 22:21:40 +08:00
直接上 docker 多省心
NoKey
    16
NoKey  
OP
   2020-04-28 00:46:04 +08:00
@cpstar 省心么?上 docker 就要维护 docker,然后要上管理 docker 的系统,一层一层增加运维的事
abcbuzhiming
    17
abcbuzhiming  
   2020-04-28 07:37:23 +08:00
user jar!not war!口号的提出的一个原因就是 tomcat 里多个应用是会互相影响的,有的时候一个应用把线程池耗干了会卡死其它应用。所以现在都推荐一个 jar 单独一个应用
abcbuzhiming
    18
abcbuzhiming  
   2020-04-28 07:38:20 +08:00
@cpstar 在你上足够规模之前 docker 不省心,反而是个麻烦,我更倾向于直接用 systemd 管理应用
xetv
    19
xetv  
   2020-04-28 09:05:09 +08:00
@NoKey #10 一个 tomcat 分 16g,多个应用同时跑,那每个应用占用的是不一样的,比如说有个应用代码有缺陷可能会引起整个 tomcat 内存频繁 gc 之类的,反而影响其他应用。如果是每个 tomcat 各自 1g,那不会出现互相影响了。还有就是 cpu 线程问题,那一个 tomcat 和多个 tomcat 其实没啥太大区别。
你提到 tomcat 的连接数量,如果是多个应用一个 tomcat,那是共用连接数,分开放是各自使用各自的连接数。这点是有区别的。

优势不仅是单独停机,而是运行的时候不在同一个容器里面,不会出现互相影响的情况。有些应用频繁申请内存频繁 gc,有些应用占用资源少,内存上是共用内存和各自使用各自的内存的区别,分开放不会引起太大的干扰。

我们这边之前由于共用同一个 tomcat 出现过太多问题了,我是推荐分开放的。
goinghugh
    20
goinghugh  
   2020-04-28 09:47:09 +08:00
@xetv 如果内存较为紧张,从减少内存开销的角度看,放在一个 tomcat 中是更好的吧 ?
xetv
    21
xetv  
   2020-04-28 14:10:41 +08:00
@goinghugh 如果单从这个角度来看放一起会稍微好点。
NoKey
    22
NoKey  
OP
   2020-04-28 15:59:56 +08:00
@xetv 谢谢你的回复
ren2881971
    23
ren2881971  
   2020-04-28 17:03:07 +08:00
多个 tomact 这样可以利用多个 jvm 。如果多个应用共用一个 jvm 性能很差。
iminto
    24
iminto  
   2020-04-28 17:16:17 +08:00
@kop1989 多个后台服务,放到一个 tomcat 里,当然可以。

而且有个优点,可以多个应用,使用同一个 jar 依赖,减少内存占用,当然缺点也很明显,会彼此互相影响
kop1989
    25
kop1989  
   2020-04-28 17:22:02 +08:00
@iminto 当然,但是 iis 之类的 web 容器是有“应用程序池”概念的,也就是一个 iis 容器可以提供多个互不影响的“应用程序池”。
tomcat 据我所知应该是不能建立多个互不影响的 web 容器空间的吧?
iminto
    26
iminto  
   2020-04-28 17:27:04 +08:00
@kop1989 嗯,tomcat 不行,得其他容器,比如 wildfly 应该是支持你说的这种
cpstar
    27
cpstar  
   2020-04-29 00:08:37 +08:00
@NoKey 那你要把简单的事情复杂化,那是不一样的
@abcbuzhiming docker 这东西,配全了自然好。但是如 LZ 单机起 10 个服务,然后反向代理或者散端口,咱不说服务器扛住扛不住,就这些配置(包括 nginx 和各个 tomcat 的)就够折腾一阵子了。docker 至少把配置都给虚拟化了,简单一个命令行,启动 10 个虚拟应用,不省心么
NoKey
    28
NoKey  
OP
   2020-04-29 10:03:16 +08:00
@cpstar docker 用的不多,请教一下,docker 里面的 tomcat 需要配置不? docker 上面还是应该有一个 nginx 吧?
cpstar
    29
cpstar  
   2020-04-29 23:48:24 +08:00
@NoKey tomcat 想启动起来,得把 java_home 弄好吧,得把 server.xml 配置上吧,甚至 context.xml 和 web.xml 都得搞一搞,然后 catalina.sh 。相比较,docker 一条命令行,端口、webapps 都配置好了,当然想深入配置的话,可以把 server.xml 单拎出来,至于 java,镜像里已经封装好了。
比如一句 docker run -it --rm -p 8888:8080 tomcat:9.0,直接启动一个标准 tomcat 实例,增加了-p 参数,开本机的 8888 端口对应到虚机里的 8080 端口,也就是将标准 tomcat 的 8080 转成了 8888,就这个过程按照配置的话至少 vi 一下 server.xml 。

如果一个实例,那这么干一票也就算了,但是 10 个实例,10 条命令行省心还是干 10 次配置省心呢?

至于前端的 nginx,看 lz 需求了,我感觉大概率他只需要 10 个端口,不需要统一端口通过 servername 或者 uri_path 区分
关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     892 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 26ms UTC 22:55 PVG 06:55 LAX 14:55 JFK 17:55
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86