关闭

浏览量比较大的网站应该从哪几个方面入手?

5898人阅读 评论(4) 收藏 举报
原贴:http://www.phpx.com/happy/viewthread.php?action=printable&tid=135353

标题: [问题] 浏览量比较大的网站应该从哪几个方面入手? [打印本页]

作者: 游戏人间    时间: 2007-6-15 04:23 PM     标题: 浏览量比较大的网站应该从哪几个方面入手?

当然,提问前先将个人的一些理解分享。大家有的也请不吝共享,偶急切的需要这方面的经验....

下面所提到的主要是针对一般的网站,不包括下载或聊天室等特殊站点...

一、减少数据库的压力

  缓存查询结果/建内存表

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

  背景图片全部做成一张然后用CSS控制位置/不使用AJAX来进行即时验证(不考虑客户体验什么的,通过拖长客户时间来减轻服务器压力)

三、减轻I/O压力

  页面局部缓存
作者: zeying    时间: 2007-6-15 04:34 PM

关注。。。。
作者: 游戏人间    时间: 2007-6-15 05:16 PM

顶起
作者: 蟋蟀    时间: 2007-6-15 05:29 PM

咱也说点,只是理论,不知道对不对.
流量大的网站咱没做过.
一横向
1\首先要考虑的就是硬件,适当的投入硬件,要比你搞那么多软件优化要实惠的多.
2\在就是从cpu 内存 硬盘 了.频繁操作的数据能存到内存中就存到内存中,能存到分布共享中就存储在分布共享内存中
其次考虑在考虑硬盘上.

二纵向
1\从web的http的响应 应答考虑
web要有服务器,所以如何优化服务器,如何通过配置服务器加速操作,能缓存的缓存,这方面的东西不少。
2、要是动态脚本,考虑使用的数据库 如何优化数据库、如何建立合理的表等操作 这方面细节同样不少
3、用php脚本,尽量少的require 文件,毕竟每次php是一次性编译,而且每次到require都要返回 这个脚本方面的就要看程序员的水平了

还有很多
作者: yanglei1979    时间: 2007-6-15 06:02 PM

我也觉得这个问题比较值得讨论

1,写程序的时候,算法尽量做到优化,在满足功能的条件下尽量减少代码的执行

2,安排数据结构的时候,能用整型的,就不用字符型的

3,注意优化SQL查询语句

4,一些已经定下来的分类名什么的,就不要每次从数据库内调用了

5,服务器中PHP,MYSQL,APACHE模块安装和配置的时候,模块和参数尽量做到最优化的配置,(当然这个应该比较困难了,要有经验才行.)


这是我觉得的几点,下面的继续吧.
作者: 细雨清风    时间: 2007-6-15 06:18 PM

学到不少东西,你们继续,新手学习。。。
作者: ywd    时间: 2007-6-15 06:32 PM

gzip squid cache 。。。。。。。。
作者: 槛外人    时间: 2007-6-15 06:39 PM



QUOTE:
原帖由 蟋蟀 于 2007-6-15 05:29 PM 发表
3、用php脚本,尽量少的require 文件,毕竟每次php是一次性编译,而且每次到require都要返回 这个脚本方面的就要看程序员的水平了
PHP不是解释型的?   对require的效率不太了解, 不过做稍微大点的系统,好像不require不行
作者: xiajialin    时间: 2007-6-16 09:12 AM

我是新手我学习。耶!
作者: 风在芯中    时间: 2007-6-19 11:14 AM

Web访问负载均衡

WEB缓存服务器组
WEB服务器
DB缓存服务器组
DB服务器

有钱就这么搞
作者: wzhu    时间: 2007-6-19 11:21 AM



QUOTE:
原帖由 风在芯中 于 2007-6-19 11:14 发表
Web访问负载均衡

WEB缓存服务器组
WEB服务器
DB缓存服务器组
DB服务器

有钱就这么搞
有钱可以搞集群。多线路。

有钱好办事
作者: robin830421    时间: 2007-6-19 11:55 AM

