webserver/CGI
2. lighttpd,thttpd,shttpd
3. 几种web server表现的对比
4. 我的总结
http://www.chinadesign.com.cn/NewsContents1.asp?id=3386
tux是一种有GPL(GNU General Public License )许可的基于内核的Web服务器。
生成网络写的零拷贝。
零拷贝解析。
其他新功能:
虚拟主机的支持,它不限制虚拟主机的数量。
CGI可以绑定到特定的进程
一些BUG的修复。
基于X86的服务器。
交替的Web服务器如Apache来处理不知道的请求
当前的限制:
内核模块只支持服务器端。
TUX只在x86的Linux平台上测试过。
TUX能请求其他的Web服务器如Apache来处理请求。在当前的版本,它对回滚不是处理的很好。
国内绝大部分的web server不是IIS就是Apache,而论市场占有率,我认为Apache是大赢家了,至少是占据了半壁江山。
但 除了IIS/Apache外,其实我们有很多选择,对于高负载/大并发的网站而言,高性能、轻量级的web server是一剂良药。最近手头一台Server 的负载太高,居然将swap吃光导致机器非常缓慢,后来一查,原来是Apache耗掉了几乎所有资源,当时apache进程已有9XX个了。
于是用轻量级的web server替换掉apache就进入了日程表。这里顺带介绍一下这些可选的对象:
官方主页:www.lighttpd.net
Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。
lighttpd 是众多OpenSource轻量级的web server中较为优秀的一个。支持FastCGI, CGI, Auth, 输出压缩(output compress), URL重写, Alias等重要功能,而Apache之所以流行,很大程度也是因为功能丰富,在lighttpd上很多功能都有相应的实现了,这点对于apache的用 户是非常重要的,因为迁移到lighttpd就必须面对这些问题。
实用起来lighttpd确实非常不错,上文提到的apache overload的问题,用lighttpd就完全解决了。apache主要的问题是密集并发下,不断的fork()和切换,以及较高(相对于 lighttpd而言)的内存占用,使系统的资源几尽枯竭。而lighttpd采用了Multiplex技术,代码经过优化,体积非常小,资源占用很低, 而且反应速度相当快。
利用apache的rewrite技术,将繁重的cgi/fastcgi任务交给lighttpd来完成,充分利用两者的优点,现在那台服务器的负载下降了一个数量级,而且反应速度也提高了一个甚至是2个数量级!
下面是他们官方站点上的一段话:
"lightTPD is the BEST webserver out there, much faster than apache and much much much more flexible/configurable/secure than tux, and its fcgi php support is simply unbeatable."
官方网站:http://www.acme.com/software/thttpd/
thttpd 是一个非常小巧的轻量级web server,它非常非常简单,仅仅提供了HTTP/1.1和简单的CGI支持,在其官方网站上有一个与其他web server(如Apache, Zeus等)的对比图+Benchmark,可以参考参考。此外,thttpd 也类似于lighttpd,对于并发请求不使用fork()来派生子进程处理,而是采用多路复用(Multiplex)技术来实现。因此效能很好。
Thttpd 支持多种平台,如FreeBSD, SunOS, Solaris, BSD, Linux, OSF等。对于小型web server而言,速度快似乎是一个代名词,通过官方站提供的Benchmark,可以这样认为:thttpd至少和主流的web server一样快,在高负载下更快,因为其资源占用小的缘故。
Thttpd还有一个较为引人注目的特点:基于URL的文件流量限制,这对于下载的流量控制而言是非常方便的。象Apache就必须使用插件实现,效率较thttpd低。
官方网站:http://shttpd.sourceforge.net/ Shttpd是另一个轻量级的web server,具有比thttpd更丰富的功能特性,支持CGI, SSL, cookie, MD5认证, 还能嵌入(embedded)到现有的软件里。最有意思的是不需要配置文件!
由于shttpd可以嵌入其他软件,因此可以非常容易的开发嵌入式系统的web server,官方网站上称shttpd如果使用uclibc/dielibc(libc的简化子集)则开销将非常非常低。以下是其特点:
GET, POST, PUT, DELETE methods
CGI
SSL
Digest (MD5) authorization
Multiple (and user defineable) index files
Directory listing
Standard logging
Cookies
inetd mode
User-defineable mime types
No configuration files
No external dependencies
几种web server表现的对比:
被测试的web server 软件
测试环境
测试结果
以小的静态文件为测试基准
以CGI为基准
以FAST CGI为基准
以PHP脚本为基准:mod_php vs. FastCGI PHP
以Perl脚本为基准:mod_perl vs. lsperld
结论。
下面几种web server都包含在这次测试中。
Apache 1.3.33
Apache 2.0.52 (prefork mpm)
IIS 6.0
LiteSpeed 2.0 Standard
LiteSpeed 2.0 Professional
thttpd 2.25b
TUX 3.2
boa 0.94.14rc20
lighttpd 1.3.12
Aolserver 4.0.7
Mathopd 1.5p3
说明一下LSWS 是LiteSpeed Web Server的缩写。
本来也很想把zeus和 sunone也放到这次基准测试中来,但是那些软件的声明不允许对对它们的测试结果进行公布。
Network Switch: D-Link Gigabit Eight Ports Switch DGS-1008D
Server Hardware: Dell PowerEdge SC1600
CPU: Single Intel Xeon 2.4GHz/533FSB/512KB L2 Cache
memory: 256MB ECC PC2700
Hard Drive: 36GB 10K RPM SCSI drive Seagate ST336607LW
NIC: on board Intel PRO/1000 Gigabit Adapter
Server Software:
Fedora Core 3 with stock kernel 2.6.10-1.760
IIS 6.0 on Windows 2003 Enterprise
Web Server Configurations:
Apache 1.3.33
Apache 2.0.52
IIS 6.0 - default
LiteSpeed 2.0 Standard - default
LiteSpeed 2.0 Professional - default
thttpd
TUX 3.2 - default
boa
lighttpd
Aolserver
Mathopd
如果想知道他们当时的具体配置可以去原文中查看,Web Server Configurations: http://www.litespeedtech.com/benchmark.html 。
至少当我们通过网络测试并发等级<=1000的时候,我们仅仅用poll()来做我们所有的测试。
结果可能会和在本地机上通过回路测试完全不同。
CPU: Dual Athlon MP 2000+/266FSB/256KB L2 Cache
memory: 1GB PC2100
Hard Drive: 36GB 1000RPM SCSI drive
NIC: Intel PRO/1000 Gigabit Adapater
Client Software:
OS: RedHat 8.0 with kernel 2.4.22smp
Test Tool: ApacheBench (ab) 1.3.33
测试结果:
每种情况运行3次,最好的结果被采纳。服务器被重新启动,当每次测试完一种web server软件。
以小的静态文件为测试基准
小的静态页面大小只有100 bytes。用小文件测试的原因是为了避免网络带宽瓶颈。我们只为了展示web server的表现,而不是内核。
Non-KeepAlive test: ab -n 100000 -c <concurrent level> http://<ip>:<port>/100.html
这儿必然有某种Anti-DoS特性在IIS 6.0中,当并发等级大于10(小于100)的时候它丢弃了所有的连接。
CGI 基准测试
一个简单的c cgi脚本(echo)被用来在这里测试。它是C CGI/FCGI在fcgi 2.4包中 的例子。用来打印出所有的cgi环境变量。
CGI Test: ab -n 3000 -c <concurrent level> http://<ip>:<port>/cgi-bin/echo
Fast CGI 基准测试
一个简单的c++ cgi脚本(echocpp) 被用来这里测试。它是一个fcgi 2.4包中修改版本的c++ FCGI例子。它被修改成只产生一个恒定的响应。这个响应是162 byte在响应体中(response body)。从请求到请求发生改变的部分被去掉了,因为ab(ApacheBench)不喜欢变长响应体的响应。
Fast CGI Test: ab -n 10000 -c <concurrent level> http://<ip>:<port>/cgi-bin/echo
两个简单的php脚本被用来测试。一个是hello.php只 输出hello world。另一个是phpinfo.php,只调用phpinfo()。这里都没有配置操作码加速器(opcode accelerator)。因为他们对这两个简单的php脚本没有太大的影响。
hello.php test: ab -n 10000 -c <concurrent level> http://<ip>:<port>/hello.php
phpinfo.php test: ab -n 10000 -c <concurrent level> http://<ip>:<port>/phpinfo.php
一个Hello World perl脚本,产生一个77 bytes的响应体。被用来测试。
Apache 2.0没有测。因为在同一个服务器上既为 1.3又为2.0安装mod_perl太麻烦了。
Apache 1.3 被配置成用 Apache::Registry去处理perl 脚本.
Lsperld 是一个Perl Fast CGI 脚本它可以运行CGI perl 脚本在一个 persistent Perl interpreter中, 就像 Apache mod_perl's Apache::Registry, 编译perl 脚本,cached 到内存中。
在以上的基准测试结果中我们得到了以下的结论。
Apache 1.3和 2.0的表现非常相近。2.0没有什么优势。我们没有测试Apache 2.0的worker MPM。因为prefork MPM更有可能被用于Unix/Linux系统的应用。跟Apache比起来, LiteSpeed Web Server能快3-7倍当它处理静态内容的时候。当处理动态内容的是时候能快50-100%,包括CGI, FastCGI, PHP and Perl.方式。
我们早期的测试表明,Apache的性能下降非常大,当distributed configuration override (.htaccess) 被设置为enabled。然而LiteSpeed web server几乎不受影响。所以我们将能看到更大的差距在一个共享的主机环境中。
这全部的LiteSpeed web server的表现,包括Standard 和 Professional版本,比其他所有被测试的web server软件都好。
如果你真的想你的网站停止遭受各种各样性能表现上的问题和在你现有的硬件上表现出最好的web服务的产出。你应该认真的考虑切换到LiteSpeed.。它将省去你所有在优化你的web各部分的时候所有头疼的事情。因为我们已经为你做完了所有艰难的工作。
如果只有静态页面和图片的话,可以用Zeus或者TUX,效率比apche高很多,尤其是TUX因为是和内核心结合的有较高的效率我认为是静态内容server的最佳选择,但他的限制是必须使用linux2.4以上的内核。我们的freebsd系统可能无法使用。
LiteSpeed web server is an Apache interchangeable, full-featured high performance, secure HTTP server specifically engineered from the ground up with security and scalability in mind.
以后再对这个文档进行补充。翻译的不正确的地方欢迎指出,可以参看原文。
webserver/CGI的更多相关文章
- CGI原理解析系列之中的一个----CGI怎样获取WEBserver数据
//gcc get_post.c -o get_post.ums; #include <stdio.h> #include <stdlib.h> #include <un ...
- CGI, FastCGI, WSGI, uWSGI, uwsgi简述
CGI 通用网关接口(Common Gateway Interface/CGI)是一种重要的互联网技术,可以让一个客户端,从网页浏览器向执行在网络服务器上的程序请求数据.CGI描述了服务器和请求处理程 ...
- php CGI、Fastcgi、PHP-FPM的详细介绍与之间的关系
以下PHP CGI.Fastcgi.PHP-FPM的一些信息归纳和汇总----->详细介绍与之间的关系 一:CGI是干嘛的?CGI是为了保证web server传递过来的数据是标准格式的 web ...
- PHP安装模式cgi、fastcgi、php_mod比较
先了解一下普通cgi的工作流程: web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web se ...
- php的几种运行模式CLI、CGI、FastCGI、mod_php
1.CLI:就是命令行,例如可以在控制台或者是shell中键入命令: php -f index.php 然后获取输出 2.CGI:以下是不同的说法与理解 公共网关接口”(Common Gateway ...
- 在mac os下的Apache服务器的cgi中运行python
我是搬运工.. Running Python Programs on the Mac OS X Apache Web Server The Mac OS X operating system incl ...
- php在apache中一共有三种工作方式:CGI模式、FastCGI模式、Apache 模块DLL
php在apache中一共有三种工作方式:CGI模式.FastCGI .FastCGI是什么? FastCGI是语言无关的.可伸缩架构的CGI开放扩展,其主要行 为是将CGI解释器进程保持在内存中并因 ...
- busybox filesystem httpd php-5.5.31 sqlite3 webserver
/******************************************************************** * busybox filesystem httpd php ...
- Fast CGI 工作原理
http://www.cppblog.com/woaidongmao/archive/2011/06/21/149092.html 一.FastCGI是什么? FastCGI是语言无关的.可伸缩架构的 ...
随机推荐
- Android(java)学习笔记212:中文乱码的问题处理(qq登录案例)
1.我们在之前的笔记中LoginServlet.java中,我们Tomcat服务器回复给客户端的数据是英文的"Login Success","Login Failed&q ...
- openmpi+NFS+NIS搭建分布式计算集群
1. 配置防火墙 正确配置防火墙的过滤规则,否则会造成NFS文件系统的挂载失败,NIS账户认证的失败,mpirun远程任务实例投放的失败.一般情况下,计算集群是在内部局域网中使用,所以可 ...
- HTTP协议 流程图
- HTML5 文件域+FileReader 分段读取文件(四)
一.分段读取txt文本 HTML: <div class="container"> <div class="panel panel-default&qu ...
- Android开发--推送
需要的知识点:Notification.Service 第三方开源框架 : android-async-http-master 推送的来源:android项目中,有时会有这样一种需求:客户每隔一段时间 ...
- (九)打印机驱动设置—USB接口的设置
佳博打印机代理商淘宝店https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.Sqz8Pf 在此店购买的打印机 ...
- tomcat的webapp下的root文件夹的作用是什么
1.基本一样..只是表示不同的tomcat的http路径而已. root目录默认放的是tomcat自己的一个项目,如:http://localhost:8080/默认访问root项目 对于webapp ...
- sql uniqueidentifier转varchar
--- DECLARE @myid uniqueidentifierSET @myid = NEWID()SELECT CONVERT(char(255), @myid) AS 'char';GO-- ...
- ajax 操作全局监测,用户session失效
jQuery(function ($) { // 备份jquery的ajax方法 var _ajax = $.ajax; // 重写ajax方法,先判断登录在执行success函数 $.ajax = ...
- css样式积累
1.圆角: border-radius:16px 16px 16px 16px; 2透明度: filter: alpha(opacity=80); ...