爱悠闲 > 辛星网站架构师笔记第四篇

辛星网站架构师笔记第四篇

分类: 网站构架  |  标签: 辛星,构架师,web服务器,apache,lighttpd  |  作者: xinguimeng 相关  |  发布日期 : 2014-09-28  |  热度 : 929°

       本节我们了解一下web服务器,要说到web服务器,恐怕还不能不提一下大名鼎鼎的Apache,这个神一样的服务器仍然占据着至少一半的市场。Apache原来用于小型或者是实验性的Internet网络,后来逐步扩展到各种系统中去,对linux的支持近乎完美。Apache可以支持SSL技术,支持多态虚拟主机。而且它是以进程为基础的结构,而进程比线程使用更多的系统资源,因此不适用于多处理器环境。

   如果网站的访问量很大,那么每天的日志文件也会很大,这时候可以使用Apache自带的rotetelogs来对日志文件进行切割,切割为较小的文件,对数据分析来说还是一样的效果。后面我会写自己的教程给大家演示的,这里就不废话了。

   下面重点说说Apache的几个比较重要的模块把。第一个就是压缩模块,Gzip是一种非常流行的压缩算法,而且应用十分广泛,尤其是在linux平台上,当一个纯文本用Gzip压缩的时候,可以减少百分之七十以上的文件大小。我们可以将Apache发布的网页内容通过Gzip压缩后再传输给用户浏览器,这样可以降低网络传输的字节数,最明显的好处就是加快网页加载的速度。只要服务器支持,一般建议开启Gzip压缩。在Apache上利用Gzip压缩算法进行压缩的模块有两种:mod_gzip和mod_deflate,要使用Gzip压缩,首先应该确定服务器是否开启了对那个组件的支持。我们可以通过看HTTP头来判断客户端浏览器是否接受gzip压缩,也就是看HTTP头中的Accept-Encoding这个信息,那么现在的主流浏览器都是支持gzip压缩的。而MIME类型是可以根据实际情况自行添加吧,对于pdf、图片、音乐等文件,本身已经高度压缩了,所以重复压缩的效果并不大,反而可能会因为增加了机器的负载而降低了性能。那么mod_gzip和mod_deflate有什么区别呢?区别就是mod_deflate压缩速度快,但是mod_gizp的压缩比要高。我们还可以定义mod_deflate的压缩级别,这个数值从1到9,一般来说数字越小,压缩速度越快,压缩质量相应也会低一些。

     第二个就是简单的防DDOS攻击的模块,一般来说,mod_dosevasive是Apache的第三方可选模块,可以应对某些基于HTTP的拒绝服务的攻击,也就是通常所说的DDOS攻击。该模块从Apache1.3版本出现,它不能完全而彻底的防止大规模的DDOS攻击,但是对于一个一般的中小型网站来说,它还是有一定的效果的。它的原理也很简单,就是如果某一个时间段内某个IP访问的次数过快,那么就直接返回一个403错误。

     第三个就是mod_limitipconn模块,它的主要目的是防止用户的多线程下载,这样很容易吃光服务器的资源,特别是对一些小网站来说,许多线程同时发送请求,会对服务器造成较大影响。我们可以通过限制下载使用的线程数,也就是限制同一个IP的并发连接数。

     然后我们认识一下lighttpd吧,它是一款德国人领导的开源软件,根本目的是提供一个专门针对高性能网站的、安全、快速、兼容性好并且灵活的web服务环境。它的内开销相当的低、CPU占用率低,性能卓越,而且模块丰富,是众多开源的轻量级web服务器中较为优秀的而一款。而且单纯的看功能,它也支持FastCGI、CGI、auth、输出压缩、URL重写、alias等功能,在很多功能上lighttpd与Apache有的一拼。

    下面我们来分析一下lighttpd把,单纯从性能上来说,首先考虑单进程与多进程的关系,多进程服务器比如Apache在发送一个请求的时候会唤醒所有睡眠的进程,但是最终服务的只有一个,在进程数目较多、请求频繁的时候这会造成很大的困扰,使系统不停地忙于切换进程。而lighttpd则使用单进程来响应请求,以libevent,poll()作为event  handler,如果不使用大文件支持,而且是单纯的静态文件,性能是超越Apache的。

     Apache的主要缺点就是在密集并发的状态下,进程需要不断的切换,而且占用的内存相对较高,可能会使得系统的资源枯竭,而Lighttpd采用了Multiplex技术,代码经过优化之后,体积很小,资源占用率低很多,反应速度也相当的快。

    如果是用Apache的重写技术,把繁重的cgi/fastcgi任务交给Lighttpd来完成,那么就会充分利用两者的优点,服务器的负载也就会下降一个数量级,反应速度也会提高一个甚至是几个数量级。

    作为辛星笔记部分就写到这里吧,之后我会出一个关于服务器方面的教程的,期待您的关注奥。