不错  观察中
作者: yanzhitou    时间: 2007-6-19 04:03 PM

只能帮你顶起来,别的帮不上了。
作者: 游戏人间    时间: 2007-6-19 04:20 PM



QUOTE:
原帖由 wzhu 于 2007-6-19 11:21 发表

有钱可以搞集群。多线路。

有钱好办事
我想说的是同等硬件条件下程序方面应该什么下手效率更高,误解我的意思了。
作者: fcicq    时间: 2007-6-19 09:30 PM

好久没出来了,难得碰上一篇可以回的帖子

一、减少数据库的压力
  缓存查询结果/建内存表

有条件就把数据库尽量分开,减小数据库规模
杜绝超过0.5s的 queries - 非常重要!
开大内存索引

二、 减少Apache的压力——减少HTTP的请求次数
  背景图片全部做成一张然后用CSS控制位置/不使用AJAX来进行即时验证(不考虑客户体验什么的,通过拖长客户时间来减轻服务器压力)
背景图片?这个没必要.
静态内容不要用apache!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

三、减轻I/O压力
  页面局部缓存
作者: niohe    时间: 2007-6-19 11:06 PM

楼上的不用apache怎么访问呢?求教
另外俺是个菜鸟说2个简单的 呵呵
少用 正则和递归等效率低的技术
少查点数据库
作者: qqlyj    时间: 2007-6-19 11:55 PM

坐着看,我写的每个文件都有require啊,,晕倒
作者: pangmen    时间: 2007-6-20 12:34 AM

首先来个服务器集群,再加个磁盘阵列,再来个数据库集群
作者: 游戏人间    时间: 2007-6-20 04:35 AM



QUOTE:
原帖由 fcicq 于 2007-6-19 21:30 发表
二、 减少Apache的压力——减少HTTP的请求次数
  背景图片全部做成一张然后用CSS控制位置/不使用AJAX来进行即时验证(不考虑客户体验什么的,通过拖长客户时间来减轻服务器压力)
背景图片?这个没必要.//你啥知道没这个必要,我上次也是听他们几个人的意见说这样比较好,而且使用典范是腾讯,其它网站我还没注意过
静态内容不要用apache!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!//难道说图片的下载不用经过APACHE
背景图片?这个没必要.

// 我上次也是听他们几个人的意见说这样比较好,而且使用典范是腾讯,其它网站我还没注意过

// 这么说吧,同样是背景图片你用的是一百张(夸张点的说),我用的是一张.那么一个是100个HTTP请求,一个是1个请求.

静态内容不要用apache!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

// 难道说图片的下载不用经过APACHE

// 这个不可能吧,如果你服务器上不装APACHE其它人还能浏览图片不成.上面我所提到的背景做成一张就是这样,如果是一百张那么客户端就向APACHE发出一百个请求...
作者: leobok    时间: 2007-6-20 07:16 AM

先学好PHP再说。。。
作者: ¥    时间: 2007-6-20 08:57 AM



QUOTE:
原帖由 游戏人间 于 2007-6-20 04:35 AM 发表


背景图片?这个没必要.

// 我上次也是听他们几个人的意见说这样比较好,而且使用典范是腾讯,其它网站我还没注意过

// 这么说吧,同样是背景图片你用的是一百张(夸张点的说),我用的是一张.那么一个是100个 ...
问题是一次请求1M的图和1M分开十次来load,效率谁优谁劣还有待考究吧?

不用apache,估计是用lighttpd,听说这东西做静态的web server是很不错的...
作者: wzj0518    时间: 2007-6-20 09:05 AM

学习学习!!
楼上是前台?
不过方法很好!

[ 本帖最后由 wzj0518 于 2007-6-20 09:12 AM 编辑 ]
作者: 游戏人间    时间: 2007-6-20 10:05 AM



QUOTE:
原帖由 于 2007-6-20 08:57 发表

问题是一次请求1M的图和1M分开十次来load,效率谁优谁劣还有待考究吧?

