NO.18 Web应用报表系统优化策略(含润乾RunQian Report常用优化点)

来源:互联网 发布:王军邦 气象数据 编辑:程序博客网 时间:2024/06/05 16:28

一般报表系统存在的问题(根据严重程序从重到轻列出):
   1.报表系统经常OutOfMemory宕机
     OOM诱因一般有二:
     a.清单类报表内存消耗大,极易OOM
     b.用报表的客户进行报表查询时间集中,并发严重
   2.报表查询速度慢,客户等待时间长,期间容易出各种各样的问题

   3.只有“在线报表”的系统使用不便
     a.有时任务紧,客户经常半夜做报表
     b.同第2点,一个报表可能需要N个小时才出来,客户等待期间页面不能动,要是一不小心关了,一下就精神崩溃了
  
针对以上几个问题我们想出以下解决策略:
1.建立中间表定时提数-加快库查询速度
   这样,由即时查询分摊至平时,查询速度大大提升。

2.将润乾中需要二次计算的改至存储过程实现-降低Web应用的内存消耗
   原来在润乾中设计了大量二次业务计算,实际上是把一部分数据提取到了内存中,将这部分改为存储过程由数据库去执行,速度快且返回的数据量也剧降。

3.建立离线报表任务调度机制-改善并发处理及客户体验
   将所有的报表查询形成一个任务记录,有以下好处
   a.任务生成和任务执行剥离
      *这样一来,任务生成的应用成为前台,由于几乎没有什么消耗,这个应用不会OOM。客户体验大为改善
      *任务执行应用可以建立多个,充分利用服务器内存
        在一个32位服务器上,一个应用可分配的JVM是有限的,一般不能超过3G
        分成多个应用的话,对于一个16G的服务器,每个应用分1.5G,我们可以分成3~5个任务执行应用
        就算碰到变态客户的大报表,一般也就能搞死其中一个,不耽误其它应用干活,也给了我们充分时间进行处理
   b.可以离线调度,可以周期执行,还可以重复执行
      *客户可以设定任务执行时间,原来半夜搞报表的白天定好离线任务,第二天一上班就可以拿到结果了
      *大多报表有周期性,一般可按日、周、月设定,统统搞定
        复杂点儿的还有平移型周期(查询起终期随周期一同变化)、累加型周期(起期不变,仅终期变化)
      *任务的并发执行自己控制,不再依赖润乾、Quartz
        每个任务执行应用的并发任务数自己写配置文件配上Timer发起线程搞定
      *重复执行
        由于有些报表需要设置的内容很多,但不同的报表有可能只是同一类报表而一小部分参数不同。
        OK,你可以根据一个已有报表改巴改巴生成一个新的报表
        对于出错的报表,要是客户设置的问题,客户可以修改一下再次执行,要是程序问题,升级修正了再来...
   c.方便监控,利于对任务的执行情况做分析
      *每个报表的执行时间,结果行数,失败原因都可以记录下来了
         整个对报表任务的统计分析,研究客户的使用习惯、研究任务的失败原因从而进一步改进
         写个任务实时管理页面,时不时看看那些执行中的任务有没有变态的,点下儿按钮,给它interrupt了,省得祸害我们系统......
      *对于那些闲着没事儿玩报表系统的(查询的东西没有业务意义),我们导出来让总公司客户看,他们再拿着挨个打电话骂......
        OK,我们的报表系统终于消停了...
  
  
润乾优化点
1.Excel导出按分页分成多个Excel文件后打包成一个zip文件

   Excel是一个吃内存的大户,分成多个分别生成可以有效降低内存消耗峰值(注意,分成多个sheet并不能降低有效降低内存消耗,最终还是一个大Excel嘛~)
分页:
http://www.runqian.com.cn/archives/1273.html
分Excel:http://www.runqian.com.cn/archives/976.html
 

2.润乾缓存、并发等其它配置
RBP的参数配置文件reportConfig.xml介绍
http://www.runqian.com.cn/archives/1768.html
报表缓存的配置
http://www.runqian.com.cn/archives/1429.html

 

转载请注明本文地址:http://blog.csdn.net/amosryan/archive/2010/04/08/5461491.aspx

原创粉丝点击