再过半个月就2013年的春运就要来临,每年外地打工的人们都会因为订票而烦恼。特别是网上订票,对12306提供给的网上订票系统会有各种看法,从去年的年春节,铁道部推出12306网站,实行网络实名购票,每一个返乡人原以为能买着一张回家的火车票,但结果还是大失所望。在去年,7天内,12306网站访问用户已占全球互联网用户的0.902%,每天点击量高达10亿人次,系统一度支撑不住如此庞大的访问量而陷入崩溃。12306网站的点击量属于千万PV级别,如果要满足实际的要求,那么需要能够应对网站大规模的并发访问,这一问题,很多大型网站的站长也可能会面临。要解决网站大规模并发访问带来的性能下降问题,有很多种常用的方法,我们可以从以下几个层面去考虑和优化?
一、服务器配置优化
我们需要根据应用服务器的性能和并发访问量的大小来规划应用服务器的数量。有一个使用原则是:单台应用服务器的性能不一定要求最好,但是数量一定要足够,最好能有一定的冗余来保障服务器故障。特别是,在高并发访问峰期间,适当增加某些关键应用的服务器数量。比如在某些高峰查询业务上,可以使用多台服务器,以满足用户每小时上百万次的点击量。
二、使用负载均衡技术
负载均衡技术是解决集中并发访问的核心技术,也是一种较为有效的解决网站大规模并发访问的方法。实现负载均衡技术的主要设备是负载均衡器服务器。例如,我们把网站部署到在两台不同的服务器之上(前提是要保证这2台或者多台服务器都可以正常运行网站程序),这几台服务器之间通过安装特定的软件实现负载均衡。那么,某个时刻,当网站面临大规模访问时,用户的请求会通过负载均衡程序,根据不同服务器的繁忙和资源情况,自动分配到处理性能最优的服务器上,从而将大规模用户产生的高并发访问均衡地分流到各个服务器上。这样就能大大减轻单台服务器处理高并发请求,确保整个网站系统面临高负载时的可靠性。
三、数据库结构设计
这部分是程序层的问题,通常是由软件工程师进行负责,对SQL语句进行优化。我们可以采取的措施包括:对经常查询的数据库字段做索引、对数据库表进行分区操作(如对海量数据进行分区操作十分必要,例如针对按年份存取的数据,我们可以按年进行分区)、对数据库查询语句-SQL(减少冗余的数据库操作,提高查询效率)进行优化等。
四、中间件的优化
所谓的中间件,听起来会有点像很深的技术,其实就在我们身边,各位站长朋友经常在网站部署的时候用到的Apache、IIS、Tomcat、WebLogic都是中间件。中间件主要位于客户端/服务器的操作系统之上,负责计算机的资源管理和网络通讯。举个简单的例子,我们在部署JAVA项目的时候,通常都是用Tomcat中间件,那么Tomcat在默认情况下是不优化的,当在高并发的情况下,非常容易当机。关于Tomcat的优化给出以下几个建议(本人在实际项目开发过程中觉得较为重要的几点):①线程池优化;②启动占用内存优化;③日志输出优化;④HTTP压缩优化;⑤配置文件优化。
上面举例的Tomcat中间件(也就是WEB服务器)只是一个例子,不同的网站采用不同的架构,那么对相应的中间件的优化也会有不同的方法,比如微软的IIS有相应的配置参数,所以具体的优化方法可以根据项目的需要,查阅中间件的官方文档说明进行参数设置,这样才能实现中间件的最优设置。
五、数据缓存技术的使用
现在大多数大型网站都有使用缓存技术,把用户经常使用到的数据通过缓存(Cache)技术进行管理,从而减轻服务器重新请求的压力,提高网站的访问速度。缓存技术有很多,这里我个人根据实际的项目经验,可以将其分成2种,即数据缓存和页面缓存。
①所谓的是数据缓存,指的是数据库的数据不是直接传输,而是将数据调用到内存,然后从内存中读取,从而可以大大提高读取速度。数据缓存技术有很多的方案,这里由于开源、高性能等特点,建议使用Memcache来设置数据缓存技术来加速动态web应用程序,减轻数据库负载。
②页面缓存一定程度上是针对公共页面,静态化也是页面缓存的一种,将用户经常访问的页面在服务器的相应目录下生成静态页面,当用户再次访问时,不需要对服务器进行动态请求,而只需要对缓存下来的html页面直接读取,这样访问的效率就可以得到有效的提高。