不用apache,估计是用lighttpd,听说这东西做静态的web server是很不错的...
问题是一次请求1M的图和1M分开十次来load,效率谁优谁劣还有待考究吧?

// 确实是这样,但就背景而言,不可能有1M,就一般的网站(新浪什么的),背景图片都很小.至于一次请求快还是多次请求快,这个没研究过.我的想法是每一次请求都会有一定的时间延时.

不用apache,估计是用lighttpd,听说这东西做静态的web server是很不错的...

// 对于一般的情况下还是装的APACHE,你所说的lighttpd还是头不回听说,不知道是不是跟APACHE一样的东西
作者: wzhu    时间: 2007-6-20 11:21 AM

lighttp占用内存小,效率高,相比apache是轻量级的web服务器
如果网站是纯静态网页,可以考虑这个
作者: 游戏人间    时间: 2007-6-20 11:23 AM



QUOTE:
原帖由 wzhu 于 2007-6-20 11:21 发表
lighttp占用内存小,效率高,相比apache是轻量级的web服务器
如果网站是纯静态网页,可以考虑这个
这就难了,纯静态的网站几乎不存在了.
作者: ¥    时间: 2007-6-20 11:59 AM

可以lighttp+apache配合的...lighttp负责静态的如image,js,css等,apache负责php,用rewrite转发到lighttp
甚至有研究表明,lighttp处理fastcgi模式下的php,要比apache等要快
性能上,lighttp是要优于apache的,但稳定性就差点..
作者: sigmazel    时间: 2007-6-20 12:49 PM

WEB方面:
1.脚本引用的资源文件如css,js,image可以多放几台服务器上,尽可能的压缩。
2.适当的加入ajax
3.尽量控制php的代码行,如果方便的话,可以写成com或so级的
4.缓存
作者: php5    时间: 2007-6-20 06:55 PM

考虑硬件成本的话可以笼统地从以下着手

一、页面尽量静态化
二、配置服务器动态的走apache,静态的走Lighttpd
三、用最好的OS如FreeBSD
四、重点优化mysql性能从编译、配置上入手
五、最基本的控制好程序性能及SQL查询
六、做缓存、做代理反向代理
七、页面上的优化了,节省流量上的考虑

[ 本帖最后由 php5 于 2007-6-20 07:05 PM 编辑 ]
作者: yanglei1979    时间: 2007-6-20 07:37 PM



QUOTE:
原帖由 fcicq 于 2007-6-19 09:30 PM 发表
好久没出来了,难得碰上一篇可以回的帖子

一、减少数据库的压力
  缓存查询结果/建内存表

缓存查询结果,这项技术倒是很少听说,能举例说明下吗?

是不是把 mysql_query()函数换成另外一个函数呀,还是把 mysql_db_query()函数换成另外一个函数呀
作者: php5    时间: 2007-6-20 07:44 PM



QUOTE:
原帖由 yanglei1979 于 2007-6-20 07:37 PM 发表


缓存查询结果,这项技术倒是很少听说,能举例说明下吗?

是不是把 mysql_query()函数换成另外一个函数呀,还是把 mysql_db_query()函数换成另外一个函数呀
Adodb有这功能,不过有些鸡肋

通常重复并频繁利用的数据在查询完生成页面后    要么缓存整个页面,要么生成静态页
作者: Macaulay    时间: 2007-6-20 08:44 PM

关注.....
作者: 游戏人间    时间: 2007-6-20 08:57 PM

补充一句.如果一次数据统计:如某个表有多少条数据,这样小量数据量且不需要什么sql语句而是直接读取就可完成的数据不要放数据库直接放文本里能减少读取数据库的次数.
作者: php5    时间: 2007-6-21 08:13 AM

一般访问量较大的情况下,访问数据库的性能可能不比文本差
作者: 奶瓶    时间: 2007-6-21 10:52 AM

