BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

文章:Web请求异步处理降低应用依赖风险

| 作者 岑文初 关注 2 他的粉丝 发布于 2009年1月14日. 估计阅读时间: 1 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

现在已经很少再有纯粹封闭式的应用,对数据库的依赖,对存储的依赖以及对第三方系统的依赖都是我们在设计系统架构时要考虑的问题。本文试图通过分析Tomcat和JBoss中的异步服务处理来降低依赖所带来的风险。

作者先是从阿里软件服务集成平台所面临的实际问题出发,提出针对减少系统依赖的三个不同解决方案,比如改阻塞方式为非阻塞方式来处理请求;设置后端超时时间,主动断开链接,回收资源;修改容器配置,增加线程池大小以及等待队列长度等。然后选择第三种方案进行详细分析,具体对象是Tomcat和JBoss。比如在分析过Tomcat对Comet的支持后,作者得出结论:

总体上来说Tomcat实现了部分对于Comet的支持,但是没有对异步服务流程作很好的支持,无法在开发中使用(简单顺畅的使用)。

而在文章后半部分对异步服务处理Servlet和普通Servlet所做的性能测试分析则表明:就纯粹从处理效率来说,采用事件处理方式在线程切换过程中存在着一定的损失,但是就我们使用异步请求处理的本意来看,对于在高并发下对后端依赖无法避免的性能损耗情况下,异步请求解决了连接耗尽的问题。

阅读全文:Web请求异步处理降低应用依赖风险

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

方案探讨 by tsai samuel

针对文中的这个性能问题,增加集群中的服务器数量或是增加一个服务器上应用服务器的实例,或许是更加实际的一个解决方案。这样,不会因为引入comet而改变编程或架构模型。

Re: 方案探讨 by wster andy

很奇怪,我回复的内容怎么没了.

关于解决方案2 by wster andy

关于主动断开连接,回收资源. 我遇到过一个应用场景,在web服务端出现数据性能下降,应用处理能力低时,
主动结束请求,返回一个特定的内容给客户端(IE等).

我的做法是: 启动一个超时监控的线程, 每个请求都在这个线程中登记一下,超时线程不停地轮询堆栈中的消息
发现有超过规定时长的,就主动结束掉. 代码是这样处理的:
try {
PrintWriter out = servletResponse.getWriter();
out.println(strResponse);
out.flush();
servletResponse.flushBuffer();
out.close();
} catch (Exception e) {
...........
}

实际引用和测试的时候发现,在tomcat上客户端口可以立即接收到服务端返回的内容,但是在weblogic上没有立即返回, 需要等到
应用结束才能真正返回,就是说没法中断servlet的现场请求.

Re: 关于解决方案2 by Lin Tony

受教了!

Re: 关于解决方案2 by 田 乐

能够在Servlet模型里面基于NIO和Comet加入Event Driven的连接肯定会改变一些长链接的场景的效果,比如耗时的后台操作时的progress bar通知,后者一些真正的基于事件的及时通知。感谢这篇文章的帮助。不过文章里面测试服务能力的代码不知道是否可以模拟实际场景?因为如果是Event Driven,前面一定有负载均衡来保证服务器的持续连接在一个合理的值以下,因为每个连接都是长连接。它替代的还是以前常用的频繁轮询的方式,在那样的场景下遵循的是快速服务快速释放连接,所以并发可以很高。我觉得对于这种异步Servlet我们应该可以写个更贴切的“性能”测试^_^

Re: 关于解决方案2 by cen wenchu

好的啊^_^,一起研究,只是初步研究,后续深入学习一下,看看是否对实际工作有帮助。

Re: 关于解决方案2 by Jiang Jim

谢谢诸位分享。Web请求异步处理确实是一个很有前景的特性。servlet3.0将这一技术目前各类流行的实现通过标准进行了约定,它将使得这一技术得到更多的使用。
Servlet 3目前已经基本定稿,现在处于PROPOSED FINAL DRAFT状态。Servlet 3目前版本已经给出了标准的关于异步处理的接口,并提供有AsyncEvent和AsyncListener来进行异步消息处理。

GlassFish V3的nightly build已经基于Servlet 3.0的标准给出了实现。
请参阅GlassFish Quanlity论坛上关于这方面的讨论:
markmail.org/message/nn63p7auoghd5ge2

有兴趣的朋友可以通过以下链接下载GlassFish V3的nightly Build:
download.java.net/glassfish/v3/nightly/

分而治之 分而治之 分而治之 by Wong Peter

多线程是站在单应用的角度去考虑解决方案
分布式计算是在多机协作的角度去考虑解决方案
Erlang在单机多处理器的角度去考虑解决方案

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

8 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT