一、序言
近十年来,互联网上网人数一直保持着指数增长的趋势,2008年中国互联网络信息中心(CNNIC)发布《第22次中国互联网络发展状况统计报告》,报告显示,截至2008年6月底,我国网民数量达到2.53亿,首次超过X跃居世界第一位,并且中国网民规模继续呈现持续高速发展的趋势,网民数量的增加给未来Web系统设计和运行带来巨大的挑战,火车票售票系统的经常瘫痪就是一个典型的事实,官方说法是:“拥堵情况的主要原因是后台处理系统在承受了每小时800万次流量压力后显现出处理能力不足的问题”,每小时800万次,并发访问量大概是每秒的2000多次,这对于订票Web系统来说,是一个非常大的考验;另一方面,ajax等交互性很强的技术的使用推动了Web2.0的兴起,也给互联网上Web系统提出更高的要求,在保持高性能和高可靠性不变的情况下,要提高系统的并发量和Web应用系统的承载能力。
并发一般分为两种情况。一种是严格意义上的并发,即所有的用户在同一时刻做同一件事情或者操作,这种操作一般指做同一类型的业务。另外一种并发是广义范围的并发。这种并发与前一种并发的区别是,尽管多个用户对系统发出了请求或者进行了操作,但是这些请求或者操作可以是相同的,也可以是不同的。对整个系统而言,仍然是有很多用户同时对系统进行操作,因此也属于并发的范畴。而且后一种并发更接近用户的实际使用情况,因为对于大多数的系统,只有数量很少的用户进行“严格意义上的并发”。
当系统的并发用户增加时,请求的响应时间也增加。服务器的吞吐量是先随并发用户数增加而增加,当吞吐量到达一定峰值后,再增加并发用户数,吞吐量会减少。原因在于当并发用户数少时,向Web服务器提交的请求量不大,服务器处理能力还有富余,所以吞叶量逐步增大;但当并发用户数超过某一值时,由于向服务器提交的请求太多,造成服务器阻塞,反而导致吞吐量减少。我们所说的系统的并发量指系统可承受的最大并发量。
二、数据库系统的性能调整与优化
数据处理是整个Web系统的核心,数据库的性能直接影响Web系统的运行效率。高性能的数据库是高并发Web系统的必要条件,通过对数据库的优化来最大限度的提高数据库的性能。然而数据库系统的调整和优化不是一个一蹴而就的工作,它需要定期维护,定期观察,在发现性能瓶颈时及时制定优化目标、实施优化计划、验证优化效果,这个过程需要管理员不断重复,以使数据库能持续高效的正常运行。
(一)数据库优化的目标
1.消除数据库瓶颈
Oracle的优化的一个重要目标就是消除数据库瓶颈,这些瓶颈有的可能是原来存在的,有的是随着运行环境的变化如并发用户的徒然增加而显现出来的,所以数据库管理员在发现性能瓶颈时及时进行调整。
2.尽可能提高数据处理能力
为了能尽可能的提高数据库的处理能力,减少数据库的响应时间,可以从如下几个方面考虑:提高缓冲区的命中率、减少系统的I/O操作、增加系统的连接数、调整数据库并发査询的用户数。
(二)影响数据库性能的主要因素
很多因素都可以影响ORACLE的性能,下面是一些主要的因素
1.硬件:假如数据库的硬件出现故障或硬件的配置不能充分满足数据库的要求,会严重影响数据库的性能。例如,若计算机的内存不足,将减少ORACLE用于存放最近访问过的数据缓冲区空间,使得操作系统频繁的执行换页操作,导致系统需要额外的幵销。
2.网络:网络速度太低会降低数据库系统的吞吐量,延迟用户响应时间。对网络环境进行合理的优化配置,对Web系统性能提高是很重要的。
3.操作系统:主要指对ORACLE数据库所使用的操作系统合理的选择,并对其资源进行合理配置。
4.应用程序:应用程序的构架、使用代码的执行效率以及与数据库的连接会影响数据库的交互,更重要的是应用程序中SQL语句的效率直接影响数据库的数据处理功能。
5.ORACLE配置:为了获得对所选ORACLE系统最优化的性能,需要对••ORACLE配置进行合理的调整,这是提高数据库性能最直接有效的方法。
(三)数据库初始化数据调整
对ORACLE实例进行调整的基本方法就是对其初始化参数进行合理配置,ORACLE的所有参数都是在Init.ora文件中配置和修改的。ORACLE9i中有797个不同的Init.ora参数,下面主要介绍与数据库并发性能相关的一些限制系统资源的参数:
1.DB_FILES:指定了ORACLE能打开的数据库文件的最大数量,这个参数不能超过操作系统对数据库文件数量的限制。
2.LICENSE_MAX_SESSIONS:该参数指明了系统同时允许的最大用户会话数。当用户的会话数达到该参数指定的值时,只有具备RESTRICTION SESSION权限的用户能连接到该数据库。
3.LICENSEJ_MAX_USERS:该参数指明了管理员在数据库中能创建的最大用户数。创建的用户数达到该值时,将不能创建新的用户,在高并发情况下管理员可以适当的增加该参数的值。
4.MAX_DUMP_FILE_SIZE:这个参数指定了跟踪文件的最大尺寸,如果跟踪文件占用了太多的存储空间,就可以修改这个参数的大小。
5.OPEN_LINKS:这个参数指明了在一个会话中能打开的与远程数据库的最大连接数,这里的连接包括数据库连接、外部程序连接、中间件连接等,这些连接都使用独立的进程。
6.OPEN_LINKS_PER_INSTANCE:这个参数指定了每个数据库实例能接受的处于活动状态的可迁移连接的最大数量。
7.PROCESS:这个参数指定了所有能同时连接到数据库实例的操作系统用户进程的最大数量。这个参数包括了所有后台进程,比如锁进程、作业队列进程和并发执行进程等。在高并发用户下可以适当增加该参数的值。
8.SESSIONS:这个参数指定了操作系统能创建的会话的最大数量。因为每次登录都创建一个会话,所以这个参数也可以有效地限制系统中并发用户的最大数量。如果没有设置这个参数,那么ORACLE将根据PROCESSES参数值确定SESSIONS参数的值,其计算方法是SESSIONS=(1.1*PROCESSES)+5。
9.TRANSACTION:该参数指定了并发事务的最大数量。这个参数的值越大,SGA(System Global Area)需要的内存也越多,此外还需要增加分配给该数据库的回滚段数量。
10.MAX_DISPATCHERS:这个参数指定了系统允许同时运行的调度进程的最大数量。
11.MAX_SHARED_SERVERS:这个参数指定了系统允许同时运行的共享服务器进程的最大数量。如果系统中出现的死锁过于频繁,就需要增大这个参数的值。
12.PARACLLE_MAX_SERVERS:这个参数指定了实例能同时运行的并行执行进程和并行恢复进程的最大数量。随着用户数量的增长,在创建实例时为这个参数设置的值将不能满足用户的需求,所以应当增大这个参数的值。
数据库管理员可以通过ORACLE的UTLBSTAT工具和UTLESTAT工具来监控数据库的性能,找出系统的性能瓶颈,修改相关的参数使数据库持续高效运行。
(四)数据库的内存优化
在ORACLE数据库中,数据存放在两个地方:内存和磁盘。磁盘能以较低的费用存储大量的数据,但内存比磁盘有更高的性能,CPU访问内存的速度比与磁盘之间的I/O操作快数千倍,因此用户希望能尽量通过内存访问数据。在高并发情况下,对数据的访问量都很大,对内存资源的使用必然会存在很大的竞争,为了能充分利用内存,管理员需要适当的调整内存。ORACLE实例内存是由SGA(System Global Area)和后台进程组成的。
SGA主要由Share Pool、Date Buffer Cache、Redo Log Buffer、Java Pool和Large Pool组成,下面讨论各自的作用和调整方式:
1.Share Pool:共享池,由Library Cache(库缓冲区)、Date Dictionary Cache(数据字典缓冲区)、Share Pool Reserved(共享内存池预留空间)三组件组成。
①Library Cache:库缓冲区中包含了最近执行的用来共享的SQL和PL/SQL语句。管理员通过下列语句查看库缓冲区使用情况:SELECT namespace,reloads”Cache Misses”,pins Executions"FROM v$librarycache;如果缓冲区错误Cache Misses超过1%,则需要调整,有两种个方式,一是尽量使用完全相同的SQL语句,二是修改初始化参数SHARED_POOL_SIZE来增加库缓冲区内存。
②Date Dictionary Cache:数据字典缓存区包含了一系列的列表和视图,在执行SQL语句时ORACLE就是通过它来检查哪些用户和表已经存在,以及表的列名和数据类型正确。管理员通过下列语句查看数据字典缓存区使用情况:SELECT parameter,getmisses”Cache Misses”gets,Requests”FROM v$rowcache;如果错误率Cache Misses超过10%〜15%,应当增加初始化参数SHARED_POOL_SIZE。
③Share Pool Reserved:共享内存池中的预留区域,它作用于需要连续内存的大型请求。通过下列语句查看:SELECT*FROM V$SHARED_POOL_RESERVED;这个区域的大小介于整个共享内存池空间的5%〜50%之间。
2.Date Buffer Cache:数据库缓冲区用来缓存应用程序用户最近访问过的数据块,用户对数据库的修改都是在数据库缓冲区中实现的。用户对该区数据的访问非常频繁,所以应当分配足够的内存空间,来减少磁盘I/O操作,提高数据库性能。通过下列语句查看该区的统计数据:SELECT name,value FROM v$sysstat WHERE name IN(’db block gets’,’consistent gets’,’physical reads’);可用下列公式计算缓冲区的命中率:Cache Hit Ratio=l-(PHYSICAL READS/(DB BLOCK GETS+CONSTENT GETS)),如果命中率低于70%或80%,可调整初始化参数DB_CACHE_SIZE增加数据库缓冲区的内存空间。
3.Redo Log Buffer:重做日志缓冲区用来存放由于发生错误导致需要重做用户的事务所需要的信息。可通过如下语句查看该区信息:SELECT name,value FROM v$sysstat WHERE name=’redo buffer allocation retries;如果redo buffer allocation retries的值不为了零,那么需要将初始化参数LOG_BUFFER的大小增加5%〜10%,直到该值接近零为止。
4.Java Pool:缓存与Java相关的会话数据,默认值20M,取值范围是1M到1G。rade推荐,对于有Java的应用,将这个值设到50M或者更大。可以通过下列语句查看:Select*From V$sgastat Where Pool=’java pool;如果发现未使用内存很大或者不断增加,表示Java池可能分配了太多的内存,如果未使用内存很小或者不断减少,表示可能需要加大Java池的内存。改进Java池的性能主要是增大JAVA_POOL_SIZE这个参数。
5.Large Pool:共享池除了用于缓存SQL外,还有用于容纳一些特殊用途的数据,当这些选项被使用后,共享池的命中率可能会下降很多,为了解决这个问题,Oracle提供一个新的内存区域来存放这些数据,这就是大池;用LARGE_POOL_SIZE这个参数来配置大池,这个参数默认值是零,可选值在600K到2G之间,一旦配置了大池,Oracle会自动使用大池来缓存上面提到的数据;可以使用下面的查询看到大池己使用和未使用的内存:Select*From V$sgastat Where Pool=’large pool’;持续观察上面的查询,如果发现未使用内存很大或者不断增加,表示大池可能分配了太多的内存,如果未使用内存很小或者不断减少,表示可能需要加大大池的内存。