静态文件用apache的代价很大, 其实lighttpd和NGINX这类的也并不会小太多,有一些支持“文件至网卡”模式的特殊静态服务器可能划算一些。php的调用文件个数可以做到比较 精确的控制,tmpfs一类的方法可以尝试,不要过分迷信memcached,本地cache适当用用回保不错
作者: fengchen9127    时间: 2007-6-21 11:13 AM

优化数据库访问。
  前台实现完全的静态化当然最好,可以完全不用访问数据库,不过对于频繁更新的网站,静态化往往不能满足某些功能。
  缓存技术就是另一个解决方案,就是将动态数据存储到缓存文件中,动态网页直接调用这些文件,而不必再访问数据库,WordPress和Z-Blog都大量使用这种缓存技术。我自己也写过一个Z-Blog的计数器插件,也是基于这样的原理。
  如果确实无法避免对数据库的访问,那么可以尝试优化数据库的查询SQL.避免使用Select * from这样的语句,每次查询只返回自己需要的结果,避免短时间内的大量SQL查询。
     禁止外部的盗链。
 外部网站的图片或者文件盗链往往会带来大量的负载压力,因此应该严格限制外部对于自身的图片或者文件盗链,好在目前可以简单地通过refer来控制盗 链,Apache自己就可以通过配置来禁止盗链,IIS也有一些第三方的ISAPI可以实现同样的功能。当然,伪造refer也可以通过代码来实现盗链, 不过目前蓄意伪造refer盗链的还不多,可以先不去考虑,或者使用非技术手段来解决,比如在图片上增加水印。
    控制大文件的下载。
 大文件的下载会占用很大的流量,并且对于非SCSI硬盘来说,大量文件下载会消耗CPU,使得网站响应能力下降。因此,尽量不要提供超过2M的大文件下载,如果需要提供,建议将大文件放在另外一台服务器上。
   使用不同主机分流主要流量
   将文件放在不同的主机上,提供不同的镜像供用户下载。比如如果觉得RSS文件占用流量大,那么使用FeedBurner或者FeedSky等服务将 RSS输出放在其他主机上,这样别人访问的流量压力就大多集中在FeedBurner的主机上,RSS就不占用太多资源了。
   使用流量分析统计软件。
 在网站上安装一个流量分析统计软件,可以即时知道哪些地方耗费了大量流量,哪些页面需要再进行优化,因此,解决流量问题还需要进行精确的统计分析才可以。
作者: 游戏人间    时间: 2007-6-21 10:22 PM

继续关注中,广征意见.虽然有也在猛说,其实我并不知道我说的对不对
作者: deng0685    时间: 2007-6-21 10:31 PM

又学到了!!!
作者: 游戏人间    时间: 2007-6-22 05:09 PM

估計這貼是沒人回了,最後留個記念.
作者: php5    时间: 2007-6-22 07:28 PM

lighttpd 没有真正用过,也支持PHP,听谣言在静态访问方面要快上2-3倍

期待一种真正静态专用与优化的WEB服务器出现
作者: 奶瓶    时间: 2007-6-23 02:51 PM

kHTTPD一类的东西,还是挺有趣的
作者: isno    时间: 2007-6-23 03:24 PM

路过顶帖.
作者: red7    时间: 2007-6-23 10:52 PM

能静态的都生成静态
作者: 傻哥    时间: 2007-6-24 08:35 AM

学习一下~!
作者: thesea    时间: 2007-6-24 08:02 PM

我想知道为什么少用require呢?执行require会降低效率?为什么呢?那用include或require_once 呢?谢谢啊!
作者: fly512    时间: 2007-6-24 08:55 PM     标题: 转载一篇文章

【转载】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 等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。
作者: axpwx    时间: 2007-6-25 01:00 AM

回复我没看玩,楼主的帖子只是从程序本身来考虑的,忽略了一个重要方面,其实服务器的优化也相当重要。 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3122480次
    • 积分:32851
    • 等级:
    • 排名:第145名
    • 原创:76篇
    • 转载:1209篇
    • 译文:0篇
    • 评论:200条
    最新评论
    牛逼的网站