(转载)应对网站大规模并发访问的优化建议

再过半个月就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页面直接读取,这样访问的效率就可以得到有效的提高。

时间: 2024-09-29 03:25:00

(转载)应对网站大规模并发访问的优化建议的相关文章

网站大规模并发访问的优化建议

一.服务器配置优化 我们需要根据应用服务器的性能和并发访问量的大小来规划应用服务器的数量.有一个使用原则是:单台应用服务器的性能不一定要求最好,但是数量一定要足够, 最好能有一定的冗余来保障服务器故障.特别是,在高并发访问峰期间,适当增加某些关键应用的服务器数量.比如在某些高峰查询业务上,可以使用多台服务器, 以满足用户每小时上百万次的点击量. 二.使用负载均衡技术 负载均衡技术是解决集中并发访问的核心技术,也是一种较为有效的解决网站大规模并发访问的方法.实现负载均衡技术的主要设备是负载均衡器服

怎样利用代码与习惯提高网站的并发访问性能以及自己的一些疑惑

最近公司因为网站并发问题.要将.net 改版成PHP.虽然我表示不服,但是人轻言微╮(╯▽╰)╭.一言难尽. 网站的并发性能低.跟语言有毛毛球关系?! 特地去百度了一下,关于如何提高网站并发性能的问题.加上一些自己的见解,这里抛砖引玉.大家随意看看.轻拍. 请先看度娘上搞到的大牛回答: 1.HTML静态化 其实大家都知道,效率最高.消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是 最有效的方法.但是对于大量内容并且频繁更新的网站

Java处理 网站高并发问题 的优化方法

Java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据) 一:高并发高负载类网站关注点之数据库 没错,首先是数据库,这是大多数应用所面临的首个SPOF.尤其是Web2.0的应用,数据库的响应是首先要解决的. 一般来说MySQL是最常用的,可能最初是一个mysql主机,当数据增加到100万以上,那么,MySQL的效能急剧下降.常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作.我推荐的是M-M-Slaves

大型php网站性能和并发访问优化方案

网站性能优化对于大型网站来说非常重要,一个网站的访问打开速度影响着用户体验度,网站访问速度慢会造成高跳出率,小网站很好解决,那对于大型网站由于栏目多,图片和图像都比较庞大,那该怎么进行整体性能优化呢?本文为你提供一份大型php网站性能和并发访问优化方案. 一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.这几个解决思路在一定程度上意味着更大的投入.

高并发访问和海量数据 大型网站架构技术一览

高并发访问和海量数据 大型网站架构技术一览 林涛 发表于:2016-4-19 12:12 分类:WebServer 标签:并发,海量数据,高并发 44次 大型网站的挑战主要来自庞大的用户,高并发的访问和海量数据,任何简单的业务一旦需要处理数以P计的数据和面对数以亿计的用户,问题就会变得棘手.大型网站架构主要就是解决这类问题. 本文内容大部分来自<大型网站技术架构>,这本书很值得一看,强烈推荐. 1.前端架构 前端指用户请求到达网站应用服务器之前经历的环节,通常不包含网站业务逻辑,不处理动态内容

数据库学习 - 大规模并发优化学习笔记

大规模并发 优化服务器配置 使用负载均衡 数据库结构设计 中间件优化 数据缓存使用 数据库高并发 数据库并发策略 数据库设计建议 表设计的具体问题 查询优化 注意事项 算法优化 大规模并发 当网站有很多人访问的时候,并发量增大,这个时候我们所设计的网站就会遇到挑战.很多本来是没有问题的设计,这个时候可能就会暴露出问题了. 就像宏观物理定理不适合微观一样. 下面是一些优化的建议方法. 优化服务器配置 这个是在硬件上提升服务器,因为任何软件上的优化都是有瓶颈和极限的,所以提高服务器数量和配置是比较简

动易多屏优化怎么实现网站自动识别用户访问设备

原文转载自http://www.pangshayu.com/html/8634.html 动易多屏优化技术是指在保持同一域名.同一后台.同一数据库.同一套系统的基础上,不同设备(PC/手机/PAD)来访问网站前台时,网站都会针对此类设备显示与之最相适应和专为此类设备的用户使用习惯优化的前台界面,从而在不同设备访问时都能提供最佳用户体验. 那么问题来了,动易多屏优化怎么实现网站会自动识别用户访问设备呢?其实很简单,按照本文的操作就可以快捷高效的实现动易多屏优化实现网站自动识别用户访问设备的功能.

php商城网站如何提高性能和并发访问

大型商城网站性能提高策略 大型商城网站,比如在面对大量用户的访问.高并发请求方面,一般的商城解决方案主要在这样几个方面:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.但是这几个解决思路意味着更大的投入.那还有什么办法去更小投入的优化这方面的性能吗?在开发DSmall商城系统的时候,我们利用了一下几点: 1.HTML静态化 大家都知道,执行效率最高.消耗最小的其实就是纯静态化的html页面,所以尽可能使网站上的页面采用静态页面去实现. 2.图片服务器分离 图片是最消

Cocos2d-x优化中多线程并发访问

多线程并发访问在Cocos2d-x引擎中用的不是很多,这主要是因为中整个结构设计没有采用多线程.源自于Objective-C的Ref对象,需要使用AutoreleasePool进行内存管理,AutoreleasePool是非线程安全的,所有不推荐在子多线程中调用Ref对象的retain(). release()和autorelease()等函数.另外,OpenGL上下文对象也是不支持线程安全的.但是有的时候我们需要异步加载一些资源,例如:加载图片纹理.声音的预处理和网络请求数据等.如果是异步加载