三、Web应用程序的设计与优化
根据统计,对网络、硬件、操作系统、数据库参数进行优化所获得的性能提升,全部加起来只占数据库系统性能提升的40%左右,其余的60%数据库系统性能提升来自对应用程序的优化。许多优化专家认为,对应用程序的优化可以得到80%的系统性能的提升。应用程序的优化通常可分为以下个方面:流程、源代码和SQL语句、缓存的使用。
(一)流程优化简介
在Web系统的设计中最关键的就是应用程序的流程设计,所谓流程就是指从下订单到交货或提供服务所完成的一系列操作活动,它跨越不同的智能部门,从整体上考虑问题。良好设计的流程可以优化作业过程、缩短事务完成周期,一段时间内用户提交的事务完成数量相应增加,用户操作感受得到改善,同时系统的并发量也得到提高;相反流程设计有误的系统,使得事务操作流程复杂,事务执行的某一环节容易出现问题,事务完成周期延长。严重的后果是操作失败的用户重复登录和提交,形成待处理事务不断积累的恶性循环,最终导致系统崩溃。
在现阶段流程优化逐渐成为热点问题,目前中国最成功的案例是联想的流程优化,它通过新的计算机系统对原业务的重新梳理,极大的提高了公司生产的效率。流程优化即流程再造的概念最早起源与麻省理工学院在1984到1989年间进行的一项名为“20世纪90年代的管理”。1993年,迈克尔·哈默和詹姆斯·钱皮共同创作的《流程再造》给出了具体的定义,流程再造就是:“对企业的流程进行根本性再思考和彻底性再设计、从而获得在成本、质量、服务和速度等方面业绩的戏剧性的改善”。对Web系统而言最重要的是找出流程设计的缺陷,可以从管理层和技术层两方面对流程进行优化,管理层方面指对Web系统的操作方式和运行的规划,技术层方面指Web系统在技术可行性方面的设计。以下通过分析奥运售票系统的瘫痪原因,提出一种流程方面改进方式。
(二)代码的优化
在许多项目中,功能测试成功的程序代码在系统接受高并发访问的情况下就会出现异常或bug,因为在这些代码中往往隐藏一些潜在危险,如果没有进行仔细的检查和优化会导致整个系统运行的不稳定。
Java语言是现在大部分Web系统的开发语言,它采用比C++更高效和简便的面向对象编程方式,可以自动收集垃圾和完整的字节码检查,最重要的是它可以“一次编写,处处运行”。然而Java语言的不足之处就是它的运行效率较慢,一般来说java程序执行速度要比C++慢10-30倍。因为java程序在运行时由类加载器加载相关的类文件,然后java虚拟机读取该类文件的字节,执行相应操作。为了保证Java程序的可靠性和运行效率,一般采用以下优化方式:
1.选择合适的JDK版本
对于不同版本的JDK或不同厂家的JDK都可能存在着很大的差异,对于性能优化的程度不同。一般来说,尽可能选择最新发布的稳定的JDK版本。最新的稳定的JDK版本相对以前的JDK版本都会做一些bug的修改和性能的优化工作。
2.充分利用Java内部对象和函数
在Java程序设计中存在的一个问题是没有充分利用Java内部对象和函数,而是重新设计一些不必要的对象,这样会给系统性能造成很大的影响,因为系统不仅要花时间去编译生成对象还要负责这些对象的垃圾回收和处理,过分的创建对象会消耗系统的大量内存,严重时会导致内存泄露。
3.慎用异常处理
Java中用try/catch来发方便用户捕捉异常,进行异常处理。但是如果使用不当,也会给Java程序的性能带来影响。假如可以用if、whik等语句来处理,那么就尽可能的不用try/catch语句。
4.合理使用内存回收
JVM中的GC(Garbage Collection)机制可以自动对过期对象进行及时回收,减少了编程的困难,具有重要的意义。JVM自动回收垃圾的条件是:该对象不再被引用;然而,JVM的GC并非十分的机智,即使对象满足了垃圾回收的条件也不一定会被立即回收,我们也不能直接调用GC执行,只能采用System.gc()来建议垃圾收集器,或手动把对象的应用置成null,使内存尽快释放。
(三)SQL语句的优化
在Web系统中,SQL语句的执行效率是影响应用程序执行效率的关键因素。调整不良的SQL语句将以低效的方式访问数据库,导致不必要的数据扫描和大量无用数据在网络中传输,造成Web系统的访问效率下降和并发访问量的减少。所以为了获得性能优化的应用程序,必须调整和优化SQL语句。我们通过分析SQL
语句的执行过程,总结出一些SQL语句优化的规则。
对于ORACLE数据库,执行一条SQL语句主要有下列步骤:
1.创建游标
任何SQL语句在执行时都会创建一个游标,大多数应用中,游标是自动创建的,也可以显式的创建游标,比如在存储过程中。
2.解析SQL语句并分析SQL执行计划
这一步是对SQL语句进行语法分析,但不是必需的,如果在共享内存池的共享SQL区域中己经存在完全相同的SQL语句则可以避免再次解析,这也是SQL语句优化的重要依据。SQL语句的语法分析包括下列操作:翻译该SQL语句,并验证它是否合法;实现数据字典的查找,以验证是否符合表和列的定义,即SQL语句中的表面和列名是存在的;在所要求的对象上获取语法分析锁,保证在执行对象解析期间对象定义不会发生改变;验证执行该语句的用户权限是满足的;决定此语句最佳的执行计划;将它装入共享SQL区。
3.查询表并获取相关数据
无论是SELECT语句还是INSERT、UPDATE、DELETE语句都包含查询操作,这些查询主要是指获取操作对象的一些数据。如DELETE FROM table也要首先查询table的相关信息。
4.绑定变量
管理员在执行一条有限制条件的SQL语句时,需要定义一些变量,在绑定变量之前,程序必须向oracle指定该变量的地址。如SELECT*FROM STUDENT WHERE NUMBER=”XH”,这里NUMBER绑定的变量就是用户在程序中定义的变量XH。绑定过程是参考数据库对象实现的,所以在执行变量的值改变而SQL语句不变时无需再次绑定。
5.执行SQL语句
到这里Oracle拥有执行SQL语句所需的信息与资源,因此可以运行SQL语句了。如果该语句为SELECT查询或INSERT语句,则不需要锁定任何行。然而,如果为UPDATE或DELETE语句,则该语句影响的所有行都被锁定,防止该用户提交或回滚之前,别的用户对这些数据进行修改,这保证了数据的一致性。
6.并行执行
如果可能,以并行化方式执行SQL语句。并行执行是提高SQL语句的一种方法,ORACLE可以在SELECT、INSERT、UPDATE、DELETE语句中执行相应并行查询操作,对于某些DDL操作,如创建索引、用子查询创建表、在分区表上的操作,也可以执行并行操作。如果在SQL语句中指定该语句是并行执行的,ORACLE将调用多个服务器进程为同一个SQL语句工作。
7.返回结果
如果执行的是SELECT语句,结果将是满足条件的数据集,ORACLE会以循环的方式向用户返回数据;如果是其他的SQL语句结果是TRUE或FALSE,表示执行的成功或是失败。
8.关闭游标
SQL语句处理的最后一个阶段就是关闭初始建立的游标。
四、Web服务器的性能调整与优化
在任何一个Web系统中,对Web服务器的选择和优化配置都是至关重要的,只有对服务器进行合理的优化配置才能使系统发挥最佳性能。一般在对Web服务器的优化的步骤是:系统容量计划、系统测试、Web服务器调整。
系统容量计划:指评估系统的硬件、网络带宽、操作系统等因素,确定应用系统的服务范围并选择合适的软硬件。在高并发系统中容量计划包括对系统最高并发量的估计。
系统测试:通过测试查看系统的功能和性能是否满足系统的功能要求和容量计划。对系统并发容量的测试主要通过负载测试,即重复的大量的页面请求来模拟多用户对被测系统的并发访问,以此达到产生压力的目的。目前的压力测试工具很多,从Aapache自带的Web性能测试工具Apache Benchmark、开源的Jmeter到大而全的商业性能测试软件如Mercury的LoadRunner等等。任何性能测试工具都有其优缺点,我们可以根据实际情况挑选用最合适的工具。
Web服务器调整:针对各种服务器的特点进行配置优化,下面主要介绍Tomcat服务器的性能调整。
(一)Tomcat性能调整
对Tomcat和应用程序进行压力测试后,如果不满足系统对并发量的要求,就可以对Tomcat进行性能调整,Tomcat性能调整包括外部环境的调整和自身的调整
1.外部环境的调整
调整与Tomcat性能相关的外部条件,如运行Tomcat的操作系统、Java虚拟机等。
①操作系统性能调整
对于Web服务器上操作系统的优化,主要是对操作系统的相关参数进行调整,可以通过查看系统的进程情况,尽量关闭不必要的服务进程和删除不必要的网络协议,确保操作系统的最大资源为Web应用系统服务。
②Java虚拟机性能调整
由于Tomcat本身运行于操作系统和Java虚拟机上,所以对Java虚拟机的选择和配置直接影响Tomcat的运行。Java虚拟机推荐使用Sun公司发布的JDK,并
确保所选择的版本是较新的,因为较新的版本往往具有更好的性能。一些报告显示JDK1.4比JDK1.3在性能上提高了10%〜20%;对Java虚拟机的设置指对其使用内存大小的控制,通过如下表所示的两个参数控制内存大小3%。
初始化堆的大小表示虚拟机在启动时向系统申请的内存的大小。在高并发的情况下Tomcat服务器会急剧地占用很大的内存,此时对这个参数的设置非常重要,一般建议堆的最大值设置为可用内存的最大值的80%。
Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是不够的,盖要把这两个参数调大。可以在文件{tomcat_home}/bin/catalina.bat增加如下设置:
JAVA_OPTS=’-Xms【初始化内存大小】-Xmx【可以使用的最大内存】’
如:JAVA_OPTS=’-Xms256m-Xmx512m’表示初始化内存为256MB,可以使用的最大内存为512MB。
内存设置需要考虑的另一个因素是Java提供的垃圾回收机制。由于虚拟机的堆大小决定了虚拟机花费在收集垃圾上的时间和频度。所以如果堆的大小过大,那么垃圾收集就会很慢,但是频度会降低,假如系统花费很多的时间收集垃圾,这时需要减小堆大小,一般来说一次完全的垃圾收集不超过3-5秒。
③负载均衡
通过应用负载均衡技术,我们可以把原来集中于一台服务器并发量均匀分散到多个服务器上,这样就可以利用多台服务器同时为大量用户提供服务。
2.Tomcat自身的调整
①禁用DNS查询
当Web应用程序要记录客户端的信息时,它会记录客户端的IP地址或者通过域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是修改server.xml文件中的enableLookups参数值为False。
②调整线程数
Tomcat使用线程池加速响应速度来处理请求。在Java中线程是程序运行时的路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共享相同的地址空间。多线程帮助程序员写出CPU最大利用率的高效程序,使空闲时间保持最低,从而接受更多的请求。
对参数值大小设置需要进行多次的测试,观察响应时间和内存使用情况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所有的Web站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。
(二)Web集群和负载均衡
对于单台服务器的Web系统来说,随着新的应用的发展和业务量的增加,服务器的处理能力和I/O能力肯定会成为提供服务的瓶颈,如果客户的访问超出了服务器能承受的范围,就可能出现严重的后果甚至宕机。我们可以通过的各种方法使单台服务器的性能最优化,然而单台服务器的性能比较有限,如果仍然不能满足要求,这时就必须考虑使用解决高负荷访问和大并发量访问采用的终极解决方案——集群和负载均衡。
计算机集群简称集群是一种计算机系统,它通过将一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。负载均衡是构成集群的一种方案,它将多台Web服务器以对称的方式组成一个服务器集合,每台服务器都有等价的地位,然后通过某种负载分担技术将外部发送来的请求均匀分配到对称结构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。
1.负载均衡的分类
目前针对不同的应用出现了多种负载均衡技术,下面根据负载均衡采用的设备、应用的地理结构和应用的网络层来分类:
①软件/硬件负载均衡
软件负载均衡是指在服务器的操作系统上安装附加的软件来实现负载均衡,如在Linux操作系统上安装LVS(Linux Virtual Server)软件;硬件负载均衡是直接在服务器和外部网络之间安装负载均衡器,一些具备第四层交换能力的局域网交换机,就能作为一个硬件负载均衡器,完成服务器的负载均衡。
②本地/全局负载均衡
本地负载均衡是指对本地的服务器集群做负载均衡,全局负载均衡是指对分别放置在不同的地理位置、有不同网络结构的服务器群之间做负载均衡。
③基于不同网络层次的负载均衡
在各负载均衡方式中,针对不同的应用需求,在OSI参考模型的第二、三、四、七层都有相应的负载均衡方式,负载均衡技术一般操作于网络的第四层或第七层。第四层负载均衡将外部Internet上的IP地址映射为多个内部服务器的IP地址,每次TCP连接请求使用其中的一个内部地址达到负载均衡的目的;第七层负载均衡通过对应用层服务的控制实现负载均衡,适用于对HTTP服务器群的应用,它检查流经的HTTP报头并根据报头信息执行负载均衡任务。
2.web集群和负载均衡技术实现
根据负载均衡实现的原理不同,Web负载均衡实现技术可分为以下几种
①基于客户端的负载均衡
这种模式是在网络的客户端安装集成了负载均衡的应用软件,在客户端每次请求连接时根据服务端的运行情况来选择服务器。由于所有使用负载均衡的客户端必须安装额外的软件,所以这种方式使用的较少,只在一些特殊场合使用。
②基于DNS的负载均衡
在DNS服务器中为多个不同的地址分配同一个域名,当用户用这个域名访问时,DNS服务器为这域名随机的解析一个地址,从而使得不同的用户访问不同的服务器,达到负载均衡的目的。采用这种方式的缺点是,由于DNS端存在缓存,所以当集群中的某一服务结点失效时,它的地址在一段时间内依然被解析给用户,造成部分用户访问失效,必须等DNS解析更新或服务器重启才能恢复。
③基于NAT的负载均衡
NAT(Network Address Translation)即网络地址转换,就是将一个已注册的Internet IP地址映射为多个内部IP地址,对每次连接请求动态的转换为一个内部服务器的地址,从而达到负载均衡目的。这种负载均衡方式是一种比较完善的负载均衡技术,可以通过软件来实现如LVS,也可以通过硬件来实现,如第四层交换
④反向代理负载均衡
一般的代理方式是指用户通过代理服务器来访问不同的站点,而反向代理方式是指代理服务器接收网络上的连接请求,然后将请求转发为内部的服务器,并将服务器得到的结果返回给客户端。
反向代理负载均衡在OSI模型的第七层实现,它可以通过软件方式来实现,如实现Tomcat集群的apache mod_proxy等,也可以在硬件设备上实现。它的缺点是:由于代理服务器在每次用户访问时必须打开两个连接,一个外部的,一个内部的,所以在并发请求数量特别大时代理服务器可能会成为系统服务的瓶颈。
五、结论
关于高负载高并发Web系统的研究也是许多高速增长的网站必须面临的问题,这样的网站对系统的构架设计、性能要求各个方面都有很高的要求。随着互联网技术的不断丰富,关于高并发Web系统的优化和改进技术也得到了很大的积累,这些技术经验涉及到系统很细的方方面面,但是缺乏系统规范的总结。
本文对髙并发系统的设计和优化技术进行了全面深入的研究,具体的研究和贡献如下:首先,对高并发Web系统的发展历程进行分析,并总结出其发展的趋势和特点;在数据库方面:分析了与数据库性能相关的初始化参数,并列出了与系统并发量相关的初始化参数的调整方法;对数据库在内存中结构进行分析,给出了具体的容量判断标准和调整方式;总结了一些有利于提高系统并发量的数据库对象的使用方法和数据库并发事务控制方法;另外,对当前正在研究的内存数据库进行研究,提出了两种内存数据库在高并发Web系统中的应用模型;在Web应用程序方面:对奥运售票系统的流程设计进行分析和优化,提出了一些流程设计的注意方法;总结了程序中代码和SQL语句的优化方法;对Web系统中应用的缓存技术进行了全面深入的研究;在Web服务器方面:分析了Tomcat服务器调整的方法;研究了解决系统高并发问题的终极方案既负载均衡技术,给出了几种常用负载均衡的分类;最后,结合一个实际的Web系统——大学生思想测评综合系统,来说明高并发系统具体设计过程和各种优化方法在该系统中的使用,以及最终取得的效果。
参考文献
[1]林昊.大型网站架构演变和知识体系[J].程序员.2008(11)
[1]Google Architecture.http://highscalability.com/google-architecture.
[2]Le Gruenwald,YuWei chen,Jing Huang.Effects of Update Techniques on Main Memory Database System Performance.IEEE Transactions on Knowledge and Data Engineering.1998[3]Jason Brittain,Ian F Darwin.Tomcat:the definitive guide..2007
[2]高张,康小军.Apache反向代理在Web应用中的研究与实现[J].电脑编程技巧与维护.2008(14)[3]王鑫,苗春雨,袁芳.Web应用性能评测的研究与应用[J].实验技术与管理.2008(08)
[4]伊文斌,郑剑.基于LoadRunner的Web负载测试[J].江西理工大学学报.2008(04)[5]钱宏武.从奥运订票系统瘫痪说起——谈FastC GI与IT架构[J].程序员.2008(01)
[6]易国洪.内存数据库中恢复技术研究[J].科技广场.2007(03)[7]孙海霞,马玉凤.负载均衡综述[J].电脑知识与技术.2006(08)
[8]杨瑞,蔡虹.数据库连接池原理及其JAVA实现[J].微型机与应用.2003(04)[9]李陶深,罗翌源,蒙波,严毅.用存储过程提高应用程序执行效率[J].微型电脑应用.2002(09)
[10]李学军.Web Cache技术及其应用[J].电信技术.1999(11)
[2]林胜利,王坤茹,孟海利编著.Java优化编程[M].电子工业出版社,2005[3](美)EdwardWhalen,(美)MitchellSchroeter著,高艳春等译.Oracle性能调整与优化[M].人民邮电出版社,2002
[5]何海江.基于Web的电子邮件系统设计与实现[D].大连理工大学2006
[6]纪风.基于划分的分布式环境:设计模式与动态划分[D].浙江大学2008[7]冯青峰.基于Java RMI的分布对象负载均衡研究与实现[D].西安电子科技大学2002
[8]于威.银证数据交换平台通信机制的设计与实现[D].山东大学2008[9]潘传志.远程虚拟实验信息平台负载均衡研究[D].华中科技大学2004
[10]吴炎飞.基于J2ME的手机即时通信系统的设计与实现[D].大连理工大学2007
下载提示:
1、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“文章版权申述”(推荐),也可以打举报电话:18735597641(电话支持时间:9:00-18:30)。
2、网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
3、本站所有内容均由合作方或网友投稿,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务。
原创文章,作者:写文章小能手,如若转载,请注明出处:https://www.447766.cn/chachong/12904.html,