高并发高访问量网站的优化

http://blog.sina.com.cn/s/blog_4de067e40100lgys.html

不管怎么样,先要找出瓶颈在哪:是CPU负荷太高(经常100%),还是内存不
够用(大量使用虚拟内存),还是磁盘I/O性能跟不上(硬盘指示灯狂闪)?

下面是一些解决方案:(里面汲及到的一些技术如:负载均衡,数据库的优化,缓存技术,架构的设计,环境的搭建一定要有意识的去学习)

一 升级硬件
  以上几个都是可以通过升级硬件来解决或者改善的(使用更高等级的CPU,更快速和更大容量的内
存,配置硬件磁盘阵列并使用更多数量的高速SCSI硬盘),但这需要较大的投入。

优化程序代码
  1、减少数据库的压力
  <wbr><wbr>优化数据库结构和查询语句,缓存查询结果/建内存表,建索引<br><wbr><wbr><wbr>2、减少Apache的压力——减少HTTP的请求次数<br>   <wbr>背景图片全部做成一张然后用CSS控制位置/不使用AJAX来进行即时验证(不考虑客户体验什么的,<br><wbr><wbr><wbr><wbr><wbr>通过拖长客户时间来减轻服务器压力)<br><wbr><wbr><wbr>3、减轻I/O压力<br>   <wbr>页面局部缓存<br>   <br><span style="font-weight:bold">三 架构上去优化</span><br>   1.使用负载均衡技术<br>   简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的,一般<br> 来讲,一台PC服务器所能提供的并发访问处理能力大约为1000个,更为高档的专用服务器能<br> 够支持3000-5000个并发访问,这样的能力还是无法满足负载较大的网站的要求。尤其是网络请<br> 求具有突发性,当某些重大事件发生时,网络访问就会急剧上升,从而造成网络瓶颈,例如在<br> 网上发布的克林顿弹劾书就是很明显的例子。必须采用多台服务器提供网络服务,并将网络请求<br> 分配给这些服务器分担, 才能提供处理大量并发服务的能力。<br>   当使用多台服务器来分担负载的时候,最简单的办法是将不同的服务器用在不同的方面。按<br> 提供的内容进行分割时,可以将一台服务器用于提供新闻页面,而另一台用于提供游戏页面;<br> 或者可以按服务器的功能进行分割,将一台服务器用于提供静态页面访问,而另一些用于提供<br> CGI等需要大量消耗资源的动态页面访问。然而由于网络访问的突发性,使得很难确定那些页面<br> 造成的负载太大,如果将服务的页面分割的过细就会造成很大浪费。事实上造成负载过大的页面<br> 常常是在变化中的,如果要经常按照负载变化来调整页面所在的服务器,那么势必对管理和维<br> 护造成极大的问题。因此这种分割方法只能是大方向的调整<br><br>   2.Lighttpd+Squid+Apache搭建高效率Web服务器<br><wbr><wbr><wbr><wbr><wbr>Apache通常是开源界的首选Web服务器,因为它的强大和可靠,已经具有了品牌效应,可<br> 以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重,配置文件得让人望而生畏,<br> 高并发情况下效率不太高。而轻量级的Web服务器Lighttpd却是后起之秀,其静态文件的响<br> 应能力远高于Apache,据说是Apache的2-3倍。Lighttpd的高性能和易用性,足以打动我们,<br> 在它能够胜任的领域,尽量用它。Lighttpd对PHP的支持也很好,还可以通过Fastcgi方式支<br> 持其他的语言,比如Python。<br>    毕竟Lighttpd是轻量级的服务器,功能上不能跟Apache比,某些应用无法胜任。比如<br> Lighttpd还不支持缓存,而现在的绝大部分站点都是用程序生成动态内容,没有缓存的话即<br> 使程序的效率再高也很难满足大访问量的需求,而且让程序不停的去做同一件事情也实在没<br> 有意义。首先,Web程序是需要做缓存处理的,即把反复使用的数据做缓存。即使这样也还不<br> 够,单单是启动Web处理程序的代价就不少,缓存最后生成的静态页面是必不可少的。而做<br> 这个是 Squid的强项,它本是做代理的,支持高效的缓存,可以用来给站点做反向代理加速。<br> 把Squid放在Apache或者Lighttpd的前端来缓存 Web服务器生成的动态内容,而Web应用<br> 程序只需要适当地设置页面实效时间即可。<br>    即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等<br> 等,将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是<br> Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下,浪费内<br> 存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面,构成 Lighttpd+Squid+Apache<br> 的一条处理链,Lighttpd在最前面,专门用来处理静态内容的请求,把动态内容请求通过<br> proxy模块转发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。<br> 新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过<br> 滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便<br> 于把不同的处理分散到多台计算机上进行,由Lighttpd在前面统一把关。<br> 在这种架构下,每一级都是可以进行单独优化的,比如Lighttpd可以采用异步IO方式,<br> Squid可以启用内存来缓存,Apache可以启用MPM 等,并且每一级都可以使用多台机器来<br> 均衡负载,伸缩性很好。</wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr></wbr>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值