英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料
基于JavaEE的Web应用系统的性能优化研究
摘要
随着信息发展,Web应用系统被越来越多的企业和组织所应用。随着用户的增长,并发的访问量也在提升,这导致了Web系统的糟糕的访问质量。有一些高并发的解决办法,但他们只解决了性能问题的一个方面,并且小中企业要考虑成本问题。此论文将会研究影响着中等Web应用的性能因素,旨在建立一个高可用性,高并发,高扩展,低成本的Web应用。基于影响Web应用系统的因素,线上商城系统被优化了,并且Web应用系统的服务支持被调整到以适应系统要求的状态。并且,优化了SQL语句,优化了Java代码层,优化了用户体验层,完成了性能测试和分析。
1.介绍
随着科技和社会的进步,人们的生活方式逐渐改变,越来越多的人使用Web应用系统。访问系统服务的速度越来越慢,甚至在崩溃没有响应的情况下,高并发的问题也开始被注意到,逐渐引起关注。在短短的几年时间里,高并发的问题已经有了几种解决方案。国外的LiveJournal公司考虑到服务器横向扩展的问题,提出了高并发的Web服务器技术。在高并发问题的情况下,物理机器的硬件升级往往会产生更好的收益。但是,单个物理机的处理能力是有限的,LiveJournal还提出了一种划分技术,根据业务需求扩展压力数据库[3]随着分布式和云计算的发展,Web应用系统的服务能力越来越强。依托分布式服务和云计算平台,Web应用系统的性能问题已经得到解决,但仍然存在很多问题。虽然现在云服务器相对便宜,但云计算服务相对昂贵。较早的框架,如SSH大多数中小型企业仍在采用框架和单服务器部署。因此,考虑到升级和维护的成本,中小企业应用系统尚未实现高并发。本文通过对网上商城性能的优化为中小网站提供优化方案参考,旨在用更少的成本构建高可用、高并发、高扩展的Web应用系统。
2.对于影响Web应用系统性能的因素的分析
对于高并发Web应用系统,首先想到的是淘宝、京东等大型电子商务Web应用系统。在每年的“双十一”期间,对服务器的访问次数很大,大量的数据库操作可能会导致商品无法交易、页面响应缓慢甚至崩溃等问题,从而降低了用户体验,降低了平台的运行效果。因此,系统在运行过程中可能遇到的问题应在系统设计的一开始就加以分析,并通过适当的技术加以规避,便于扩展和维护[4]。因此,分析影响Web应用系统性能的因素是至关重要的。在分析影响Web应用系统性能的因素时,应从以下几个方面进行分析:
2.1用户体验层
用户体验是用户打开Web应用系统时响应时间给用户带来的感受,受到系统吞吐量、前端脚本错误率、异步请求错误率,静态资源404等问题的影响。当请求的资源中存在上述问题时,请求将超时,导致整体响应缓慢,用户体验差。因此,有必要分析该制度是否存在上述问题。
2.2网络层
服务器网络带宽的大小决定了Web应用系统的响应速度。理论上,退出带宽高的静态资源加载速度会更快,一般可以用ping命令测试网络传输速度。
2.3服务层
服务器承载的请求数量有限,服务器的负载状态也决定了系统的服务效率。因此,应该对服务器进行分析,看服务器是否存在某个方面和某个配置方面。
2.4代码层
系统的速度也是由代码质量决定的。如果系统有多个查询比如多个嵌套循环查询,在用户体验层会显示响应慢甚至崩溃。因此,在开发和优化时,应该重视Java语言的性能。
2.5数据存储层
在高并发Web应用系统中,数据库并发问题是一个难以解决的问题。它受SQL语句、锁机制、并发等约束,因此在系统数据库性能分析中,应重点关注SQL和频繁数据库操作以及并发的“脏读”问题。
2.6物理硬件层
这一层主要体现在系统业务处理上,受CPU和内存的影响。
3.基于网上商城系统的Web应用系统性能优化方案
为了证明其可行性,本文针对基于Java语言开发的网上商城系统进行了优化设计、分析和比较,提出了相应的理论解决方案,并在系统中逐步实现,最后通过相应的比较测试完成了应用系统的性能优化。
3.1线上商城系统模型设计
3.1.1系统功能设计
在传统商城网站中,用户访问网站的主要目的是选购商品,因此在网上商城设计中,应该有商品展示、商品分类、购物车、下单、支付等功能。为了完成网上购物的所有流程,网上商城系统的功能大致可以分为以下六个模块:轮转图模块、用户模块、商品展示模块、购物车模块、订单模块、支付模块,见图1
3.1.2数据库设计
为了满足网上商城系统的功能需求,在网上商城中设计了六个数据库表,分别是旋转图(ad)、分类导航菜单表(cat_item)、评论表(comment)、商品列表(goods_items)、订单表(shop_orders)和用户表(user)。
3.2系统性能问题分析
3.2.1用户体验层问题分析
网上商城系统首页是用户要求最多的页面。在首页中,浏览器需要加载大量数据,如:获取静态HTML,JS和CSS,获取用户登录信息,获取左侧导航栏分类数据,获取旋转图,获取页面商品列表和获取购物车商品数量等。
分类左侧导航栏的数据、旋转图的数据以及页面上的产品信息都要从数据库中读取和显示。大量的读取操作会导致数据库压力和服务器带宽占用等问题。在系统优化中应尽量避免频繁的查询数据库操作,尽可能的分散单个服务器的压力,以减少服务器响应时间,提高用户体验。
3.2.2服务层问题分析
本文中使用的Web服务器是一个免费的、开源的tomcat服务器。默认情况下,对于tomcat配置文件中的一组给定配置,JVM堆内存大小和请求的最大连接数较低。因此在配置上有更大的优化空间。
3.2.3数据存储层问题分析
问题包括超出售额、频繁操作订单、不重要的数据存储和数据库并发。
3.2.4代码层问题分析
Java提供了很多高并发的开发接口和类。因此,开发和优化不仅要关注业务逻辑的性能,还要关注相关接口和方法的使用以及相关的开发规范。同时,在代码片段中合理使用缓存技术也可以给系统性能带来好处。
3.3系统优化策略
在影响Web应用系统性能的因素中,网上商城系统的网络层和物理硬件层可以通过租用或搭建高质量的服务器来解决[5],所以不在网上商城性能分析和优化的范围之内。本文旨在优化在线购物系统的性能问题和解决方案:
3.3.1用户体验层优化策略
减少静态资源加载:减少HTTP在前端尽可能的请求优化,也就是减少JS等静态资源的引入。
首页静态:采用了页面静态处理技术,即页面长时间不更新进行静态处理,更新数据时删除静态页面。如果这个静态页面在用户请求时存在,他们将直接访问它。如果没有,它们将重新生成静态页面。(HOW?)
前端框架:目前前端开发技术发展迅速,产生了很多优秀的开源框架和JS脚本,比如jQuery,bootstrap,easyUI。在网上商城的实现中,采用了较为成熟的bootstrap前端框架来代替系统的原生页面。使前端代码干净美观,同时避免过多的代码重复
后端分页:使用后端分页代替前端分页。页号和页尺寸通过分页插件和异步请求传回以获取数据,防止了大数据量造成的加载延迟。并使用jQuery的方法实现数据的动态刷新,减少页面数量HTTP请求
3.3.2服务层优化策略
Tomcat服务器优化默认的Tomcat通常用作新手部署中的生产环境。默认的Tomcat配置具有相对较低的内存和线程,这将削弱生产环境[6-7]中的服务器性能和并发性。
优化tomcat线程:在tomcat的默认配置下,最小空闲链接线程只有10个,最大链接为75个,最多连接数为100个。为了提高服务器服务的并发性能,需要对其配置进行修改。当然,链接线程的数量也不是无限的,这也受到主机操作系统内核参数的影响。Windows最大并发配置在2000左右,Linux在1000左右。Linux操作系统目前被大多数Java Web服务器使用,在配置tomcat服务器时,还应该考虑服务器内存问题。为了保证服务器的正常运行,最大并发连接可以设置在600和700之间,并逐步探索最优配置的选择。
优化tomcatIO:Tomcat是一种单连接、单线程模式。在高并发中,线程资源非常重要。线程分配后,后续请求将被阻塞,导致页无响应。因此,模式改为同步非阻塞模式,即NIO模式,通过选择器进行同步,减少线程消耗的同时避免阻塞,保证了服务的可服务性。它的原理是在有请求时将数据存储在缓冲区中,在线程空闲时通过缓冲区进入线程操作,从而减少了CPU反复切换IO连接造成的时间和性能损失
3.3.3Nginx代理优化
反向代理服务是一对多的服务,其原理是通过分发请求来实现集群目的[8]。一般的Web服务器是对一个线程的请求,服务器中的线程是有价值的,当线程数量过多时,线程切换会占用大量的CPU时间。但Nginx是多路复用模式,Nginx代理可以更好的提升服务器性能。Nginx已经是一款优秀的负载均衡工具,只有使用Nginx的默认配置,才能达到良好的负载效果。但是,对于高并发的项目,还是可以根据项目需求进行优化[9]。对于Nginx服务器的优化主要体现在配置上,而对于在线商城系统,所需配置如下:
配置服务进程数:由于一个单核CPU在一定时间内只能处理一个进程,因此可以根据Nginx进程的服务器核心数合理配置进程数,从而保证Nginx的最优执行。一般来说,Nginx进程数等于CPU核心数,从而减少了CPU进程切换带来的时间损失。在网上商城系统中,采用双核CPU服务器,因此将服务进程数配置为2是最合理的。
配置进程连接数:进程连接数是连接到Nginx服务器的最大进程数。当然,理论上设置的进程连接数越多,Nginx能支持的并发就越多。为了让服务有更好的并发性能,将最大进程数设置得很高,然后逐步测试,在允许的服务器内存范围内寻找最佳配置。由于此调优是在本地计算机上执行的,因此进程数被设置为较小。
同时打开文件数量的系统:由于此系统部署在Linux操作系统中,Linux中的所有服务和配置都是文件,因此当Nginx使用某个服务时,可以视为打开了一个文件,因而如果连接数量很大,则报告最大打开文件限制错误。因此,考虑系统的业务需求,增加打开文件的数量。
打开Send file:Send file提供了快速的TCP传输,并减少了CPU开销,因为它暂时将数据存储在缓冲区中,在需要大文件传输的系统模式下,应该将其关闭。本系统为网上购物系统,不涉及大文件传输,因此打开send file可以提高系统的响应速度
3.3.4数据存储层优化策略
超卖问题:本文所涉及的应用系统是一个网上购物系统。根据其性质,当用户将商品加入购物车并产生订单时,系统应保证库存的正确性,防止过度销售。还有,网购商城需要处理高并发。根据以往的经验,增加锁限制库存时,往往会出现新的问题,从而导致系统性能下降。因此,应提出另一种优化方案来处理这个问题。
在增减库存和抢购商品方面,假设有50件商品要出售,那么必须使用缓冲区,避免频繁读写数据库。在Redis中,计数器用于判断用户是否参与了抢购。如果有一个计数器加一,用户的购买信息就会写入缓存。当计数器为50时,所有后续的购买请求都会被拒绝,达到峰值流量剪裁的目的。
考虑到正常销售的货物并发量相对较小,可以采用如下查询和更新操作来避免过度销售:
lsquo;update goods set count = count – num where goodsId = 15535 and count – num gt;= 0rsquo;
但是在高并发的情况下,使用这种读写方式是很危险的,所以解决超卖问题的原则也可以采用。通过set命令可以将货物数量存储在缓存中,decrby命令可以用于库存减少操作。如果退货值小于零,则商品不足以进行购买操作。同时,incrby命令用于增加库存。因为Redis是原子的,应该添加一个分布式锁来增加或减少库存,以防止“脏读”。这样,可以减少数据库读写的次数。
订单频繁操作问题:关于订单操作,如果用户产生订单并锁定了产品,但过了一段时间用户停止购买产品,那么用户应该解除库存,不应该允许长时间锁定商品。如果用户存在恶意锁定商品,将对系统和商家产生较大影响。另外,如果大量用户同时恶意增删订单,那么系统会对库存进行频繁的增减,这会大大降低数据库的性能。这些都是体制内应该避免的问题。为保证系统平台的运行,应针对该问题给出合理的优化方案。
对于增加或减少库存的操作,必须考虑用户的操作是不平常的。比如,用户添加商品并生成订单锁定商品,但长时间不付款,导致了占用库存的问题。因此,当用户在网上商城中生成订单时,用户并不直接操作数据库。而是将用户的操作和订单信息存储在Redis缓存中,而不是永久存储。用户完成支付后,将订单信息插入数据库,然后在Redis中清除订单信息。这不仅提高了用户提交和查看订单的速度,还减少了频繁读写对数据库造成的压力。
3.3.5代码层优化
Java提供了很多高并
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[267334],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。