- 浏览: 41941 次
- 性别:
- 来自: 北京
最新评论
-
pujing:
start G:\8娱乐\舞蹈\xiju..\
建立一个别人不能接触的文件夹 -
ivywong:
楼主你好!公司准备做样一个业务平台,看到这篇文章收益匪浅。我想 ...
业务基础平台的设计
架构原理
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等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。
实例讲解
下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron500,内存为PC 100384M,因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式,开在同一台机器的同一个端口上。
Lighttpd服务于80端口,Squid运行在3128端口,Apache运行在81端口。
Lighttpd的配置
多个域名采用/var/www/domain/subdomain的目录结构,用evhost模块配置document-root如下:
evhost.path-pattern = var.basedir +"/%0/%3/"
FtpSearch中有Perl脚本,需要启用CGI支持,它是用来做ftp站内搜索的,缓存的意义不大,直接由lighttpd的mod_cgi处理:
$HTTP["url"] =~"^/cgi-bin/" { # only allow cgi's in this directory
dir-listing.activate ="disable" #disable directory listings
cgi.assign =( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
}
bbs使用的是phpBB,访问量不大,可以放在lighttpd(fastcgi)或者apache(mod_php)下,暂时使用lighttpd,设置所有.php的页面请求有fastcgi处理:
fastcgi.server =( ".php" => ( ( "host" => "127.0.0.1", "port"=>1026, "bin-path" => "/usr/bin/php-cgi" ) ) )
blog.daviesliu.net 和blog.rainbud.net是用mod_python编写的blogxp程序,所有静态内容都有扩展名,而动态内容没有扩展名。blogxp是用python程序生成XML格式的数据再交由mod_xslt转换成HTML页面,只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理:
$HTTP["host"] =~"^blog" {
$HTTP["url"]!~ "\."{
proxy.server = ( "" => ( "localhost" => ( "host"=>"127.0.0.1", "port"=> 3128 ) ) ) #3128端口为
}
}
share中有静态页面,也有用mod_python处理的请求,在/cgi/下:
$HTTP["host"] =~"^share" {
proxy.server= (
"/cgi" => ( "localhost" => ( "host"=> "127.0.0.1","port"=> 3128 ) )
)
}
Squid的配置
只允许本地访问:
http_port 3128
http_access allow localhost
http_access deny all
启用反向代理:
httpd_accel_host127.0.0.1
httpd_accel_port81 #apache的端口
httpd_accel_single_host on
httpd_accel_with_proxyon #启用缓存
httpd_accel_uses_host_header on#启用虚拟主机支持
此方向代理支持该主机上的所有域名。
Apache的配置
配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:
APACHE2_OPTS="-DPYTHON -D XSLT -D PHP5"
所有网站的根目录:
<Directory"/var/www">
AllowOverrideAll #允许.htaccess覆盖
Orderallow,deny
Allow fromall
</Directory>
基于域名的虚拟主机:
<VirtualHost*:81>
ServerName blog.daviesliu.net
DocumentRoot /var/www/daviesliu.net/blog
</VirtualHost>
这里明显没有lighttpd的evhost配置方便。
blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):
SetHandlermod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On
<FilesMatch "\.">
SetHandlerNone #静态文件直接由Apache处理
</FilesMatch>
<IfModule mod_xslt.c>
AddTypetext/xsl .xsl #防止对xsl文件进行转化
AddOutputFilterByType mod_xslt text/xml
XSLTCacheoff
XSLTProcesson
</IfModule>
Header set Pragma "cache"
Header set Cache-Control "cache"
在blogxp.publisher里面,还需要设置返回的文档类型和过期时间:
req.content_type = "text/xml"
req.headers_out['Expires'] = formatdate( time.time() + 60 * 5)
经过这样的配置,所有站点都可以通过80、3128、81三个端口进行正常访问,80端口用作对外的访问,以减少负荷。81端口可以用作开发时的调试,没有缓存的困扰。
性能测试
由于时间和精力有限,下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均),评价指标为每秒钟的请求数。
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js为例:
ab2 -n 1000 -c10 http://blog.daviesliu.net:80/scripts/prototype.js
静态内容:prototype.js(27kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
380
210
240
10
410
215
240
100
380
160
230
可见在静态内容上,Lighttpd表现强劲,而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。
动态页面:/rss (31kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
103
210
6.17
10
110
200
6.04
100
100
100
6.24
在动态内容上,Squid的作用非常明显,而Lighttpd受限于Squid的效率,并且还要低一大截。如果是有多台Squid来做均衡的话,Lighttpd的功效才能发挥出来。
在单机且静态内容很少的情况下,可以不用Lighttpd而将Squid置于最前面。
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等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。
实例讲解
下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron500,内存为PC 100384M,因此比较关注Web服务器的效率。这几个站点都是采用虚拟主机方式,开在同一台机器的同一个端口上。
Lighttpd服务于80端口,Squid运行在3128端口,Apache运行在81端口。
Lighttpd的配置
多个域名采用/var/www/domain/subdomain的目录结构,用evhost模块配置document-root如下:
evhost.path-pattern = var.basedir +"/%0/%3/"
FtpSearch中有Perl脚本,需要启用CGI支持,它是用来做ftp站内搜索的,缓存的意义不大,直接由lighttpd的mod_cgi处理:
$HTTP["url"] =~"^/cgi-bin/" { # only allow cgi's in this directory
dir-listing.activate ="disable" #disable directory listings
cgi.assign =( ".pl" => "/usr/bin/perl", ".cgi" => "/usr/bin/perl" )
}
bbs使用的是phpBB,访问量不大,可以放在lighttpd(fastcgi)或者apache(mod_php)下,暂时使用lighttpd,设置所有.php的页面请求有fastcgi处理:
fastcgi.server =( ".php" => ( ( "host" => "127.0.0.1", "port"=>1026, "bin-path" => "/usr/bin/php-cgi" ) ) )
blog.daviesliu.net 和blog.rainbud.net是用mod_python编写的blogxp程序,所有静态内容都有扩展名,而动态内容没有扩展名。blogxp是用python程序生成XML格式的数据再交由mod_xslt转换成HTML页面,只能放在Apache下运行。该站点采用典型Lighttpd+Squid+Apache方式处理:
$HTTP["host"] =~"^blog" {
$HTTP["url"]!~ "\."{
proxy.server = ( "" => ( "localhost" => ( "host"=>"127.0.0.1", "port"=> 3128 ) ) ) #3128端口为
}
}
share中有静态页面,也有用mod_python处理的请求,在/cgi/下:
$HTTP["host"] =~"^share" {
proxy.server= (
"/cgi" => ( "localhost" => ( "host"=> "127.0.0.1","port"=> 3128 ) )
)
}
Squid的配置
只允许本地访问:
http_port 3128
http_access allow localhost
http_access deny all
启用反向代理:
httpd_accel_host127.0.0.1
httpd_accel_port81 #apache的端口
httpd_accel_single_host on
httpd_accel_with_proxyon #启用缓存
httpd_accel_uses_host_header on#启用虚拟主机支持
此方向代理支持该主机上的所有域名。
Apache的配置
配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:
APACHE2_OPTS="-DPYTHON -D XSLT -D PHP5"
所有网站的根目录:
<Directory"/var/www">
AllowOverrideAll #允许.htaccess覆盖
Orderallow,deny
Allow fromall
</Directory>
基于域名的虚拟主机:
<VirtualHost*:81>
ServerName blog.daviesliu.net
DocumentRoot /var/www/daviesliu.net/blog
</VirtualHost>
这里明显没有lighttpd的evhost配置方便。
blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):
SetHandlermod_python
PythonHandler blogxp.publisher
PythonDebug On
PythonAutoReload On
<FilesMatch "\.">
SetHandlerNone #静态文件直接由Apache处理
</FilesMatch>
<IfModule mod_xslt.c>
AddTypetext/xsl .xsl #防止对xsl文件进行转化
AddOutputFilterByType mod_xslt text/xml
XSLTCacheoff
XSLTProcesson
</IfModule>
Header set Pragma "cache"
Header set Cache-Control "cache"
在blogxp.publisher里面,还需要设置返回的文档类型和过期时间:
req.content_type = "text/xml"
req.headers_out['Expires'] = formatdate( time.time() + 60 * 5)
经过这样的配置,所有站点都可以通过80、3128、81三个端口进行正常访问,80端口用作对外的访问,以减少负荷。81端口可以用作开发时的调试,没有缓存的困扰。
性能测试
由于时间和精力有限,下面只用ab2做一个并不规范的性能对比测试(每项都测多次取平均),评价指标为每秒钟的请求数。
测试命令,以测试lighttpd上并发10个请求 scripts/prototype.js为例:
ab2 -n 1000 -c10 http://blog.daviesliu.net:80/scripts/prototype.js
静态内容:prototype.js(27kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
380
210
240
10
410
215
240
100
380
160
230
可见在静态内容上,Lighttpd表现强劲,而Squid在没有配内存缓存的情况下比另两个Web服务器的性能要差些。
动态页面:/rss (31kB)
Con
Lighttpd(:80)
Squid(:3128)
Apache(:81)
1
103
210
6.17
10
110
200
6.04
100
100
100
6.24
在动态内容上,Squid的作用非常明显,而Lighttpd受限于Squid的效率,并且还要低一大截。如果是有多台Squid来做均衡的话,Lighttpd的功效才能发挥出来。
在单机且静态内容很少的情况下,可以不用Lighttpd而将Squid置于最前面。
发表评论
-
记不准确的linux命令
2011-04-21 01:24 730Linux命令老是记不住,列出来就方便多了 1.wget ... -
linux上启动服务
2011-04-21 01:23 7571.apache /etc/rc.d/init.d/httpd ... -
mysql创建用户和忘记root密码
2011-04-21 01:21 12341.创建mysql用户 引用grant all on myi ... -
linux下修改系统时间
2011-04-21 01:19 629修改系统时间为:2007-01-19 12:30:00 # ... -
在本地模拟外部环境
2011-04-21 01:18 836修改文件: C:\WINDOWS\system32\drive ... -
linux下查看cpu和memery信息
2011-04-21 01:16 9541.查内存 #more/proc/meminfo cat ... -
linux下查看cpu和memery的个数
2011-04-21 01:15 7961.CPU数量 # cat /proc/cpuinfo | g ... -
mysql数据库定期备份脚本
2011-04-21 01:14 8341.mysqldatabak.sh文件(/root/) d ... -
有效配置MySQL参数
2011-04-21 01:09 5411.获取当前配置参数 ... -
优化mysql性能的几个参数的介绍
2011-04-21 01:07 588(1)、back_log: 要求 MySQL ... -
mysql的master/slave数据同步配置
2011-04-21 01:06 632mysql数据同步备份 A服 ... -
网站开发中用到的工具(2007)
2011-04-21 01:02 8161.基本工具 mysql :数据库 smarty:分离php程 ... -
(转)大型网站的架构-2007年
2011-04-21 01:00 623小型的网站,比如个人 ... -
(转2007)思考高并发高负载网站的系统架构
2011-04-21 00:58 688下面是我10月中旬的想 ... -
mysql数据库参数show status(2007-04-25)
2011-04-21 00:53 537mysql> show status like '%ta ... -
BIND+Mysql实现DNS轮询泛解析和IP视图
2011-04-21 00:51 2445文档内容: 1.关于本文档 2.Bind+Mysql+Mysq ... -
这次开发中会用到的ZendFrameWork模块
2011-04-21 00:47 898Zend_Db Zend_Controller Zend_Vi ... -
处理提示信息常用的js
2011-04-21 00:46 578一、controller里 1.返回前一页面并刷新 ec ... -
网站性能测试工具ab(Apache Bench)
2011-04-21 00:44 747进入ab.exe根目录 ab -n 1000 -c 10 h ... -
在linux上搭建postfix邮件系统
2011-04-21 00:43 1459一、基本概念 1.MTA:(Mail TransportAge ...
相关推荐
简单的一键部署PHP调试环境,适合初学者。集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader
phpLight 2014 是网上首套LightTPD+PHP集成包,集成最新Lighttpd+PHP+MySQL+SQL-Front+Zend Guard Loader+XCache。纯绿色,安装后无需再配置。...2. 此为Lighttpd+PHP方案,需要apache+php方案的请到www.phpSt
使用lighttpd的开源代码成功搭建支持cgi的代码包
Lighttpd+Squid+Apache搭建高效率Web服务器 9 浏览量比较大的网站应该从哪几个方面入手? 17 用负载均衡技术建设高负载站点 20 大型网站的架构设计问题 25 开源平台的高并发集群思考 26 大型、...
高性能高并发服务器架构 ...Lighttpd+Squid+Apache搭建高效率Web服务器 浏览量比较大的网站应该从哪几个方面入手? 用负载均衡技术建设高负载站点 大型网站的架构设计问题 开源平台的高并发集群思考
该程序包集成最新的Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序绿色小巧简易迷你仅有35M,有专门的控制面板。...
2. 此为Lighttpd+PHP方案,需要apache+php方案的请到www.phpStudy.net下载phpStudy,Nginx+php方案下载phpfind。 3. 重装系统后或相关服务丢失时,只需要点一下『运行模式-应用』即可,更改路径自动启动。 4. 可通过...
centos7下安装测试成功的所有安装包整合
直接访问 127.0.0.1 访问WEB 同时会在使用工具生成两个菜单,一个查看 phpinfo, 一个查看 lighttpd状态, 网站根目录在/var/www/ 下,php.ini 在 /etc/目录下, lighttpd.conf 在 /etc/lighttpd/ 下,mysql 没有设置...
linux下apache+web服务器搭建教程知识.pdf
Openwrt里架设Lighttpd+PhP5+MYSQL环境标准教程.pdf
参考了网上的一些资源和信息, lighttpd是自己编译出来的,php-cgi是网上下载,合起来可以在android上使用。 里面也包括了配置文件。
Web服务器选型(Apache+Nginx+Lighttpd)之性能对比测试报告.pdf
lighttpd代替apache部署高速web服务器
其实Apache、lighttpd、Nginx都用他们优点,在什么情况下我们如何去选择适合自己的Web高性能服务器,如何去搭建一个适合自己的架构环境,这个是一个很麻烦的事情。接下来,在ADC2012(AlibabaDeveloperConference2012...
取代Apache的高性能Web服务器 电子工业出版社 319页 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 1.4 Nginx与Apache、Lighttpd的综合对比 第2章 Nginx服务器...
一个轻量级的Web 服务器,支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能。它具有非常低的内存开销,CPU占用率低,效能好,以及丰富的模块等特点,其静态文件的响应能力远高于Apache...
三大WEB服务器对比分析(apache ,lighttpd,nginx) 分析的还不错
三大WEB服务器对比分析apache,lighttpd,nginx pdf文档
Lighttpd+Squid+Apache搭建高效率Web服务器 9 浏览量比较大的网站应该从哪几个方面入手? 17 用负载均衡技术建设高负载站点 20 大型网站的架构设计问题 25 开源平台的高并发集群思考 26 大型...