您当前的位置:首页 > 计算机论文>计算机应用论文

基于SSI框架的高性能网站服务器端优化的问题和

2015-07-18 09:46 来源:学术参考网 作者:未知

 1 引 言
  随着互联网络的普及,网上的用户群体数量不断增加,网站的访问流量也呈指数式增加,例如facebook拥有8.9亿的用户,每天要处理9200亿的用户web请求。很多网络服务商因为网站没有经过优化,一旦访问量大就显得不堪重负,体现在服务器不能及时处理用户的请求,用户需要长时间等待。因此搭建高性能的网站来满足不断增长的访问量已成为迫在眉睫的问题。高性能的网站主要体现在响应时间较短、并发数较大、吞吐容量较大等方面。目前,已经有一些资料针对web前端进行优化,而针对服务器端程序优化的研究很少,本文主要研究通过JSP静态化、多线程并发优化从而将网站性能进行提升。
  2 网站优化目前的研究情况
  《互联网周刊》中提出通过“集群”软件来实现多个服务器之间的高速切换,确保服务器系统的高响应[1]。韩涛在《高性能电子商务网站前端设计理念研究》中指出“在网站前端通过合理设置缓存和网站文件的压缩”来达到提高网站性能的目的[2]。也有文献提出通过“减少DNS查找”,“优化CSS”,“图片压缩”等方式来提高网站性能[3] [4]。这些策略在一定程度上可以缓解服务器的压力,但是存在着一定的问题。如“集群”方式,是通过引入多个服务器协同工作,引入多个服务器势必造成搭建网站的费用增加,对于大型的网站,如网易,淘宝可以实现,但是对于中小型网站,由于投入的经费有限,此种模式可行性不高;通过“web前端”合理设置这种方式,可行性较好,但主要针对的是客户的浏览器的缓存和图片压缩等方面进行优化,没有考虑服务器方程序的优化,优化的程度受到一定的限制。通过查阅资料,发现在国内服务器端优化的研究资料非常少,因此,文中提出了基于服务器端的优化策略,策略中包括JSP静态化,多线程并发等技术,并将这些优化策略引入到咸阳师范学院图书馆网站中。
  3 JSP静态化
  3.1 未静态化的JSP执行情况
  服务器接收到客户方浏览器发出的访问JSP页面的请求之后,服务器先将JSP文件编译为成为Servlet文件,然后对这个Servlet编译、执行,查询数据库之后,将动态拼凑的代码返回至客户端。如下图1所示。
  从客户端发出浏览请求到请求的页面显示出来所等待的时间受以下三个因素影响:
  1)服务器编译JSP文件并执行所需要的时间。
  2)读写数据库所需要的时间。
  3)客户方网络的带宽,带宽会影响服务器接收请求以及将处理结果反馈的时间。
  第一个因素通过JSP静态化策略可以改善访问效率,第二个因素借助缓存技术能减小访问时间。
  3.2 JSP静态化
  多个客户同时访问同一个服务器中的JSP页面,服务器需要对每个请求的JSP文件单独进行编译,执行,响应时间会比较长。但是如果将客户请求的JSP页面静态化,也就是转换成html文件,这样不需要经过服务器的编译,可以直接加载到客户浏览器上显示,可以有效降低服务器负荷。转换成静态页面适合蜘蛛抓取信息,另外对搜索引擎的SEO优化起到很好的效果。JSP静态化的执行过程如下图2所示。
 JSP静态化包括以下三个步骤:
  1)定义一个继承"JspWriter"的类,覆盖JspWriter的输出函数,数据输出到指定的文件中。
  2)定义数据库查询并获取数据。
  3)读取网页模板,添加数据后生成新的静态网页。
  网页模板可以通过FreeMarker来定义。FreeMarker是基于模板生成文本输出的通用工具, 使用纯 Java编写。使用FreeMarker可以生成 HTML页面,由FreeMarker生成页面,通过模板显示准备的数据[5]。FreeMarker的工作原理如下图3所示。
  4 基于SSI框架的高性能网站的搭建
  应用JSP静态化,数据缓存等高性能网站策略搭建了咸阳师范学院图书馆网站。该网站采用SSI框架技术,使用My sql数据库管理软件,应用FreeMarker模版引擎。
  SSI 是struts,spring和ibatis的一个集成框架。
  4.1 网站系统分析
  图书馆网站分为用户管理,角色管理,日志管理,任务管理,通用页面管理,列表页面管理6个模块[10]。网站的系统结构图如图4所示。
  4.2 图书馆网站提高性能的策略分析
  图5说明了本文提出的高性能网站的六大策略的关系,定时器在这些策略中起核心作用,它控制生成静态网页的时间和将缓存的数据写入数据库的时间[11][12]。并发技术和多线程技术的引入是为了更高效的将数据写入缓存。线程池是高效管理数据库的连接的一种方式。
  1)JSP静态化技术
  网站使用FreeMarker作为模板引擎,利用FreeMarker的Configuration类的getTemplate方法生成模板对象,利用模板对象的process方法将数据根据模板写回指定路径静态文件中,这里的模板是事先定义的以ftl作为扩展名的网页模板。
  静态化核心算法如下:
  public static void crateHTML(Object, String, String) {
  Configuration freemarkerCfg = new Configuration()
  freemarkerCfg.setEncoding(Locale.getDefault(), "UTF-8")
  Writer out ,Writer outStream
  OutputStream fileOut
  Template template=freemarkerCfg.getTemplate(templatePath, "UTF-8") template.setEncoding("UTF-8")
  String htmlPath = ConfigRuntime.getBaseTargetPath() + targetHtmlPath
  File htmlFile = new File(htmlPath)
  fileOut = new FileOutputStream(htmlFile)
  outStream=new OutputStreamWriter(fileOut,"UTF-8")
  out = new BufferedWriter(outStream)
  template.process(data, out) }
  FileUtils.close(fileOut)
  FileUtils.close(outStream)
  FileUtils.close(out) } }
  2)缓存、多线程、并发 技术
  使用缓存技术可以将那些频繁访问的数据,以及那些需要大量处理时间来创建的数据存储在内存中,从而提高系统性能。
  缓存技术分为操作系统磁盘缓存,数据库缓存,应用程序缓存,Web服务器缓存,客户端浏览器缓存。应用程序缓存主要是减少对数据库的查询,而Web服务器缓存可以减少对应用服务器的请求。可见,缓存技术的应用领域是非常广的。本文主要针对的是应用程序缓存。
  为了避免多次访问数据库,将用户的session、角色信息和菜单信息存放在全局静态map中。frame.base.memory中的一个类缓存了用户 session 中的菜单,另外一个缓存了所有角色和菜单信息。
  Jave web启动了多个线程将数据加入缓存提高访问效率[13]。多线程操作时对某些变量设置读锁或者写锁,只有拥有写锁的线程才可以修改变量的值,以此避免多线程同时修改变量的值,造成变量的值不一致。
  3)数据库链接池
  使用java创建jdbc数据库连接速度慢,当创建一个jdbc 连接之后,数据库访问结束后需要关闭连接,下次访问数据库还需要重新创建,效率比较低。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。
  程序中可以设定连接池最大连接数来防止系统与数据库连接的数量,也可以通过连接池的管理机制监视数据库的连接的数量和使用情况,为系统开发、测试及性能调整提供依据
 图书馆网站项目通过spring来管理数据库链接,在spring-core.xml中定义了数据库初始连接的最大数为20,最小数为1,一个连接在池中最小的生存时间为300秒。
  配置文件的核心代码如下:
  <!-- 配置初始化大小、最小、最大 -->
  <!-- 配置获取连接等待超时的时间 -->
  <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
  <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
  4)定时器技术
  通过定时器可以设定静态页面生成的时间以及缓存数据写入内存中的时间。可见,上述的JSP静态化以及数据缓存技术必须与定时器相结合才能发挥定时生成页面和将缓存数据写入数据库的作用。
  图书馆网站中设定有两种定时器,分别是写入数据的timer定时器和定时生成页面的Spring定时器。Spring定时器在配置文件spring-quartz.xml中定义。
  5 测 试
  网站搭建在浪潮NF5240M3服务器上,处理器英特尔XeonE5-24070@2.20GHz,内存16GB,主板浪潮NF5240M3,操作系统 Windows 2008R2 Server Standard 64位。使用Jmeter测试性能[14],主要测试指标有响应时间、并发数、吞吐量[15]。
  1)响应时间测试
  从打开浏览器窗口输入域名到返回页面需要的时间如下图6所示,累积花费时间588ms。
  如果网站没有优化,所需要的时间如下图7,累积响应时间7518ms,经过优化系统提速12倍。
  2)并发数和吞吐量测试
  (1)测试设置100个线程,每秒有10个线程访问网站,每个线程循环5次,累积访问网站500次。
  如下图8所示,网站系统的吞吐量是每秒处理50.2个请求,在图中Label表示请求类型,#sample表示样本数目,Average是图形报表中的平均值,Median是图形报表中的中间值,90%Line是指90%请求的响应时间比所得数值还要小,Min代表服务器响应的最短时间,Max表示服务器响应的最长时间,Error表示请求的错误百分比,Throughout表示服务器每单位时间处理的请求数,KB/sec表示每秒钟请求的字节数。表9为未优化的网站的聚合图,在图中吞吐量为每秒钟处理46.1个请求。经过优化,吞吐量提高了23%。
  (2)测试设置500个线程,每秒有10个线程访问网站,每个线程循环5次,累积访问网站2500次。网站的平均吞吐量是每秒钟2746K字节。如图10所示。
  图11为没有优化的网站500个线程访问量的聚合图,吞吐量为每秒种2612K字节。优化后吞吐量提高了5%。
  6 结束语
  本文基于SSI框架提出了web后台优化策略,从JSP静态化技术、缓存、多线程、并发技术、数据库连接池和定时器等方面进行优化,缩短了系统的响应时间和吞吐量。下一步工作是继续研究这些优化策略对后台优化的不同效率。
  参考文献
  [1] 陈谷龙.网络前端设计[J].互联网周刊, 2000,9(04):85-86.
  [2] 韩涛.高性能电子商务网站前端设计理念研究[J].江苏商论,2011,(05):50-52.
  [3] 马淼.高性能网站优化设计[J].中国传媒科技,2012,(05):35-37.
  [4] 武俊峰,朱喜梅.基于电子商务的网站设计与性能优化研究[J] .自动化技术与应用,2008,( 07):21-23.
  [5] 李昊,刘志镜.线程池技术的研究[J].现代电子技术,2004(03):77-80.
  南京工业职业技术学院学报,2011(02):56-58.
  [7] 约翰逊.Spring框架高级编程[ M ].蒋培译.北京:机械工业出版社, 2006 .
  [8] 蒋玉婷,刘素访. 基于Struts架构的大型购物系统研究与实现[J].电脑知识与技术,2010(33):21-22.
   . / /Proc ICD C c99. Aust in , May 1999 .
  [10]徐大伟. 基于MVC和iBatis的创新教育网络平台的实现[J].长春大学学报,2009(12):41-42.
  [11]张建超,张连堂.网站架构演变技术研究[J].现代计算机(专业版),2012 (4) :53-55.
  .重庆工学院学报,2008(05):60-63.
  .淮阴师范学院学报(自然科学版).2006(05):320-321.
  .智能计算机与应用,2012(02):32-33.

相关文章
学术参考网 · 手机版
https://m.lw881.com/
首页