天天看点

网站的高并发高访问量优化一 升级硬件二 优化程序代码三 架构上去优化

不管怎么样,先要找出瓶颈在哪:是CPU负荷太高(经常100%),还是内存不

够用(大量使用虚拟内存),还是磁盘I/O性能跟不上(硬盘指示灯狂闪)?

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

一 升级硬件

以上几个都是可以通过升级硬件来解决或者改善的(使用更高等级的CPU,更快速和更大容量的内

存,配置硬件磁盘阵列并使用更多数量的高速SCSI硬盘),但这需要较大的投入。

二 优化程序代码

1、减少数据库的压力

   优化数据库结构和查询语句,缓存查询结果/建内存表,建索引

    2、减少Apache的压力——减少HTTP的请求次数

  背景图片全部做成一张然后用CSS控制位置/不使用AJAX来进行即时验证(不考虑客户体验什么的,

      通过拖长客户时间来减轻服务器压力)

    3、减轻I/O压力

  页面局部缓存

三 架构上去优化

1.使用负载均衡技术

简单的提高硬件性能并不能真正解决这个问题,因为单台服务器的性能总是有限的,一般

来讲,一台PC服务器所能提供的并发访问处理能力大约为1000个,更为高档的专用服务器能

够支持3000-5000个并发访问,这样的能力还是无法满足负载较大的网站的要求。尤其是网络请

求具有突发性,当某些重大事件发生时,网络访问就会急剧上升,从而造成网络瓶颈,例如在

网上发布的克林顿弹劾书就是很明显的例子。必须采用多台服务器提供网络服务,并将网络请求

分配给这些服务器分担, 才能提供处理大量并发服务的能力。

当使用多台服务器来分担负载的时候,最简单的办法是将不同的服务器用在不同的方面。按

提供的内容进行分割时,可以将一台服务器用于提供新闻页面,而另一台用于提供游戏页面;

或者可以按服务器的功能进行分割,将一台服务器用于提供静态页面访问,而另一些用于提供

CGI等需要大量消耗资源的动态页面访问。然而由于网络访问的突发性,使得很难确定那些页面

造成的负载太大,如果将服务的页面分割的过细就会造成很大浪费。事实上造成负载过大的页面

常常是在变化中的,如果要经常按照负载变化来调整页面所在的服务器,那么势必对管理和维

护造成极大的问题。因此这种分割方法只能是大方向的调整

2.Lighttpd+Squid+Apache搭建高效率Web服务器

      Apache通常是开源界的首选Web服务器,因为它的强大和可靠,已经具有了品牌效应,可

以适用于绝大部分的应用场合。但是它的强大有时候却显得笨重,配置文件得让人望而生畏,

高并发情况下效率不太高。而轻量级的Web服务器Lighttpd却是后起之秀,其静态文件的响

应能力远高于Apache,据说是Apache的2-3倍。Lighttpd的高性能和易用性,足以打动我们,

在它能够胜任的领域,尽量用它。Lighttpd对PHP的支持也很好,还可以通过Fastcgi方式支

持其他的语言,比如Python。

毕竟Lighttpd是轻量级的服务器,功能上不能跟Apache比,某些应用无法胜任。比如

Lighttpd还不支持缓存,而现在的绝大部分站点都是用程序生成动态内容,没有缓存的话即

使程序的效率再高也很难满足大访问量的需求,而且让程序不停的去做同一件事情也实在没

有意义。首先,Web程序是需要做缓存处理的,即把反复使用的数据做缓存。即使这样也还不

够,单单是启动Web处理程序的代价就不少,缓存最后生成的静态页面是必不可少的。而做

这个是 Squid的强项,它本是做代理的,支持高效的缓存,可以用来给站点做反向代理加速。

把Squid放在Apache或者Lighttpd的前端来缓存 Web服务器生成的动态内容,而Web应用

程序只需要适当地设置页面实效时间即可。

即使是大部分内容动态生成的网站,仍免不了会有一些静态元素,比如图片、JS脚本、CSS等

等,将Squid放在Apache或者Lighttp前端后,反而会使性能下降,毕竟处理HTTP请求是

Web服务器的强项。而且已经存在于文件系统中的静态内容再在Squid中缓存一下,浪费内

存和硬盘空间。因此可以考虑将Lighttpd再放在Squid的前面,构成 Lighttpd+Squid+Apache

的一条处理链,Lighttpd在最前面,专门用来处理静态内容的请求,把动态内容请求通过

proxy模块转发给Squid,如果Squid中有该请求的内容且没有过期,则直接返回给Lighttpd。

新请求或者过期的页面请求交由Apache中Web程序来处理。经过Lighttpd和Squid的两级过

滤,Apache需要处理的请求将大大减少,减少了Web应用程序的压力。同时这样的构架,便

于把不同的处理分散到多台计算机上进行,由Lighttpd在前面统一把关。

在这种架构下,每一级都是可以进行单独优化的,比如Lighttpd可以采用异步IO方式,

Squid可以启用内存来缓存,Apache可以启用MPM 等,并且每一级都可以使用多台机器来

均衡负载,伸缩性很好。

转自:https://blog.csdn.net/guochunyang/article/details/6325653

继续阅读