设为首页 收藏本站
查看: 642|回复: 0

[经验分享] 六年磨一剑——专访《Apache源代码全景分析第1卷:体系结构与核心模块》作者张中庆

[复制链接]

尚未签到

发表于 2015-8-5 11:16:35 | 显示全部楼层 |阅读模式
针对张中庆老师的新书《Apache源代码全景分析第1卷:体系结构与核心模块》的出版,博文视点编辑对张中庆进行了邮件专访,现将博文编辑与张中庆的访谈对话整理成文,以飨读者。
博文编辑:张老师,您好!国内真正称得上“源码剖析”的图书非常少,分析Apache底层运作原理的著作更是凤毛麟角。得知您打算写这套书后,编辑部的同事对您的技术背景产生了浓厚的兴趣,可否请您简单回顾一下您的技术经历。
张中庆:我的工作经历非常简单,2000年从西安交大计算机系本科毕业后,就职于一家国营企业,负责银行相关软件的开发,在此期间接触了Unix下的服务器开发,并且一直进行着相关的开发工作。三年后辞职回到西交攻读硕士学位,毕业后在腾讯参与MMOG游戏服务器端的开发,目前任职于51.com
博文编辑:您太谦虚了,写一套剖析源码的书除了要具备深厚的技术功底、丰富的实践经验外,更需要超出常人的毅力,您写第1卷花了6年的时间,是什么原因促使您决心写这本书的呢?
张中庆:阅读Apache的最初目的是希望能够了解大规模服务器的并发体系结构,提取一个可重用的网络框架。最初时只是希望了解Apache的并发体系结构,即现在的MPM模块,但是随着分析的深入,Apache的更多内容也纳入了分析的范围。分析的时候经常会出现以前看过的内容过了一段时间后又忘记了,于是只好重新开始,为了避免这种情况,就养成了文档记录的习惯。这些文档后来就发表到了CSDN的博客上。随着文档的增加,也就有了出版的打算,前前后后花了6年的时间。源码的分析和写作都是利用业余时间完成的,每天基本上只有两个多小时的时间,另外就是Apache实在太庞大,要理清它非常不容易,必须翻来覆去地看,前后连起来理解才行。
之所以能够坚持下来,最要感谢的是家人和朋友的鼓励,以及一些素不相识的对本书期待的读者的支持,每次想放弃的时候,是他们让我找到继续前行的力量。
博文编辑:您的这套书一共3卷,《Apache源代码全景分析第1卷:体系结构与核心模块》只是其中第1卷,可否请您介绍一下这3卷书在内容上是如何分配的,以及它们的内在联系。
张中庆:第1卷主要从整体架构上讨论Apache,重点讨论Apache的模块化体系结构和与模块相关的内容,包括配置、挂钩、过滤器等;第2卷主要讨论Apache请求处理的细节,包括URL重写、内容协商、认证授权、缓存,以及虚拟主机等内容;第3卷则主要介绍Apache的可移植运行库APRAPRApache的底层跨平台支撑库,这一卷重点分析APR的实现原理和APR的使用。
博文编辑:Apache的特点是具有清晰的模块化架构,您在第1卷中是如何分析Apache最核心的内容,来帮助读者理解其实现细节的呢?
张中庆:每一个Apache的模块内部包含了配置指令、请求挂钩、过滤器三大类,卷1的绝大多数内容正是围绕这三方面展开的。对于大多数读者而言,它们接触最多的就是Apache的指令,因此卷1首先讨论了Apache中指令的相关概念及Apache中对配置文件和指令的处理细节。通过对内容的熟悉,引导用户进入到对Apache的分析中来。
模块是Apache的基础,在介绍完配置文件之后,紧接着第5章花了较大的篇幅来介绍Apache中的模块相关的概念,包括:Apache的模块数据结构;Apache是如何加载和组织模块的;模块指令表;模块中的挂钩;模块间的通信方式等。
在详细介绍完Apache的模块相关概念之后,第7章详细介绍了第一个模块——MPM模块,该模块负责Apache的并发处理。第7章中还介绍了三种重要的并发方式——PreforkWorkerWinNT MPM
MPM负责并发框架处理,同时还负责创建套接字、侦听套接字。对于MPM中的每一个进程或线程,它们接受客户端连接,然后从连接中读取请求数据。连接处理和请求读取的详细细节在第8章网络连接中讨论。
从网络中读取请求数据,由Apache中的CORE_IN过滤器完成;向网络中写入响应数据,由CORE过滤器完成。对于读取到的数据,它们交由核心进行处理之前,需要经过一系列的过滤器处理。因此在进一步深入请求处理的细节之前,必须了解过滤器的概念和实现原理。因此在卷1的最后三章,我们详细讨论了过滤器的细节。
博文编辑:近年来陆续有一些轻量级的Web服务器软件涌现,比如由德国人主持开发的Lighttpd和由俄罗斯人编写的Nginx,您觉得这些“后生晚辈”会不会对Apache构成威胁。
张中庆:LighttpdNginx都属于轻量级的Web服务器,它们的出现自然会抢占一些属于Apache的市场份额。不过LighttpdNginxApache并不是相互排斥,相互对立的。LighttpdNginx的长处在于处理静态页面,它们的处理速度可以达到Apache2~3倍,极端情况下能达到10倍。因此通常情况下,Apache用来作为后台服务器,处理PHPCGI等,生成动态内容;Nginx用来作为前端服务器,从而充分利用它占用资源少的优势来处理静态页面的大量请求,而Lighttpd则通常用于图片服务器。
可以相信,随着Lighttpd和Nginx的逐渐成熟和完善,它们也会成为主流的Web服务器,对Apache构成一定的威胁。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-94393-1-1.html 上篇帖子: android 中对apache httpclient及httpurlconnection的选择 下篇帖子: ubuntu 下修改apache的默认端口与根目录
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表