问题描述
最近在做一个项目,使用的是flex+ejb+blazeds,通过weblogic发布但是客户端要求返回大量的数据,刷新时间还比较短,由于界面UI采用的是adobe flash builder开发,总感觉好像比较卡weblogic服务器用的时候,数据库查询页优化了很多,服务器自己也优化了下,但总是感觉采用的方式不对或者说设置的不够好,求教,对于数据量很大的实时反馈类web开发,还有什么其他好的框架或者说,原有基础上有什么要改进的 问题补充:有没有必要做集群呢?
解决方案
但是客户端要求返回大量的数据,刷新时间还比较短,由于界面UI采用的是adobe flash builder开发,总感觉好像比较卡 此处可以看出是flash卡 而不是你的后端卡你如何确定的你的服务器比较慢? 还是建议监控一段时间看看 问题在哪? 是页面的问题,还是服务端的问题。服务端可以考虑监控cpu Load average内存数据库慢查询网络IO等
解决方案二:
你可以通过查看服务器 内存,CPU,io占用,网络流量 具体判断是哪个地方问题对于服务器的优化,远比从硬件解决好很多如果大数据量,时效性不高,可以考虑分时段批处理盲目扩大集群,不是明智选择
解决方案三:
这样的设计本身就有问题。为什么每次都要刷新大量数据,为什么不只刷增量?
解决方案四:
第一要务是找出性能瓶颈在哪里,然后对症下药。是在前端展示,还是在服务端处理,还是在数据库访问。对于服务端,考虑使用数据缓存(如memcached)、反向代理服务器缓存(如Nginx)、集群+负载均衡(如LVS或自己实现)、静态资源与动态资源分离(Apache+Tomcat)等。对于数据库访问,如果成为瓶颈,如果是访问一张表很慢,可能要考虑水平切分;另外可考虑读写分离(读和写访问不同的库);还有如果表很多放在一个库里很慢,就进行垂直切分,按功能模块划分为多个库。数据切分后最大的问题是整合,可以自己实现,也可以考虑使用Amoeba或MySQL Proxy。一般,使用缓存的策略优于集群。先从软件的角度去解决问题,在无法满足更高需求的情况下才考虑增加硬件资源。
解决方案五:
首先定位问题。通过weblogic的console去看看队列有多少,每个队列的耗时。这样能够知道是weblogic是否有必要做集群。如果队列够用了,耗时比较长,那说明是获取数据占用时间长,做集群仅仅是负载分发、单点故障(如果你的队列总是堵塞,可以考虑做集群)。确定是取数据问题,就先要定位到底是取数据的sql执行太久,还是对数据有逻辑处理,如果sql执行太久,就优化sql(通过执行计划等工具来定位),如果业务逻辑处理太久,就打印时间戳。最后就是数据传输flex端展现,flex是使用什么方式与后台交互的,http?webservice?大数据量的话,建议不要通过webservice的soap协议,因为xml解析比较耗时。
解决方案六:
数据量很大,数据库压力怎么样?展示大量数据的时候,如果变动不大,建议使用缓存服务器,memcache之类的,第一次查询的时候把数据集放到缓存服务器,翻页的时候直接从缓存服务器取,除了第一次慢些,翻页的时候非常快。你用的flex,可以在页面初始化,组件还未完全展示的时候就触发后台去缓存这些数据,在组件初始化数据的时候就可以直接从缓存服务器拿了。