40w会议投票系统优化方案
最近2天谈了一个项目,根据提出的需求是,该系统本来是属于一个大系统的分割出来的一个很小的系统,但是由于是并发关系会耗费资源很大,所以分割出来。据了解,系统采用的mysql+java+tomcat,他们将业务逻辑放在数据库中采用存储过程处理,界面采用的js封装的控件实现,系统运行就很快吃光了内存(8g)。
系统解决方案可以重几个方面入手:
(1) 系统采用的是Java+Tomcat+Mysql,可以对Java虚拟机JVM进行配置优化。
JVM一般现在的垃圾回收都是采用的分代回收的方式实现的。配置Java –Xmx3800m –Xms3800m –Xmn2g –Xss128k –XX:+UseParallelGC –XX:ParallelGCThreads=20 配置内存和并发能力。详细配置不做描述了。JVM调优要现场运维测试调优。
(2) 对于40万的用户量系统是不能避免的会承载最大限度40万同时在线预计是最多40万同时在线参与投票。对于三个流程是耗费资源最多的时候进行缓冲池处理,一个流程是用户登录时,用户名密码的验证;第二个流程就是用户投票的时间段系统承受的访问的量,第三个流程就是消息推送,采用多线程对于要推送的用户进行排队推送。
(3) 优化SQL语句比如要在40万用户数据量中的表查询验证用户名密码时,使用limit 1可以提升数据库查询的性能,在此只列举一个例子,针对具体的问题具体分析,采用不同的SQL优化方案。查询建立索引可以增加查询的速度,如果是经常会存入的表就会影响存入的数据,这个要根据实际情况分析。
(4) 用户提交数据是采用局部刷新,即只提交用户需要用到的,一些不改变的数据就不需要进行提交和下载。
(5) 采用负载均衡处理客户端的请求,能够解决上千万的请求并发处理。
该章描述一些处理系统大并发的概要方案,通过测试的数据说明方案的可行性。Mysql数据库采用SELECT * 全查询50万条查询时间1.130秒的时间。
在java中采用数据库连接查询52万条数据花费的时间是3.807秒时间。
采用优化后登录验证只需要1.070秒的时间,这样大用户量登录根本就不是问题。
第3章 总体架构
系统为了方便与其他的系统进行很好的集成采取低耦合,使用WebService开放服务的,服务器端一次开发开放服务接口,移动终端和Web端使用同样的接口。Web展现采用Ajax的界面无刷新功能,只更新需要的部分数据,这样可以减少服务器的压力同时也能够很好的提高系统的体验度。大量使用的资源采用池化,建立缓冲池这样可以减少短期反复创建大对象耗费系统资源,同时使用缓冲池后能够提升系统的访问性能,
第4章 系统技术路线
4.1 Web Service
Web Service是一项新技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如XML和HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。该技术是一个平*立的,松耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
4.2 Ajax
AJAX 指异步JavaScript及XML(Asynchronous JavaScript And XML)。
Web应用的交互如Flickr,Backpack和Google在这方面已经有质的飞跃。在基于数据的应用中,用户需求的数据如联系人列表,可以从独立于实际网页的服务端取得并且可以被动态地写入网页中,给缓慢的Web应用体验着色使之像桌面应用一样。
Ajax的核心是JavaScript对象XmlHttpRequest。该对象在Internet Explorer 5中首次引入,它是一种支持异步请求的技术。简而言之,XmlHttpRequest使您可以使用JavaScript向服务器提出请求并处理响应,而不阻塞用户。
4.3 commons-pool
创建新的对象并初始化的操作,可能会消耗很多的时间。在这种对象的初始化工作包含了一些费时的操作(例如,从一台位于20,000千米以外的主机上读出一 些数据)的时候,尤其是这样。在需要大量生成这样的对象的时候,就可能会对性能造成一些不可忽略的影响。要缓解这个问题,除了选用更好的硬件和更棒的虚拟 机以外,适当地采用一些能够减少对象创建次数的编码技巧,也是一种有效的对策。对象池化技术(Object Pooling)就是这方面的著名技巧,而Jakarta Commons Pool组件则是处理对象池化的得力外援。
4.4 使用LRU算法实现缓存
什么是LRU算法? LRU是Least Recently Used的缩写,即最少使用页面置换算法,是为虚拟页式存储管理服务的。
关于操作系统的内存管理,如何节省利用容量不大的内存为最多的进程提供资源,一直是研究的重要方向。而内存的虚拟存储管理,是现在最通用,最成功的方式—— 在内存有限的情况下,扩展一部分外存作为虚拟内存,真正的内存只存储当前运行时所用得到信息。这无疑极大地扩充了内存的功能,极大地提高了计算机的并发度。虚拟页式存储管理,则是将进程所需空间划分为多个页面,内存中只存放当前所需页面,其余页面放入外存的管理方式。