基于Tomcat单应用多模块隔离方案

背景

目前我们Tomcat中包含的核心应用是acm,它由应用部署、监控、自动化多个模块组成。当有一个模块发生问题,会影响到其他模块的正常运行,但是从用户角度来说,这三个模块是相对独立的,不应该相互影响,所以本方案用来针对不同的模块进行线程资源隔离。

根因分析

首先我们需要弄明白为什么会相互影响。下图是我们的请求所经过的组件。


image.png

当请求通过Acceptor线程接收后封装成任务的形式给到Poller进行注册,此处使用NIO的标准流程进行处理。当有数据到达服务端时,会创建SocketProcessor,并将socket和事件相关信息传递过去,随后在Tomcat线程池中进行SocketProcessor的相关逻辑。通过上图可以看的出来,后续的流程都是同步进行的,只有等到具体的Servlet处理完业务逻辑后才会返回。最大的问题就是一个应用中所有的请求共用Tomcat处理线程池,当系统某个模块把链接完全占用后,其他模块拿不到对用的线程进行处理,导致堵塞设置超时,从而影响到上层的业务。

可能的思路

  1. 在Tomcat线程池根据请求的不同地址前缀发送到不同的线程池中进行处理。首先我们请求的前缀的获取,需要在HTTP协议解析之后获得,也就是图中的Processor这个过程进行处理的,但是我们将请求放入线程池处理的逻辑是在他的前面,所以无法实现。除非破坏Tomcat原有架构,风险极高且不推荐。
  2. Servlet3的异步化处理。在接收到请求之后,Servlet线程可以将耗时的操作委派给另一个线程来完成,自己在不生成响应的情况下返回至容器,以便能处理另一个请求。此时当前请求的响应将被延后,在异步处理完成后时再对客户端进行响应(异步线程拥有 ServletRequest 和 ServletResponse 对象的引用)。开启异步请求处理之后,Servlet 线程不再是一直处于阻塞状态以等待业务逻辑的处理,而是启动异步线程之后可以立即返回。异步处理的特性可以帮助应用节省容器中的线程,特别适合执行时间长而且用户需要得到响应结果的任务,这将大大减少服务器资源的占用,并且提高并发处理速度。我们可以利用这个Servlet的这个特性,来完成我们的多模块的隔离方案。

方案验证

SpringMvc实现了Servlet3异步化的方案,主要的改动点是开启异步化的功能,在启动类上打上@EnableAsync注解,其次是在写Controller时,它的返回值使用Callable包裹。详情请见下面配置

还有 89% 的精彩内容
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
支付 ¥10.00 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352