2007年12月13日

测试你的主机的速度

attachments/200712/0702427018.jpg
Host-tracker是一家提供全方位网络测速的网站,分别从全球四十多个服务器访问你的网站,全方位的了解你的网站被访问情况,测速后分别给出访问结果、速度等数据,比较全面。
下面是http://www.Licess.Cn的部分测试结果:

attachments/200712/4887046518.jpg

该网站还提供了网站测试挂件,可在你的网站上实时进行检测。方法很简单,点击ADD,然后会出现代码,复制粘贴到你的网站就行了。
呵呵我没有挂,因为挂的东西太多了影响访问速度。有兴趣的朋友可以试一下。

  • » 阅读全文...
  • 2007年12月12日

    《程序员2007增刊——实战Web2.0》精彩预览之“指导篇”

    理解REST软件架构

        /骆古道

    一种思维方式影响了软件行业的发展。REST软件架构是当今世界上最成功的互联网的超媒体分布式系统。它让人们真正理解我们的网络协议HTTP本来面貌。它正在成为网络服务的主流技术,同时也正在改变互联网的网络软件开发的全新思维方式。AJAX技术和Rails框架把REST软件架构思想真正地在实际中很好表现出来。今天微软也已经应用REST并且提出把我们现有的网络变成为一个语义网,这种网络将会使得搜索更加智能化。

    RESTHTTP协议

    REST软件架构是由Roy Thomas Fielding博士在2000年首次提出的。他为我们描绘了开发基于互联网的网络软件的蓝图。REST软件架构是一个抽象的概念,是一种为了实现这一互联网的超媒体分布式系统的行动指南。利用任何的技术都可以实现这种理念。而实现这一软件架构最著名的就是HTTP协议。通常我们把REST也写作为REST/HTTP,在实际中往往把REST理解为基于HTTPREST软件架构,或者更进一步把RESTHTTP看作为等同的概念。

    今天,HTTP是互联网上应用最广泛的计算机协议。HTTP不是一个简单的运载数据的协议,而是一个具有丰富内涵的网络软件的协议。它不仅仅能够对于互联网资源进行唯一定位,而且还能告诉我们对于该资源进行怎样运作。这也是REST软件架构当中最重要的两个理念。而REST软件架构理念是真正理解HTTP协议而形成的。有了REST软件架构理念出现,才使得软件业避免了对HTTP协议的片面理解。只有正确的理论指导,才能避免在软件开发的实际工作过程中少走弯路。

    RESTURI(资源定位)

    REST软件架构之所以是一个超媒体系统,是因为它可以把网络上所有资源进行唯一的定位,不管你的文件是图片、文件Word还是视频文件,也不管你的文件是txt文件格式、xml文件格式还是其它文本文件格式。它利用支持HTTPTCP/IP协议来确定互联网上的资源。

    RESTCRUD原则

    REST软件架构遵循了CRUD原则,该原则告诉我们对于资源(包括网络资源)只需要四种行为:创建(Create)、获取(Read)、更新(Update)和销毁(DELETE)就可以完成对其操作和处理了。其实世界万物都是遵循这一规律的:生、变、见、灭。所以计算机世界也不例外。这个原则是源自于我们对于数据库表的数据操作:insert(生)、select(见)、update(变)和delete(灭),所以有时候CRUD也写作为RUDI,其中的I就是insert。这四个操作是一种原子操作,即一种无法再分的操作,通过它们可以构造复杂的操作过程,正如数学上四则运算是数字的最基本的运算一样。

    REST与网络服务

    尽管在Java语言世界中网络服务目前是以SOAP技术为主,但是REST将是网络服务的另一选择,并且是真正意义上的网络服务。基于REST思想的网络服务,不久的将来也会成为是网络服务的主流技术。REST不仅仅把HTTP作为自己的数据运输协议,而且也作为直接进行数据处理的工具。而当前的网络服务技术都需要使用其它手段来完成数据处理工作,它们完全独立于HTTP协议来进行的,这样增加了大量的复杂软件架构设计工作。REST的思想充分利用了现有的HTTP技术的网络能力。在德国电视台上曾经出现过一个这样的五十万欧元智力题:如何实现网络服务才能充分利用现有的HTTP协议?该问题给出了四个答案:去问微软;WSDL2.0/SOAP1.2WS-Transfer;根本没有。这个问题告诉我们HTTP并不是一个简单的数据传来传去的协议,而是一个聪明的会表现自己的协议,这也许是REST = Representational State Transfer的真正含义。

    实际上目前很多大公司已经采用了REST技术作为网络服务,如GoogleAmazon等。在Java语言中重要的两个以SOAP技术开始的网络服务框架XFireAxis也把REST作为自己的另一种选择。它们的新的项目分别是Apache CXF Axis2 Java语言也制定关于REST网络服务规范:JAX-RS: Java API for RESTful Web Services (JSR 311)。相信还会出现更多与REST相关的激动人心的信息。

    RESTAJAX技术

    尽管AJAX技术的出现才不到两年时间,但是AJAX技术遵循了REST的一些重要原则。AJAX技术充分利用了HTTP来获取网络资源并且实现了HTTP没有的对于异步数据进行传输的功能。AJAX技术还使得软件更好地实现分布性功能,在一个企业内只要一个人下载了AJAX引擎,其它企业内部的人员,就可以共享该资源了。AJAX技术遵守REST准则的应用程序中简单和可伸缩的架构,凡是采用AJAX技术的页面简洁而又丰富,一个页面表现了丰富多彩的形态。

    AJAX技术还使用了一种不同于XML格式的JSON文件格式,这个意义在哪里呢?在REST软件架构下我们不能对于XML文件进行序列化处理,这样程序员必须要使用自己的XML绑定框架。而以序列化的JavaScript对象为基础的JSON已经获得了广泛认可,它被认为能以远比XML更好的方式来序列化和传输简单数据结构,而且它更简洁。这对REST是一个极大贡献和补充。

    当前的网络应用软件还违背了REST的“无状态服务器”约束。REST服务器只知道自己的状态。REST不关心客户端的状态,客户端的状态自己来管理,这是AJAX技术的应用之地。通过AJAX技术,可以发挥有状态网络客户机的优势。而REST的服务器关心的是从所有网络客户端发送到服务器操作的顺序。这样使得互联网这样一个巨大的网络得到有序的管理。

    RESTRails框架

    Ruby on Rails框架(简称Rails或者Rails框架)是一个基于Ruby语言的越来越流行的网络应用软件开发框架。它提供了关于REST最好的支持,也是当今应用REST最成功的一个软件开发框架。Rails框架(从版本1.2.x起)成为了第一个引入REST作为核心思想的主流网络软件开发框架。在Rails框架的充分利用了REST软件架构之后,人们更加坚信REST的重要性和必要性。Rails利用REST软件架构思想对网络服务也提供了一流的支持。从最直观的角度看待REST,它是网络服务最理想的手段,但是Rails框架把REST带到了网络应用软件开发框架。这是一次飞跃,让REST的思想从网络服务的应用提升到了网络应用软件开发。利用REST思想的simply_restful插件已经成为了Rails框架的核心内容。

    REST安全性

    我们把现有基于SOAP的网络服务和基于REST/HTTP网络服务作个比喻,前者是一种传统的寄信方式,而后者是现代网络的电子邮件方式。要是寄信和电子邮件都有病毒存在的话,传统的寄信被送到对方就很危险,而电子邮件是开发的,电子邮件供应商比如Google为我们检查了电子邮件是否有病毒。这里并不是说明SOAP网络服务消息容易包含病毒,而是说明HTTP是无法处理SOAP信息包究竟好不好,需要额外的软件工具解决这一问题,包括防火墙也用不上和管不了。

    REST/HTTP网络服务的信息包可以被防火墙理解和控制。你可以按照操作和链接进行过滤信息包,如你可以规定从外部来的只能读取(GET操作)自己服务器的资源。这样对于系统管理员而言使得软件管理更为简单。REST的安全性还可以利用传输安全协议SSL/TLS、基本和摘要式认证(Basic und Digest Authentication)。除了这些REST自身的安全性功能外,还可以利用像基于信息的Web Services SecurityJSR 155)作为REST不错的补充。

    作者简介:骆古道,网名Cnruby,八十年代初毕业于西北工业大学数理力学系,1988年公派留学德国,从事组合最优化理论研究,从九十年代初期起一直致力于计算机领域软件开发、设计和管理等方面工作,个人博客为道喜技术日记”。

  • » 阅读全文...
  • 为什么每个程序员都要学C语言的五个理由

    1. C语言不是面向对象语言。因为这一点,任何学习C语言的人必须学会用函数思考问题。当你真正的去学习一门面向对象语言时,就会有C语言的函数学习基础去对比。这会使学习面向对象编程更容易理解和更有乐趣。
    2. 用C编程就像进行智力体操。你要顾及到每一件事情,而这在很多其他语言中他会为你处理。你要管理指针,内存分配,和内存回收。你要明白如何处理串,还有动态数据。在其他语言中,所有这些对你来说是隐藏的。你不知道他们如何运行,更不用说改变他们的运行方式了。你得到了使用的便利,失却了对程序的控制和速度。很多情况下,这是笔值得的买卖。其他的情况下就不是这样了。
    3. 不同情况下你会使用不同的编程语言。某些情况下要求使用Lisp,其他的要Java,还有别的要C++。但是C是你坚实的基础。你可能不会使用它做一些项目,但是它会帮助提高你的能力,熟练的用其他语言编程。
    4. 除了汇编语言之外,C代码生成的程序比其他任何语言生成的程序来得更小和运行更快。那么为什么不学汇编语言呢?汇编是一门学了很有用的语言,但是它没有C那样的可移植性,并且其他流行的语言比如JAVA的语法是基于C的,而不是汇编。你仍然应该学汇编,但它并不会证明它会像学C那样有用。
    5. 如果你想要写一个视频游戏引擎或操作系统,你会需要C。你不能使用C#, Java, 或 Basic来完成这些编程任务。
  • » 阅读全文...
  • 2007年11月28日

    简单七步最大限度优化你的博客文章

      博客的写作需要一定的搜索引擎优化(SEO)的技巧才可能得到良好的回报,这里有很简单的七个博客写作技巧和方法,虽然看起来很简单,但是这些技巧可以最大限度的使你的努力获得更多的收获和成果,目标只有一个:增加你的读者并且吸引他们阅读你的文章。

      1、删除代词,并将其修改为描述性的名词

      这个方法是为了帮助搜索引擎能更准确的索引和确定你文章的内容,名词有利于说明你的文章,并减少歧义,在大多数情况下,代词都很多余,并限制你的文章达到其应有的最高潜力。

      2、为你的文章选择准确描述性标题

      这对于你来说可能不是个新闻,因为这是优化策略中非常重要的一部分,不过,根据我的经验,一个理想的标的长度通常是4-7个英文单词,标题应该转却的反映文章内容,并且尝试使用最重要的关键词短语。

      3、在第一段中强化你的标题关键词

      你已经选择了一个非常不错的标题栏,那么,你应该不能就此为止吧,在你正文第第一段中,你应该补充你标题的主要内容:

      1)一个精确的短语来匹配标题中的内容。

      2)增加一些额外的关键词。

      4、文章内容至少150个单词

      短小的内容会遭到搜索引擎惩罚,但是关键内容过于稀释的话可能伤害更大,因此,我推荐150-250的高关键词密度,并减少代名词。对于参考文章和HOW-TO类型的文章,我一般推荐500个以上的单词,这样就很容易超过关键词优化的界限,以避免遭到搜索引擎的人为惩罚,通常最好关键词分布在三段之中。也许很多人对于这点有不同的意见,但是文章的长度的确非常重要,尝试不同的技巧,你会最终尝到甜头。

      5、使用超级链接文字推广你的文章

      即使只有一个链接到你的文章,那也是很好的,关键是要添加链接,同样重要的是,链接中的锚文本要和文章标题的关键字匹配。

      通过一些社会化的工具,例如DIGG等可以将你的文章推送到社会化网络中,以便获得更多人的推荐。另外,还要鼓励他人在自己的博客中对其进行评论,每一个博客都在寻找写作的主题,所以一篇好的文章往往会得到充分认可。

      6、鼓励相互交流

      你写的每一篇文章,对于你来说都是一个机会,你可以借机和你的读者进行交流,有很多方法可以鼓励留言评论,但重要的是,你要重视你的读者们的看法,问他们有什么想法,或者对他们提出一些有挑战性的问题。

      7、让用户能轻松订阅

      可能你并不知道什么是RSS Feed,但是你依旧可以建立一个RSS Feed的订阅基础,一个Feed订户很可能会在未来经常访问你的博客,如果你想换个花样,你可以考虑每月通过电子邮件的方式发送一篇通讯稿,无论使用哪种形式,你都应该鼓励大家订阅,无论是在文章的底部还是在顶部,用粗体字呼吁大家订阅你的博客。

      好了,以上就是7个文章写作技巧,可以让你的博客文章最大限度的在搜索引擎上表现良好。

  • » 阅读全文...
  • 2007年11月23日

    济南IT人才现状

     据前程无忧(http://www.51job.com)数据显示:本周济南的有效职位数为1857个。济南才市有效的职位数经过前段时间的震荡下调后,现在每周的有效职位数在1800个上下平稳浮动。本周以NEC软件(济南)有限公司、中兴软件技术(济南)有限公司、浪潮等企业为代表的软件技术公司抛出了众多的软件工程师需求名额。其中NEC软件(济南)有限公司对软件工程师的需求达到50人之多。

     
      某企业人力资源经理表示,他们公司的招聘广告挂到网上一个多月了,几乎没有招到令老总满意的员工,没办法只好到IT培训学校去“抢”人了。对此现象,某业内人士一语中的:主要是软件人才太紧缺了。在政府大力发展软件产业和数字产业的背景下,吸引了NEC、中兴软件等大型IT企业落户济南建立研发中心,随着入驻济南、入驻齐鲁软件科技园的IT企业日益增多,导致了软件人才的极度缺乏。
     
      目前济南也在增加对IT人才培养的投入,无论是政府、高校还是民间,大家都对IT业产生了巨大的兴趣。齐鲁软件科技园建立,各种培训学校开设,各大高校也纷纷开设软件开发及相关专业。但是人们还是可以清晰地看到,虽然开设了这些课程,但是教学质量以及培养出的人才还是与国际水平有一定差距.软件工程师是一个对专业要求非常严格的职业,一般要求精通VC++、C/C++、JAVA、.NET其中的一门语言,并熟练使用数据库,具备UNIX、Linux等相关知识。记者从相关学校了解到,学校不是不想开设更多的IT课程,并培养出国际化的软件开发人才,但是能教这门课的教师实在是太难找了。某IT企业的负责人表示,他们现在的软件工程师多数来自各大培训机构。
     
      当人们想方设法为济南IT培养软件工程师的时候,很多软件工程师看到的是外面更精彩的世界,他们纷纷奔向中关村、美国硅谷这样的IT中心。人才外流也成为导致济南软件开发人才缺乏的原因之一。某企业负责人表示:济南培养出来的很多人才都豪气壮志地出去了,有的获得了成功,有的碰壁后又回来了。他们碰壁不是因为他们不优秀而是因为他们没有很好的定位,济南的环境已经为他们提供了非常好的平台供他们发展。其实企业是非常喜欢这些在外碰壁后归来的求职者的,因为他们在了解到外面世界的真正情况后,会更加珍惜现在拥有的工作,更加踏实认真地完成现有的工作。
     
      日前,NEC软件(济南)有限公司、中兴软件技术(济南)有限公司参加了前程无忧主办的“实习2008”全国大学生实习总动员活动,走进高校寻求适合的软件工程师实习生,通过一天的选拔,企业方表示找到了一些非常不错的学生,遗憾的是其中挺多优秀的学生现在处在大三或者研一阶段,不能通过一段时间的实习后留在公司工作,所以企业只能放弃他们。这充分说明了近期IT企业需求的是:能够马上进入公司工作的人才,并且这个需求量是巨大的。
  • » 阅读全文...
  • 2007年11月21日

    免费申请微软@w.cn和@9.cn邮箱

    免费申请@w.cn,@9.cn邮箱,5G免费空间,找资源网测试4位的帐号可以申请。

    绑定到您的QQ上,用这Email邮箱替换QQ号码,倍儿有面子!全世界最短的邮箱!
      
    @w.cn的申请地址:
    https://domains.live.com/members/signup.aspx?domain=w.cn
     
    @9.cn的申请地址:
    https://domains.live.com/members/signup.aspx?domain=9.cn 
      
    9.cn w.cn是由 Windows Live Mail 授权的提供电子邮件服务的组织。 
      
    有朋友说不知道登陆地址,mail.msn.com/mail.live.com/mail.hotmail.com都可以登陆,需要输入邮箱完整地址。

  • » 阅读全文...
  • 2007年11月20日

    网站编程ASP+PHP+JSP+JS技术手册文章

    网站编程ASP+PHP+JSP+JS    内容很全面
    点击下面网址:
    http://www.licess.cn/web/

  • » 阅读全文...
  • 2007年11月18日

    pipebytes—在线即时文件收发服务

          pipebytes   (http://www.pipebytes.com/)  提供一项在线的即时的文件收发服务,也就是说文件发送者和接收者须同时在线,所以它不提供临时存储服务,然后才能即时传送文件,而且这种传送和一般IM工具一样是即时的,发送方需要给接收方一个指定的下载地址及提取号,当两方都准备好后才能即时传输文件。它不象BitTorrent 和其他P2P传送协议,文件不会在互联网上分享而是直接送给接收者。 在速度方面会快于其他基于web的文件传送服务,当然你也可以在文件传送同时观看pipebytes给你挑选的YouTube视频,这样就免去了等待的烦恼。

  • » 阅读全文...
  • 2007年11月16日

    免费空间集合

    1. "我需要至少10m空间,FTP上传,无广告,可*的服务器" 

    http://www.brinkster.com/
    http://www.liquid2k.com/
    http://www.demented.org/ (has FTP)
    http://www.cfm-resources.com/ (不可*)

    2. "我需要 PHP 和足够的空间。 ( 也许 15-25 M) 我可以接受一些广告的 (旗帜或弹出/底部, 但是不能两者都有!),空间如果没广告 , 我会更喜欢。 我需要尽可能多的流量。MySQL 是可选择的。"

    http://www.host.sk/ (无广告)
    http://www.php50.com/ (页顶广告)
    http://www.fateback.com/ (旗帜)
    http://www.t35.com/ (页顶广告)
    http://www.clawz.com/ (旗帜)
    http://www.tripod.co.uk/ (页顶广告,包括MySQL)

    3. "我需要一个可以接受3~5M大文件而且提供很多流量的空间,不介意广告"

    http://www.come2store.com/ (文件储存)
    http://briefcase.yahoo.com/
    http://www.hut.ru/
    http://www.gizba.com/ http://www.riefcase.yahoo.com/ (文件储存)
    http://www.imagestation.com/

    4. "我不很在意容量、广告或流量,适量的空间, 至少400M月流量,我只要求稳定、不会很快关闭的空间"

    http://www.geocities.com/
    http://www.angelfire.com/
    http://www.tripod.com/
    http://www.worldzone.net/ http://www.topcities.com/
    http://www.brinkster.com/ (无广告)

    5. "我的站点主要由HTML文件、图片和一些小文件组成,我不需要什么权限,只要求有个大空间(超过100M并希望有FTP)"

    http://www.9cy.com/ (banner OR pop-up)
    http://www.hostultra.com/ (pop-up)
    http://www.topcities.com/ (banner OR pop-up 最大单个文件900 KB)
    http://www.hostingextreme.com/ (pop-under)

    6. 我需要PHP和至少15~25M的空间,可以允许有广告(没有更好),可能多的流量和MYSQL数据库可选。

    http://www.spaceports.com/ (banner frame or pop-up)
    http://www.tripod.co.uk/ (pop-up)
    http://www.host.sk/ {暂停注册}
    http://www.amzweb.net/ (要求75个帖子)
    http://www.dk3.com/ (不可*)
    http://www.hut.ru/ http://www.deeplist.com/

    7. "我需要CGI支持,我不介意广告,只要他们不是太令人讨厌,5~10M的空间,最好有FTP"

    http://www.netfirms.com/
    http://www.spaceports.com/
    http://free.prohosting.com/ (no sendmail)

    8. "我需要ASP空间,FTP”

    http://www.brinkster.com/ (no ads, no FTP)
    http://www.aspfreeserver.com/
    http://www.7host.com/ http://www.websamba.com/ (不可*)

    9. "我需要一个至少提供15M空间和1G流量, PHP和CGI的空间"

    http://www.amzweb.net/signup.php
    http://www.spaceports.com/
    http://www.cfm-resources.com/ (CFML, ASP)
    http://www.digitalrice.com/ ( 只有 5 M空间)
    http://www.portland.co.uk/ ( 只有 100 M流量)

    10. "我需要一个可以绑定域名的空间"

    http://www.breezeland.com/ http://www.netfirms.com/
    http://www.portland.co.uk/
    http://www.amzweb.net/
    http://webhosting.bootbox.net/

    11. "我真的需要空间,合适的流量和 20-30 M空间。 最好有 FTP,没有也可以。"

    http://www.brinkster.com/ (no ads, no FTP)
    http://www.aspfreeserver.com/
    http://www.cfm-resources.com/
    http://www.websamba.com/ (not very reliable)

    12. "我需要 20-30M的PHP 和 MySQL空间 。需要 FTP。最小的广告,但是我不介意弹出或banner广告。 我也会至少需要 1G流量。 我准备做一个论坛 , 像phpBB 或 IBForums ,因此最好空间允许放论坛。"

    http://www.host.sk/ (no ads, not reliable)
    http://www.spaceports.com/
    http://www.xug.net/
    http://www.tripod.co.uk/

    13. "我寻找一个空间可提供至少15M空间和1G流量,最好有PHP/MySQL和CGI。"

    http://www.spaceports.com/
    http://www.amzweb.net/ (必须在论坛发帖)

    14. "我需要至少20M的空间,1G的流量,最好FTP,PHP或CGI 有的话最好。 "

    http://www.netfirms.com/
    http://www.fateback.com/
    http://www.hostingextreme.com/
    http://www.portland.co.uk/ (月流量不够大)
    http://www.amzweb.net/ (必须在论坛发帖)

    15. “最适合做论坛的空间”

    http://www.tripod.lycos.co.uk --->php/myswl
    http://free.prohosting.com/ --->CGI-BIN 但有广告条

    16. "我需要超过50M的PHP/FTP空间,无文件大小限制"

    http://host.sk - 有时速度不快
    http://php50.com/ - 有广告条,无FTP

    17. "适合做游戏站点的空间"

    http://www.emunetwork.com
    http://www.gaming-depot.com/ http://www.tf2hq.com/

    18. "我只需要一个稳定的FTP普通空间"

    http://www.profitfree.com/ http://swiftdesk.com/

    19. “我需要图片空间”

    http://yoursighost.com/
    http://stormpages.com/
    http://rbftp.org/
    http://megspace.com/
    http://internations.net/
    http://graffiti.net/
    http://anycities.com/
    http://tok2.com/
    http://www.evolvahost.co.uk/

    20. “我需要音乐空间,可以放MP3”

    http://www.anycities.com/
    http://www.indietrax.com/
    http://www.flytrap.it/

    21. “做下载的空间”

    http://members.xoom.it/

    22."还有我的空间"
  • » 阅读全文...
  • 2007年11月14日

    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 等,并且每一级都可以使用多台机器来均衡负载,伸缩性很好。

    实例讲解
    下面以daviesliu.net和rainbud.net域下面的几个站点为例来介绍一下此方案的具体做法。daviesliu.net域下有几个用 mod_python实现的blog站点,几个php的站点,一个mod_python的小程序,以后可能还会架设几个PHP和Django的站点。而服务器非常弱,CPU为Celeron 500,内存为PC 100 384M,因此比较关注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_host 127.0.0.1
     httpd_accel_port 81                   #apache的端口
     httpd_accel_single_host on
     httpd_accel_with_proxy on          #启用缓存
     httpd_accel_uses_host_header on #启用虚拟主机支持

    此方向代理支持该主机上的所有域名。

    Apache的配置
    配置/etc/conf.d/apache2,让其加载mod_python、mod_xslt、mod_php模块:

    APACHE2_OPTS="-D PYTHON -D XSLT -D PHP5"

    所有网站的根目录:

    <Directory "/var/www">
       AllowOverride All     #允许.htaccess覆盖
        Order allow,deny
        Allow from all
    </Directory>

    基于域名的虚拟主机:

    <VirtualHost *:81>
    ServerName blog.daviesliu.net
    DocumentRoot /var/www/daviesliu.net/blog
    </VirtualHost>

    这里明显没有lighttpd的evhost配置方便。

    blog.daviesliu.net下的.htaccess设置(便于开发,不用重启Apache):

    SetHandler mod_python
    PythonHandler blogxp.publisher
    PythonDebug On
    PythonAutoReload On

    <FilesMatch ".">
        SetHandler None        #静态文件直接由Apache处理
    </FilesMatch>

    <IfModule mod_xslt.c>
        AddType text/xsl .xsl  #防止对xsl文件进行转化
        AddOutputFilterByType mod_xslt text/xml
        XSLTCache off
        XSLTProcess on
    </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 -c 10 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置于最前面。

  • » 阅读全文...