您的位置: 网界网 > 软件 > 正文

维护遗留应用的实用技术

2014年07月24日 11:51:37 | 作者:陈萍 | 来源:InfoQ | 查看本文手机版

摘要:因为遗留应用程序可能有很多的技术缺陷,从技术和经济上说处理所有技术缺陷是不可行的。所以选择正确的方式需要有策略性。

标签
遗留应用
Perfspy
SQLTracer

遗留应用很少如下面所示:

在这个美丽的图形中,通过定义良好的管道,使得层次和模块块划分清晰,交互便利。模块可以移动,替换,也易于添加,支持那些重要的“特性”:可扩展性,可伸缩性,可维护性……

在现实中,遗留应用更可能如下所示:

如果你是接到维护遗留应用程序任务的不幸开发者,有时你会感到像老鼠在迷宫里;每次开机时,还有更多意想不到的角落和拐弯,甚至是死亡陷阱。

我一直在负责维护这种遗留应用程序已经两年多了,在这篇文章中,我想分享我对如何务实地维护一个大的遗留应用程序的经验。

我强调“务实”,因为遗留应用程序可能有很多的技术缺陷,从技术和经济上说处理所有技术缺陷是不可行的。选择正确的方式需要有策略性。

刺探敌情

我们正在维护的大型的遗留应用程序的简要说明:

大房子标识JBoss 4.0。出于某种原因,JBoss 4.0以一些不兼容的方式进行了部分调整,使其难以升级。所以房子构建的有些孱弱(内部正在漏雨)。两个小房子代表了部署到JBoss上的两个Web应用程序(两个WAR包)。一个房子要小得多,并提供更小的功能。每一个页面必须由两个房子提供。有三个连接池,两个事务的机制,一是自制缓存,一个自制的集群机制,一是自制的RMI机制等。

维护遗留应用程序的第一步是理解它。我们要了解应用程序的每一个细节是不切实际的,但我们可以了解整体概貌:

1.为什么要用两个WAR包服务于单一页面?两个WAR包相互影响,怎么办?开销是什么?我们如何将它们合并?

2.事务是如何处理的?两个WAR包,三个连接池和两个事务机制间的交互是否存在事务失败的风险?

3.我们如何知道性能瓶颈在数据库中还是在代码中?如果在代码中,我们如何诊断?

静态代码分析或者不充分,或者不准确。我们开发了一些工具来在运行时监视应用程序,回答这些问题。我们谨慎地以附加组件形式执行这些工具:他们与应用程序代码不耦合,所以它们不产生我们必须维护的额外代码。有关这些工具的更多详细技术细节,看看我的博客。

SQLTracer

此工具可以打开任何一个网页,跟踪那个SQL查询产生问题,发生多少次,以及耗费时间。很重要的是,它为这些查询产生TKPROF,用于性能故障排除。

技术细节

SQLTracer 使用如下逻辑探测JDBC操作:如果页面跟踪已经打开并在ThreadLocal存储页面信息,一个页面请求获得javax.servlet.Filter的检查。当连接从连接池取出的,他们的行动是由AspectJ 切面来捕获,跟踪SQL语句,调用次数和运行时间。使用Oracle DBMS_SESSION.SET_IDENTIFIER()的连接都标有相同的标识符,它们的活动是使用dbms_monitor.client_id_trace_enable()跟踪。这种技术允许跟踪不同的连接。

Perfspy

PerfSpy是一个运行时的日志记录和性能监控工具。我们用它来监视独立页面,它会记录方法调用日志,运行时间,方法,参数和返回值,总之,它步进调试和存储的后续检查的一切信息,你没必要在IDE做到步进调试。它的运行时代码分析和诊断性能瓶颈。它有一个应用程序的用户界面,以树形式显示了方法调用,并提供方法来操作树:隐藏节点,搜索节点,标记节点诸如此类。方法的参数和值也表现为树的形式。以下是截图:

12
[责任编辑:软件频道 yu_xiang@cnw.com.cn]