LAMP系列文章之二:源码级别研究Apache?

要展开这个话题,我想首先需要解决好为什么需要这样做的问题。源码级别看待 Apache ,首先需要解决态度问题哈。

追溯 Apache 的历史,从 Tin Berners-Lee 1991 年编写的 CERN HTTP 服务器算起,已经有 20 多年历史了。当下, Apache 可以说是最流行 Web 服务器。 facebook google ,百度等大型互联网公司所使用的 web server 属于定制过的 Apache ,广义上也算是 Apache 吧,这样看的话,互联网流量的绝大部分都是由 Apache 服务器提供。 PHP 方面,虽然现有后起之秀 nginx ,网上也到处都是 Apache nginx 评测文章,论调基本一致: nginx Apache 更优。这里不做比较,只要你承认, Apache 的的确确是一款优秀的 web server 就足以了,至于这一点,我想就算是 nginx 的拥趸,也不会质疑这一点。 Apache 良好的模块化架构设计已经成为经典的服务器架构。

然而,看看计算机书架上的 Apache 的书,几乎都是讲如何使用 Apache 的,很少有对 Apache 进行源码级别研究的,可是,功利一点的角度来看,很多大公司在进行招聘的时候,又希望招到那些熟悉 Apache 模块的,最好还有 Apache 模块开发经验的人。从实践到理论来看,我想,源码级别研究 Apache ,对于相关从业人员来说,是很有必要的。单单从软件开发的角度来看, Apache 由于自身优秀的架构,任何深入研究它的人,都可以吸取丰富的营养。

源码级别研究 Apache ,我想到的一个很重要的原因,那就是业务的变迁所致。随着业务的变化,我们在开发应用的时候,经常要在现有 Apache 模块的基础上开发新的模块,或是修改已有模块。举个简单的例子,现在很热门的 SNS 游戏,很多时候客户端需要向服务端发送请求,我的经验表明,很多请求仅仅需要服务器端返回几个字节的结果。但是,我们都明白, Apache 采用 HTTP 协议,不管请求还是返回结果,基本都有三部分组成:请求行(返回状态),头部,数据体。就算你仅仅返回一个字节的处理结果,其也要返回一个庞大的数据流。对于以前的网页型的应用来说,那点头部信息对于网页中的 CSS 样式,图片等信息来说可以忽略不计。但是,在 SNS 这一类型的应用中就需要仔细斟酌了。很受欢迎的 SNS 游戏一般都面临着极大的服务器压力,我们在架设 SNS 服务器的时候,根据我们的应用是修改定制 Apache 模块,将极大的减小应用对于服务器的压力。

你可能感兴趣的:(apache)