SJo*_*Joe 5 xml performance jboss mq ibm-mq
我有一个应用程序,其中消息以每小时70K XML的速率传输.我们使用这些XML消息并将其存储到中间队列中.创建中间队列是因为我们需要满足24小时消耗所有消息的SLA.我们可以在24小时内使用XMLS并将其加载到内部队列中.在将其加载到内部队列之后,我们处理XMLS(解析,应用非常少的转换,执行非常少的验证)并将数据存储到高度规范化的数据模型中.我知道数据模型会对性能产生巨大影响,遗憾的是,我们无法控制数据模型.目前,我们需要3.5分钟来处理2K消息,这是不可接受的.对于2K消息,我们希望将其降低到1分钟.以下是我们迄今为止所做的工作:
1)适用时应用索引.
2)使用XMLBeans来解析XML(每个XML的大小不是很大)
3)删除了所有不必要的验证,transformatios等.
该应用程序运行于:
操作系统:RHEL 5.4 64位
平台:JDK 1.6.0_17,64位
数据库:Oracle 11g R2 64位(2节点集群)
外部MQ:IBM Queue
内部临时存储MQ:JBoss MQ
应用服务器:Jboss 5.1 .0.GA(EAP版)
我们使用和处理XML消息的顺序非常重要,因此我们无法进行并行处理.
我们还能做些什么来提高性能吗?
WebSphere MQ,即使在小型服务器上,卸载消息的速度也比您描述的速度快得多。WMQ V7 的Windows性能报告在客户端通道上测试每秒超过 2,200 个 2k 持久往返(一个请求和一个回复)。也就是说每秒超过 4,000 条消息。
您的情况的瓶颈似乎是处理消息的延迟以及对按特定顺序处理消息的依赖性。可以为您带来最大性能提升的选项是消除顺序依赖性。当我在银行工作时,我们有一个系统,可以按照交易到达的确切顺序发布交易,每个人都说这个要求是强制性的。然而,我们最终修改了系统,在白天执行备忘录发布,然后在稍后的步骤中重新发布。备忘录发布以任何顺序发生,并支持并行性、故障转移和多实例处理的所有其他好处。一旦事务全部进入数据库,最后一篇文章就按逻辑顺序(实际上是对客户最有利的顺序)应用事务。序列依赖性将您锁定在单例模型中,并且是异步消息传递的最坏情况要求。如果可能的话,消除它们。
另一个需要改进的领域是消息的解析和处理。只要您坚持序列依赖性,这就是提高性能的最佳选择。
最后,您始终可以选择以更多内存、CPU、更快的磁盘 I/O 等形式投入金钱来解决问题。本质上,这是用马力解决软件架构问题,从来都不是最好的解决方案,但通常它可以为您赢得足够的时间来解决根本原因。
| 归档时间: |
|
| 查看次数: |
3827 次 |
| 最近记录: |