《高并发WEB服务器卓有成效方案的研究与实践.doc》由会员分享,可在线阅读,更多相关《高并发WEB服务器卓有成效方案的研究与实践.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目 录摘要2一、序言4二、数据库系统的性能调整与优化5(一)数据库优化的目标5(二)影响数据库性能的主要因素6(三)数据库初始化数据调整6(四)数据库的内存优化8三、Web应用程序的设计与优化10(一)流程优化简介10(二)代码的优化11(三)SQL语句的优化12四、Web服务器的性能调整与优化13(一)Tomcat性能调整14(二)Web集群和负载均衡16五、结论18参考文献19摘 要:本文针对当前的高并发Web卓有成效方案的设计和优化方法,进行了全面的提取、分析和总结,提出了一些新的优化方案,并系统说明了这些方案 的使用方法和使用效果。首先论述了数据库系统的性能调整与优化,接着论述了Web
2、应用程序的设计与优化,最后论述了Web服务器的性能调整与优化,以期对以后的高并发Web系统的研究要重要的意义。关键词:高并发WEB服务器;调整;优化 一、序言 近十年来,互联网上网人数一直保持着指数增长的趋势,2008年中国互联网 络信息中心(CNNIC)发布第22次中国互联网络发展状况统计报告,报告 显示,截至2008年6月底,我国网民数量达到2.53亿,首次超过美国跃居世界第 一位,并且中国网民规模继续呈现持续高速发展的趋势,网民数量的增加给未来 Web系统设计和运行带来巨大的挑战,火车票售票系统的经常瘫痪就是一个典型的事实,官方说法是:“拥堵情况的主要原因是后台处理系统在承受了每小时80
3、0万次流量压力后显现出处理能力不足的问题”,每小时800万次,并发访 问量大概是每秒的2000多次,这对于订票Web系统来说,是一个非常大的考验; 另一方面,ajax等交互性很强的技术的使用推动了 Web2.0的兴起,也给互联网上 Web系统提出更高的要求,在保持高性能和高可靠性不变的情况下,要提高系统 的并发量和Web应用系统的承载能力。并发一般分为两种情况。一种是严格意义上的并发,即所有的用户在同一时 刻做同一件事情或者操作,这种操作一般指做同一类型的业务。另外一种并发是 广义范围的并发。这种并发与前一种并发的区别是,尽管多个用户对系统发出了 请求或者进行了操作,但是这些请求或者操作可以是
4、相同的,也可以是不同的。 对整个系统而言,仍然是有很多用户同时对系统进行操作,因此也属于并发的范 畴。而且后一种并发更接近用户的实际使用情况,因为对于大多数的系统,只有 数量很少的用户进行“严格意义上的并发”。当系统的并发用户增加时,请求的响应时间也增加。服务器的吞吐量是先随 并发用户数增加而增加,当吞吐量到达一定峰值后,再增加并发用户数,吞吐量 会减少。原因在于当并发用户数少时,向Web服务器提交的请求量不大,服务器 处理能力还有富余,所以吞叶量逐步增大;但当并发用户数超过某一值时,由于 向服务器提交的请求太多,造成服务器阻塞,反而导致吞吐量减少。我们所说的 系统的并发量指系统可承受的最大并
5、发量。二、数据库系统的性能调整与优化数据处理是整个Web系统的核心,数据库的性能直接影响Web系统的运行效 率。高性能的数据库是高并发Web系统的必要条件,通过对数据库的优化来最大 限度的提高数据库的性能。然而数据库系统的调整和优化不是一个一蹴而就的工 作,它需要定期维护,定期观察,在发现性能瓶颈时及时制定优化目标、实施优化计划、验证优化效果,这个过程需要管理员不断重复,以使数据库能持续高效 的正常运行。 (一)数据库优化的目标1.消除数据库瓶颈Oracle的优化的一个重要目标就是消除数据库瓶颈,这些瓶颈有的可能是原来 存在的,有的是随着运行环境的变化如并发用户的徒然增加而显现出来的,所以 数
6、据库管理员在发现性能瓶颈时及时进行调整。2.尽可能提高数据处理能力为了能尽可能的提高数据库的处理能力,减少数据库的响应时间,可以从如 下几个方面考虑:提高缓冲区的命中率、减少系统的I/O操作、增加系统的连接数、 调整数据库并发査询的用户数。 (二)影响数据库性能的主要因素很多因素都可以影响ORACLE的性能,下面是一些主要的因素1.硬件:假如数据库的硬件出现故障或硬件的配置不能充分满足数据库的 要求,会严重影响数据库的性能。例如,若计算机的内存不足,将减少ORACLE 用于存放最近访问过的数据缓冲区空间,使得操作系统频繁的执行换页操作,导 致系统需要额外的幵销。2.网络:网络速度太低会降低数据
7、库系统的吞吐量,延迟用户响应时间。 对网络环境进行合理的优化配置,对Web系统性能提高是很重要的。3.操作系统:主要指对ORACLE数据库所使用的操作系统合理的选择, 并对其资源进行合理配置。4.应用程序:应用程序的构架、使用代码的执行效率以及与数据库的连接 会影响数据库的交互,更重要的是应用程序中SQL语句的效率直接影响数据库的数据处理功能。5.ORACLE配置:为了获得对所选ORACLE系统最优化的性能,需要对 ORACLE配置进行合理的调整,这是提高数据库性能最直接有效的方法。(三)数据库初始化数据调整对ORACLE实例进行调整的基本方法就是对其初始化参数进行合理配置, ORACLE的所
8、有参数都是在Init.ora文件中配置和修改的。ORACLE9i中有797个 不同的Init.ora参数,下面主要介绍与数据库并发性能相关的一些限制系统资源的 参数:1.DB_FILES:指定了 ORACLE能打开的数据库文件的最大数量,这个参 数不能超过操作系统对数据库文件数量的限制。2.LICENSE_MAX_SESSIONS:该参数指明了系统同时允许的最大用户会 话数。当用户的会话数达到该参数指定的值时,只有具备RESTRICTION SESSION 权限的用户能连接到该数据库。3.LICENSEJ_MAX_USERS:该参数指明了管理员在数据库中能创建的最 大用户数。创建的用户数达到该
9、值时,将不能创建新的用户,在高并发情况下管 理员可以适当的增加该参数的值。4.MAX_DUMP_FILE_SIZE:这个参数指定了跟踪文件的最大尺寸,如果 跟踪文件占用了太多的存储空间,就可以修改这个参数的大小。5.OPEN_LINKS:这个参数指明了在一个会话中能打开的与远程数据库的 最大连接数,这里的连接包括数据库连接、外部程序连接、中间件连接等,这些 连接都使用独立的进程。6.OPEN_LINKS_PER_INSTANCE:这个参数指定了每个数据库实例能接 受的处于活动状态的可迁移连接的最大数量。7.PROCESS:这个参数指定了所有能同时连接到数据库实例的操作系统用 户进程的最大数量。
10、这个参数包括了所有后台进程,比如锁进程、作业队列进程 和并发执行进程等。在高并发用户下可以适当增加该参数的值。8.SESSIONS:这个参数指定了操作系统能创建的会话的最大数量。因为 每次登录都创建一个会话,所以这个参数也可以有效地限制系统中并发用户的最 大数量。如果没有设置这个参数,那么ORACLE将根据PROCESSES参数值确定 SESSIONS 参数的值,其计算方法是 SESSIONS= (1.1 *PROCESSES) +5。9.TRANSACTION:该参数指定了并发事务的最大数量。这个参数的值越大,SGA (System Global Area)需要的内存也越多,此外还需要增加分
11、配给该数据库的回滚段数量。10.MAX_DISPATCHERS:这个参数指定了系统允许同时运行的调度进程 的最大数量。11.MAX_SHARED_SERVERS:这个参数指定了系统允许同时运行的共享服务器进程的最大数量。如果系统中出现的死锁过于频繁,就需要增大这个参数 的值。12.PARACLLE_MAX_SERVERS:这个参数指定了实例能同时运行的并行 执行进程和并行恢复进程的最大数量。随着用户数量的增长,在创建实例时为这 个参数设置的值将不能满足用户的需求,所以应当增大这个参数的值。数据库管理员可以通过ORACLE的UTLBSTAT工具和UTLESTAT工具来监 控数据库的性能,找出系统
12、的性能瓶颈,修改相关的参数使数据库持续高效运行。(四)数据库的内存优化在ORACLE数据库中,数据存放在两个地方:内存和磁盘。磁盘能以较低的 费用存储大量的数据,但内存比磁盘有更高的性能,CPU访问内存的速度比与磁 盘之间的I/O操作快数千倍,因此用户希望能尽量通过内存访问数据。在高并发情 况下,对数据的访问量都很大,对内存资源的使用必然会存在很大的竞争,为了 能充分利用内存,管理员需要适当的调整内存。ORACLE实例内存是由SGA (System Global Area)和后台进程组成的。 SGA 主要由 Share Pool、Date Buffer Cache、Redo Log Buffe
13、r、 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;如果缓冲
14、区错误 Cache Misses超过1%,则需要调整,有两种个方式,一是尽量使用完全相同的SQL语 句,二是修改初始化参数SHARED_POOL_SIZE来增加库缓冲区内存。DateDictionary Cache:数据字典缓存区包含了一系列的列表和视图,在执 行SQL语句时ORACLE就是通过它来检查哪些用户和表已经存在,以及表的列名 和数据类型正确。管理员通过下列语句查看数据字典缓存区使用情况:SELECT parameter, getmisses ” Cache Misses ”gets , Requests ” FROM v$rowcache;如果错 误率Cache Misses超过1
15、0%15%,应当增加初始化参数SHARED_POOL_SIZE。Share Pool Reserved:共享内存池中的预留区域,它作用于需要连续内存的大型请求。通过下列语句查看:SELECT * FROM V$SHARED_POOL_RESERVED;这个区域的大小介于整个共享内存池空间的5%50%之间。2.Date Buffer Cache:数据库缓冲区用来缓存应用程序用户最近访问过的 数据块,用户对数据库的修改都是在数据库缓冲区中实现的。用户对该区数据的 访问非常频繁,所以应当分配足够的内存空间,来减少磁盘I/O操作,提高数据库 性能。通过下列语句查看该区的统计数据:SELECT name
16、, 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,v
17、alue 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 ;如果发现未使 用内存很大或者不断增
18、加,表示Java池可能分配了太多的内存,如果未使用内存 很小或者不断减少,表示可能需要加大Java池的内存。改进Java池的性能主要 是增大JAVA_POOL_SIZE这个参数。5.Large Pool:共享池除了用于缓存SQL外,还有用于容纳一些特殊用途 的数据,当这些选项被使用后,共享池的命中率可能会下降很多,为了解决这个 问题,Oracle提供一个新的内存区域来存放这些数据,这就是大池;用 LARGE_POOL_SIZE这个参数来配置大池,这个参数默认值是零,可选值在600K 到2G之间,一旦配置了大池,Oracle会自动使用大池来缓存上面提到的数据;可 以使用下面的查询看到大池己使用和
19、未使用的内存:Select * From V$sgastat Where Pool =large pool;持续观察上面的查询,如果发现未使用内存很大或者不断增加, 表示大池可能分配了太多的内存,如果未使用内存很小或者不断减少,表示可能 需要加大大池的内存。三、Web应用程序的设计与优化根据统计,对网络、硬件、操作系统、数据库参数进行优化所获得的性能 提升,全部加起来只占数据库系统性能提升的40%左右,其余的60%数据库系统 性能提升来自对应用程序的优化。许多优化专家认为,对应用程序的优化可以得 到80%的系统性能的提升。应用程序的优化通常可分为以下个方面:流程、源代 码和SQL语句、缓存的使
20、用。 (一)流程优化简介在Web系统的设计中最关键的就是应用程序的流程设计,所谓流程就是指从 下订单到交货或提供服务所完成的一系列操作活动,它跨越不同的智能部门,从 整体上考虑问题。良好设计的流程可以优化作业过程、缩短事务完成周期,一段 时间内用户提交的事务完成数量相应增加,用户操作感受得到改善,同时系统的 并发量也得到提高;相反流程设计有误的系统,使得事务操作流程复杂,事务执 行的某一环节容易出现问题,事务完成周期延长。严重的后果是操作失败的用户 重复登录和提交,形成待处理事务不断积累的恶性循环,最终导致系统崩溃。在现阶段流程优化逐渐成为热点问题,目前中国最成功的案例是联想的流程 优化,它通
21、过新的计算机系统对原业务的重新梳理,极大的提高了公司生产的 效率。流程优化即流程再造的概念最早起源与麻省理工学院在1984到1989年间进 行的一项名为“20世纪90年代的管理”。1993年,迈克尔哈默和詹姆斯钱皮共同创作的流程再造给出了具体的定义,流程再造就是:“对企业的流程进行根本 性再思考和彻底性再设计、从而获得在成本、质量、服务和速度等方面业绩的戏 剧性的改善”。对Web系统而言最重要的是找出流程设计的缺陷,可以从管理层和 技术层两方面对流程进行优化,管理层方面指对Web系统的操作方式和运行的规 划,技术层方面指Web系统在技术可行性方面的设计。以下通过分析奥运售票系统 的瘫痪原因,提
22、出一种流程方面改进方式。 (二)代码的优化在许多项目中,功能测试成功的程序代码在系统接受高并发访问的情况下就会出现异常或bug,因为在这些代码中往往隐藏一些潜在危险,如果没有进行仔细 的检查和优化会导致整个系统运行的不稳定。Java语言是现在大部分Web系统的开发语言,它采用比C+更高效和简便的 面向对象编程方式,可以自动收集垃圾和完整的字节码检查,最重要的是它可以 “一次编写,处处运行”。然而Java语言的不足之处就是它的运行效率较慢,一般 来说java程序执行速度要比C+慢10-30倍。因为java程序在运行时由类加载 器加载相关的类文件,然后java虚拟机读取该类文件的字节,执行相应操作
23、。为了保 证Java程序的可靠性和运行效率,一般采用以下优化方式:1.选择合适的JDK版本对于不同版本的JDK或不同厂家的JDK都可能存在着很大的差异,对于性能 优化的程度不同。一般来说,尽可能选择最新发布的稳定的JDK版本。最新的稳 定的JDK版本相对以前的JDK版本都会做一些bug的修改和性能的优化工作。2.充分利用Java内部对象和函数在Java程序设计中存在的一个问题是没有充分利用Java内部对象和函数, 而是重新设计一些不必要的对象,这样会给系统性能造成很大的影响,因为系统 不仅要花时间去编译生成对象还要负责这些对象的垃圾回收和处理,过分的创建 对象会消耗系统的大量内存,严重时会导致
24、内存泄露。3.慎用异常处理Java中用try/catch来发方便用户捕捉异常,进行异常处理。但是如果使用不 当,也会给Java程序的性能带来影响。假如可以用if、whik等语句来处理,那么 就尽可能的不用try/catch语句。4.合理使用内存回收JVM中的GC (Garbage Collection)机制可以自动对过期对象进行及时回收, 减少了编程的困难,具有重要的意义。JVM自动回收垃圾的条件是:该对象不再 被引用;然而,JVM的GC并非十分的机智,即使对象满足了垃圾回收的条件也 不一定会被立即回收,我们也不能直接调用GC执行,只能采用System.gc()来建 议垃圾收集器,或手动把对象
25、的应用置成null,使内存尽快释放。 (三)SQL语句的优化在Web系统中,SQL语句的执行效率是影响应用程序执行效率的关键因素。 调整不良的SQL语句将以低效的方式访问数据库,导致不必要的数据扫描和大量 无用数据在网络中传输,造成Web系统的访问效率下降和并发访问量的减少。所 以为了获得性能优化的应用程序,必须调整和优化SQL语句。我们通过分析SQL 语句的执行过程,总结出一些SQL语句优化的规则。 对于ORACLE数据库,执行一条SQL语句主要有下列步骤:1.创建游标任何SQL语句在执行时都会创建一个游标,大多数应用中,游标是自动创建 的,也可以显式的创建游标,比如在存储过程中。2.解析S
26、QL语句并分析SQL执行计划这一步是对SQL语句进行语法分析,但不是必需的,如果在共享内存池的共 享SQL区域中己经存在完全相同的SQL语句则可以避免再次解析,这也是SQL 语句优化的重要依据。SQL语句的语法分析包括下列操作:翻译该SQL语句,并 验证它是否合法;实现数据字典的查找,以验证是否符合表和列的定义,即SQL 语句中的表面和列名是存在的;在所要求的对象上获取语法分析锁,保证在执行 对象解析期间对象定义不会发生改变;验证执行该语句的用户权限是满足的;决 定此语句最佳的执行计划;将它装入共享SQL区。 3.查询表并获取相关数据无论是SELECT语句还是INSERT、UPDATE、DEL
27、ETE语句都包含查询操作, 这些查询主要是指获取操作对象的一些数据。如DELETE FROM table也要首先查 询table的相关信息。4.绑定变量管理员在执行一条有限制条件的SQL语句时,需要定义一些变量,在绑定变 量之前,程序必须向oracle指定该变量的地址。如SELECT * FROM STUDENT WHERE NUMBER=”XH”,这里NUMBER绑定的变量就是用户在程序中定义的变 量XH。绑定过程是参考数据库对象实现的,所以在执行变量的值改变而SQL语 句不变时无需再次绑定。5.执行SQL语句到这里Oracle拥有执行SQL语句所需的信息与资源,因此可以运行SQL语 句了。
28、如果该语句为SELECT查询或INSERT语句,则不需要锁定任何行。然而, 如果为UPDATE或DELETE语句,则该语句影响的所有行都被锁定,防止该用户 提交或回滚之前,别的用户对这些数据进行修改,这保证了数据的一致性。 6.并行执行如果可能,以并行化方式执行SQL语句。并行执行是提高SQL语句的一种方 法,ORACLE 可以在 SELECT、INSERT、UPDATE、DELETE 语句中执行相应并行查询操作,对于某些DDL操作,如创建索引、用子查询创建表、在分区表上 的操作,也可以执行并行操作。如果在SQL语句中指定该语句是并行执行的, ORACLE将调用多个服务器进程为同一个SQL语句
29、工作。7.返回结果如果执行的是SELECT语句,结果将是满足条件的数据集,ORACLE会以循 环的方式向用户返回数据;如果是其他的SQL语句结果是TRUE或FALSE,表示 执行的成功或是失败。8.关闭游标SQL语句处理的最后一个阶段就是关闭初始建立的游标。四、Web服务器的性能调整与优化在任何一个Web系统中,对Web服务器的选择和优化配置都是至关重要的, 只有对服务器进行合理的优化配置才能使系统发挥最佳性能。一般在对Web服务 器的优化的步骤是:系统容量计划、系统测试、Web服务器调整。系统容量计划:指评估系统的硬件、网络带宽、操作系统等因素,确定应用 系统的服务范围并选择合适的软硬件。在
30、高并发系统中容量计划包括对系统最高 并发量的估计。系统测试:通过测试查看系统的功能和性能是否满足系统的功能要求和容量 计划。对系统并发容量的测试主要通过负载测试,即重复的大量的页面请求来模 拟多用户对被测系统的并发访问,以此达到产生压力的目的。目前的压力测试工 具很多,从Aapache自带的Web性能测试工具Apache Benchmark、开源的Jmeter 到大而全的商业性能测试软件如Mercury的LoadRunner等等。任何性能测试工 具都有其优缺点,我们可以根据实际情况挑选用最合适的工具。 Web服务器调整:针对各种服务器的特点进行配置优化,下面主要介绍Tomcat 服务器的性能调
31、整。 (一)Tomcat性能调整对Tomcat和应用程序进行压力测试后,如果不满足系统对并发量的要求,就 可以对Tomcat进行性能调整,Tomcat性能调整包括外部环境的调整和自身的调整1.外部环境的调整调整与Tomcat性能相关的外部条件,如运行Tomcat的操作系统、Java虚拟 机等。操作系统性能调整对于Web服务器上操作系统的优化,主要是对操作系统的相关参数进行调整, 可以通过查看系统的进程情况,尽量关闭不必要的服务进程和删除不必要的网络 协议,确保操作系统的最大资源为Web应用系统服务。 Java虚拟机性能调整由于Tomcat本身运行于操作系统和Java虚拟机上,所以对Java虚拟
32、机的选 择和配置直接影响Tomcat的运行。Java虚拟机推荐使用Sun公司发布的JDK,并 确保所选择的版本是较新的,因为较新的版本往往具有更好的性能。一些报告显 示JDK1.4比JDK1.3在性能上提高了 10%20%;对Java虚拟机的设置指对其使 用内存大小的控制,通过如下表所示的两个参数控制内存大小3% 。初始化堆的大小表示虚拟机在启动时向系统申请的内存的大小。在高并发的 情况下Tomcat服务器会急剧地占用很大的内存,此时对这个参数的设置非常重要, 一般建议堆的最大值设置为可用内存的最大值的80%。Tomcat默认可以使用的内存为128MB,在较大型的应用项目中,这点内存是 不够的
33、,盖要把这两个参数调大。可以在文件tomcat_home/bin/catalina.bat增加 如下设置:JAVA_OPTS=-Xms【初始化内存大小】-Xmx【可以使用的最大内存】如:JAVA_OPTS=-Xms256m-Xmx512m表示初始化内存为256MB,可以使用 的最大内存为512MB。内存设置需要考虑的另一个因素是Java提供的垃圾回收机制。由于虚拟机的 堆大小决定了虚拟机花费在收集垃圾上的时间和频度。所以如果堆的大小过大, 那么垃圾收集就会很慢,但是频度会降低,假如系统花费很多的时间收集垃圾, 这时需要减小堆大小,一般来说一次完全的垃圾收集不超过3-5秒。负载均衡通过应用负载均
34、衡技术,我们可以把原来集中于一台服务器并发量均匀分散 到多个服务器上,这样就可以利用多台服务器同时为大量用户提供服务。2.Tomcat自身的调整禁用DNS查询当Web应用程序要记录客户端的信息时,它会记录客户端的IP地址或者通过 域名服务器查找机器名转换为IP地址。DNS查询需要占用网络,并且包括可能从 很多很远的服务器或者不起作用的服务器上去获取对应的IP的过程,这样会消耗 一定的时间。为了消除DNS查询对性能的影响我们可以关闭DNS查询,方式是 修改server.xml文件中的enableLookups参数值为False。调整线程数Tomcat使用线程池加速响应速度来处理请求。在Java中
35、线程是程序运行时的 路径,是在一个程序中与其它控制线程无关的、能够独立运行的代码段。它们共 享相同的地址空间。多线程帮助程序员写出CPU最大利用率的高效程序,使空闲 时间保持最低,从而接受更多的请求。 对参数值大小设置需要进行多次的测试,观察响应时间和内存使用情 况。在不同的机器、操作系统或虚拟机组合的情况下可能会不同,而且并不是所 有的Web站点的流量都是一样的,因此没有一刀切的方案来确定线程数的值。 (二)Web集群和负载均衡对于单台服务器的Web系统来说,随着新的应用的发展和业务量的增加,服 务器的处理能力和I/O能力肯定会成为提供服务的瓶颈,如果客户的访问超出了服 务器能承受的范围,就
36、可能出现严重的后果甚至宕机。我们可以通过的各种方法 使单台服务器的性能最优化,然而单台服务器的性能比较有限,如果仍然不能满 足要求,这时就必须考虑使用解决高负荷访问和大并发量访问采用的终极解决方 案集群和负载均衡。计算机集群简称集群是一种计算机系统,它通过将一组松散集成的计算机软 件和/或硬件连接起来高度紧密地协作完成计算工作。负载均衡是构成集群的一种方案,它将多台Web服务器以对称的方式组成一个服务器集合,每台服务器都有 等价的地位,然后通过某种负载分担技术将外部发送来的请求均匀分配到对称结 构中的某一台服务器上,而接收到请求的服务器独立地回应客户的请求。 1.负载均衡的分类目前针对不同的应
37、用出现了多种负载均衡技术,下面根据负载均衡采用的设 备、应用的地理结构和应用的网络层来分类:软件/硬件负载均衡软件负载均衡是指在服务器的操作系统上安装附加的软件来实现负载均衡, 如在Linux操作系统上安装LVS (Linux Virtual Server)软件;硬件负载均衡是直 接在服务器和外部网络之间安装负载均衡器,一些具备第四层交换能力的局域网 交换机,就能作为一个硬件负载均衡器,完成服务器的负载均衡。本地/全局负载均衡本地负载均衡是指对本地的服务器集群做负载均衡,全局负载均衡是指对分 别放置在不同的地理位置、有不同网络结构的服务器群之间做负载均衡。基于不同网络层次的负载均衡在各负载均衡
38、方式中,针对不同的应用需求,在OSI参考模型的第二、三、 四、七层都有相应的负载均衡方式,负载均衡技术一般操作于网络的第四层或第 七层。第四层负载均衡将外部Internet上的IP地址映射为多个内部服务器的IP地 址,每次TCP连接请求使用其中的一个内部地址达到负载均衡的目的;第七层负 载均衡通过对应用层服务的控制实现负载均衡,适用于对HTTP服务器群的应用, 它检查流经的HTTP报头并根据报头信息执行负载均衡任务。 2.web集群和负载均衡技术实现根据负载均衡实现的原理不同,Web负载均衡实现技术可分为以下几种基于客户端的负载均衡这种模式是在网络的客户端安装集成了负载均衡的应用软件,在客户端
39、每次 请求连接时根据服务端的运行情况来选择服务器。由于所有使用负载均衡的客户 端必须安装额外的软件,所以这种方式使用的较少,只在一些特殊场合使用。基于DNS的负载均衡在DNS服务器中为多个不同的地址分配同一个域名,当用户用这个域名访问 时,DNS服务器为这域名随机的解析一个地址,从而使得不同的用户访问不同的服务器,达到负载均衡的目的。采用这种方式的缺点是,由于DNS端存在缓存, 所以当集群中的某一服务结点失效时,它的地址在一段时间内依然被解析给用户, 造成部分用户访问失效,必须等DNS解析更新或服务器重启才能恢复。基于NAT的负载均衡NAT (Network Address Translati
40、on)即网络地址转换,就是将一个已注册的 Internet IP地址映射为多个内部IP地址,对每次连接请求动态的转换为一个内部服 务器的地址,从而达到负载均衡目的。这种负载均衡方式是一种比较完善的负载 均衡技术,可以通过软件来实现如LVS,也可以通过硬件来实现,如第四层交换反向代理负载均衡一般的代理方式是指用户通过代理服务器来访问不同的站点,而反向代理方 式是指代理服务器接收网络上的连接请求,然后将请求转发为内部的服务器,并 将服务器得到的结果返回给客户端。反向代理负载均衡在OSI模型的第七层实现,它可以通过软件方式来实现, 如实现Tomcat集群的apache mod_proxy等,也可以在
41、硬件设备上实现。它的缺点 是:由于代理服务器在每次用户访问时必须打开两个连接,一个外部的,一个内 部的,所以在并发请求数量特别大时代理服务器可能会成为系统服务的瓶颈。五、结论关于高负载高并发Web系统的研究也是许多高速增长的网站必须面临的问 题,这样的网站对系统的构架设计、性能要求各个方面都有很高的要求。随着互 联网技术的不断丰富,关于高并发Web系统的优化和改进技术也得到了很大的积 累,这些技术经验涉及到系统很细的方方面面,但是缺乏系统规范的总结。本文对髙并发系统的设计和优化技术进行了全面深入的研究,具体的研究和 贡献如下:首先,对高并发Web系统的发展历程进行分析,并总结出其发展的趋势 和
42、特点;在数据库方面:分析了与数据库性能相关的初始化参数,并列出了与系 统并发量相关的初始化参数的调整方法;对数据库在内存中结构进行分析,给出 了具体的容量判断标准和调整方式;总结了一些有利于提高系统并发量的数据库 对象的使用方法和数据库并发事务控制方法;另外,对当前正在研究的内存数据 库进行研究,提出了两种内存数据库在高并发Web系统中的应用模型;在Web应用程序方面:对奥运售票系统的流程设计进行分析和优化,提 出了一些流程设计的注意方法;总结了程序中代码和SQL语句的优化方法;对 Web系统中应用的缓存技术进行了全面深入的研究;在Web服务器方面:分析了Tomcat服务器调整的方法;研究了解
43、决系 统高并发问题的终极方案既负载均衡技术,给出了几种常用负载均衡的分类;最后,结合一个实际的Web系统大学生思想测评综合系统,来说明 高并发系统具体设计过程和各种优化方法在该系统中的使用,以及最终取得的效果。参考文献1 林昊. 大型网站架构演变和知识体系J. 程序员. 2008(11) 1 Google Architecture. . 2 Le Gruenwald,YuWei chen,Jing Huang.Effects of Update Techniques on Main Memory Database System Performance. IEEE Transactions on
44、 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. 程序员
45、. 2008(01) 6 易国洪. 内存数据库中恢复技术研究J. 科技广场. 2007(03) 7 孙海霞,马玉凤. 负载均衡综述J. 电脑知识与技术. 2006(08) 8 杨瑞,蔡虹. 数据库连接池原理及其JAVA实现J. 微型机与应用. 2003(04) 9 李陶深,罗翌源,蒙波,严毅. 用存储过程提高应用程序执行效率J. 微型电脑应用. 2002(09) 10 李学军. WebCache技术及其应用J. 电信技术. 1999(11)2 林胜利,王坤茹,孟海利编著.Java优化编程M. 电子工业出版社, 2005 3 (美)EdwardWhalen,(美)MitchellSchroeter著,高艳春等译.Oracle性能调整与优化M. 人民邮电出版社, 20025 何海江. 基于Web的电子邮件系统设计与实现D. 大连理工大学 2006 6 纪风. 基于划分的分布式环境:设计模式与动态划分D. 浙江大学 2008 7 冯青峰. 基于Java RMI的分布对象负载均衡研究与实现D. 西安电子科技大学 2002 8 于威. 银证数据交换平台通信机制的设计与实现D. 山东大学 2008 9 潘传志. 远程虚拟实验信息平台负载均衡研究D. 华中科技大学 2004 10 吴炎飞. 基于J2ME的手机即时通信系统的设计与实现D. 大连理工大学 2007