没有那个老板是傻逼,如果你的老板在某年某月的某一天给你一个任务,他只给你三万块(包括买服务器和软件的钱),让你做一个数据量将会有百万到千万条的网站。你会想到用什么技术来实现?是PHP吗?是ASP吗?是JSP或是其他的什么的?你是否考虑使用Perl来实现?
三万是什么样的情况?
你想过吗?
三万块可以购买一台PIII1.0G以上的服务器,配备有100MB的网卡,有1.0G以上的内存,一些SCSI硬盘,还可以买一套Linux,安装一套MySQL,还有一年的服务器托管费。你的网站还要承受每天200万次以上的访问量。如此的配置你还有什么想法?
没考虑过用Perl
那么好,我可以给你一种解决方案,是众多方案之一的方案,他可以帮你顺利过关,请继续看下去。
考虑过CGI
你绝对是准备被抄掉,不论怎样,绝对不能使用CGI技术。为什么?为什么?CGI技术是一种全球通用性最好,最慢的方案。如果你的网站使用了CGI,你将为此耗费大量CPU和内存,并且无法承受如此大的访问量。
再详细分析一下
当一个人访问的时候:他会产生一个CGI进程、他会产生一个数据库连接进程、他会产生一个HTTPD进程、他会用CGI向数据库发送一条检索百万分之一数据的请求,你的CPU将被使用99%。这种情况下,你还怎么用CGI?难道你不知道每秒的并法流是有限的吗?
如果我非的用Perl呢?
做事情的方法不仅仅只有一种。如果你的老板真给你那么苛刻的要求,真的让你用这么破的机器来做。那我推荐你用绝佳的组合Linux+MySQL+Apache2+Perl5.8+ModPerl2
ModPerl和CGI有何区别?
顾名思义,ModPerl就是将Perl解析器同Apache一同编译的持续连接技术。ModPerl将Perl解析器或程序本身编译并且驻留内存,有程序发来请求将不产生任何CGI进程。
ModPerl::Register
我们一定要使用ModPerl::Register(一种运行方式),APACHE会将你的Perl程序,你的Perl模块一同编译到内存中,当你再次请求,你是从内存中获得,而不是从磁盘上产生任何进程。当我们连接数据库的时候,ModPerl只向MySQL提出一条数据库连接请求,不会产生多个数据库进程。
当然,你的CGI程序将可能无法运行在ModPerl::Register模式下,它的内存控制更严格。
ModPerl2+Apache2的性能如何?
在那样破的机器上的ModPerl2理想值至少可以实现每天1700万次的访问。
注:理想值表示,根据个人编程的能力以及不同语言的内部结构不同所提出的最好情况。
你常使用MySQL吗?
当你的表结构不合理,会大大降低数据库的性能。
当你在表中where id = ‘’的时候如果id没有被设置成为INDEX你将无法获得0.02秒得到结果,只使用10%CPU的性能。
你是不是还只会用like来搜索?请使用MySQL4.1.1以上的FULL TEXT全文检索技术来实现搜索,如果你一百万条数据,你用like搜索你将至少(是至少)使用30秒来完成一条检索语句,如果你使用FULL TEXT技术将只使用0.05秒以内,当然请注意,你的CPU会不会FULL
你有没有启用MySQL的查询缓存?MySQL4.1.1以上可以将需要查询的内容进行缓存,你怎么还不用呢?
能做在一个表里的数据就不要做在多一个表中,在MYSQL中转换表的速度要比查询大表慢的多。
请注意什么不能做缓存,MySQL的查询缓存不能缓存函数条件查询。Where date > (now()-1)这些使用函数的查询条件结果将不被缓存。
你的网站后台什么样?
如果你的网站每天有几千,几万条的数据要更新,你的后台还通过页面操作,那肯定要慢。不仅仅操作人员慢,他将拖累服务器。请你使用应用软件开发专用后台程序吧。
如何让Perl程序提高效率?
在Apache启动的时候就将需要的模块驻留在内存中
在程序中尽量少打开表
MYSQL中多用INDEX多用FULL TEXT
我象上面这么做行吗?
我跟你保证,我测试过,每天200万个请求绝对没任何问题。
以上环境的安装设置方法
注意事项
多看英文Document
Perl还有那些方法是做中型网站
FastCGI技术:FastCGI技术也实现了高性能,低资源使用
SpeedyCGI技术:一种CGI改良技术,虽然效果差,但无需修改程序
Apache::ASP:使用Perl语言解析ASP的技术
HTML::Mason:一套专为大型网站设计的引擎,包括脚本语言及管理方法。顺便提一下著名的www.amazon.com就是使用的这个技术
你应该可以让BOSS更省钱
同样的性能,你不应该提倡让BOSS使用高额资金的技术。这是你应该做的,你的BOSS可能会更欣赏你,兴许会把节省的钱分一部分给你。
Perl的现在与未来
曾经2001年的时候就有人说Perl不行了。我1999年用到今天遇到过很多所谓的各种高手,各种专家。可以肯定的说,他们的认为都是放屁。自今我未发现,任何一种技术超过Perl。当然Perl现在也未超过他们,仅仅是大家相同而已。
Perl的未来大家如果关心可以去www.perl.org看关于Perl6技术,这是一种令人兴奋的技术。
最后一句,如果以上方法不能让你在三万块钱的设备上提供百万条数据,百万次访问。你来砍我。
Hoowa.sun
www.perlchina.org
www.ilcatperl.org