Apache模块开发指南.doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《Apache模块开发指南.doc》由会员分享,可在线阅读,更多相关《Apache模块开发指南.doc(78页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.1 Apache Web服务器简史1.1.1 Apache 1Apache Web服务器诞生于1995年。它起源于早期的由NCSA编写的NCSA服务器,并在其基础上进行构建。第一个以Apache命名的服务器产品发布于1999年12月,版本为1.0.0。作为Web服务器,Apache随即取得成功。到1996年4月,Apache已经取代NCSA服务器,成为Internet上使用最广泛的Web服务器,至今依然如此。Apache并不是通常意义上的应用平台:原生API非常有限,同其他产品具有的高级别编程层次相比,Apache需要开发人员付出更多的努力来达到同样的效果。然而,在一些非常有用的功能模块中
2、最值得一提的是已经开发出来的十分优秀的mod_rewrite模块。Apache引起第一次比较大的反响的应用开发框架是Perl语言,由CGI和mod_perl支持。由于mod_perl第一次采用了真正有用而且容易使用的API,大量的编程书籍和开发人员都集中在Perl上。很快,Java Servlet及大量的脚本语言,包括如今的市场领头羊PHP等,都发布了各自的API。Apache 1服务器的最后一个主要版本为1.3,发布于1998年6月。尽管新的开发工作移植到Apache 2已经很长时间,但Apache 1.3 仍然处于维护模式,至今依然流行。1.1.2 Apache 2Apache的开发人员认
3、识到Apache 最初的架构具有局限性,比较粗糙,于是在2000年开始建立新的代码仓库(codebase)主分支,并在此代码仓库的基础上于2002年4月创建了Apache2.0的第一个发布版本。Apache 2包括以下优良特性:原生API得到很大幅度改进,使APR库成为单独的实体。这在很大程度上帮助开发人员克服了C语言编程的缺陷,特别是交叉编译平台和资源管理方面的缺陷。通过使用Apache 2,C程序员可以达到通常被认为是高层次语言和脚本语言才能达到的高效率。新的拓展架构带来了全新层次的应用程序开发,同时也为以前的模块和应用程序提供了更为简洁的实现方法。本书将会详细介绍如何利用这个新的拓展架构
4、。新的内核架构让Apache 2成为真正的跨平台服务器。操作系统层自身成为一个模块(MPM),使得该模块可以被各种操作系统装载。Apache 1是一个UNIX应用程序,移植到其他平台上会受到很多的限制,一些UNIX特性使得Apache 1在其他平台(如Windows和Netware)上性能较差,而Apache 2摆脱了这些特性的限制,使其成为一个真正的跨平台服务器。基于线程的MPM模块的引入也增强了UNIX上很多应用程序的可扩展性。Apache 2的缺点在于它的API不能向前兼容Apache 1,因此一些第三方的模块和应用程序需要缓慢地升级到Apache 2。作为一个稳定版本,Apache 2
5、.2于2005年12月发布,相比之前版本具有一些较大的改进。Apache 2.2保留并拓展了Apache 2.0的API,因此,为Apache 2.0所编写的模块和应用程序同样适用于Apache 2.2。Apache 2.2版本对可扩展性和应用程序架构等方面进行了显著改进。如果说Apache 2.0提供了功能强大的应用平台基础,那么Apache 2.2则在此基础上进行了添砖加瓦。1.2 Apache软件基金会Apache软件基金会(ASF)为一系列应用范围广泛的开源软件项目提供组织上、法律上和财政上的支持。Apache软件基金会建立了一整套框架来管理知识产权和财政捐献,同时,限制捐献者潜在的、
6、合法的资源泄漏。通过精诚合作的项目开发流程,Apache项目交付了企业级的、免费获取的软件产品,吸引大量的社区用户使用。注重实效的Apache许可证(Apache License)使得无论是商业用户还是个人用户都易于部署Apache的产品。Apache软件基金会的前身是Apache组织(Apache Group)。Apache软件基金会是一个非盈利的组织,基于成员制,以保证Apache项目在个人志愿者参与之外能够继续存在。如果个人承诺与开源软件开发项目合作,并不断地参与和贡献Apache软件基金会的项目,那么他(她)就有资格成为Apache软件基金会的成员。通过Apache基金会现有大部分成员
7、的赞同和任命,个人才能成为软件基金会的成员。因此,Apache软件基金会为它所直接服务的社区所掌控,成员都为社区内的项目进行协作。Apache软件基金会的成员按照基金会的规章制度,每隔一段时间选举一个董事会,管理基金会的组织事务,由董事会任命成员监管基金会的日常事务。社区可以公开获取Apache基金会运作的记录。1.2.1 功绩组织模式(Meritocracy)很多软件产品都是在一个开放源代码的许可证之下进行开发的,Apache Web服务器则与此不同。Apache不是由某个开发者发起的(而Linux内核、Perl语言和Python语言都是由某个人发起的),而是一个由各种各样的人所组成的团队发
8、起的,这些人具有相同的兴趣爱好,通过交换信息、补丁和各种建议认识彼此。当Apache开发团队不再延续NCSA版本,而是转向开发Apache自己的版本时,越来越多的人被这个项目所吸引,加入这个团队进行开发。最初,他们可能是发布一些小的补丁,给出一些开发建议,或者在邮件列表上回复一些问题,逐步贡献更多的力量,在开发中发挥着越来越重要的作用。当Apache开发团队觉得某个人已经获得足够的权限成为开发社区的一部分时,开发团队将授予这个人直接访问代码仓库的权限。这个方法不仅能够扩充团队力量,增强开发Apache的能力,而且能够使开发团队运作的效率更高。我们把这个方法称为功绩组织模式。这种模式使得开发团队
9、不断壮大,而且没有内部矛盾和纷争。在其他模式下,权利可能是稀缺和保留的资源,而在Apache开发团队中,开发团队的新成员被看作是希望帮助团队进行开发的志愿者,而不是想占据权位的投机者。同时,由于Apache团队从不缺乏希望加入的新成员,因此,它不会因为在一个充满竞争的环境中缺乏优秀人才而盲目地扩充团队,从而导致开发团队成员良莠不齐。相反地,它严格对待团队的每个成员,要求每个成员都具备有据可寻的贡献和积极向上的态度。Apache团队是一个虚拟社区,因此它是一个全球范围的社区,不受地域限制。1.2.2 角色Apache开发团队具有以下的一些角色。用户用户是指使用Apache软件的人。用户以缺陷报告
10、和功能建议的形式向Apache项目的开发人员提供反馈,从而对开发团队做出贡献。用户也可以参与Apache社区,通过邮件列表和用户支持论坛帮助其他用户。开发者开发者通过提交代码和文档的方式为项目做贡献。开发者比用户的工作要多,他们活跃在开发邮件列表上,积极参与讨论,提供补丁、文档、建议和批评。开发人员也被当作是贡献者。提交者提交人员是开发者,他被赋予了代码仓库的写权限,并且签署了贡献者许可证协议(Contributor License Agreement,CLA)。所有的提交者都有apache.org的邮件地址。提交者在处理补丁时不需要依靠其他人,可以独自做出短期的决定,并服从项目管理委员会(P
11、roject Management Committee,PMC)的监管。项目管理委员会成员项目管理委员会成员是由开发者或者提交者通过功绩选举产生的,作为其为项目进展所承担任务的酬劳。项目管理委员会成员具有代码仓库的写权限、apache.org的邮件地址、社区相关决定的投票权,以及建议把某个活跃用户提升为提交者的权利。项目管理委员会是总体上实施项目控制的实体。Apache软件基金会成员Apache软件基金会成员是根据其在基金会中的角色进展和演变,以及每个角色所取得的功绩,由Apache软件基金会的现有成员选择并任命的。Apache软件基金会成员负责管理基金会,如项目相关的核心事务、交叉项目活动等
12、。从法律上来说,Apache软件基金会成员是基金会的股东之一。基金会成员拥有选举董事会的权利、成为董事会候选人的权利、建议提升某个提交者成为基金会成员的权利,以及广泛参与基金会内部其他角色的权利。1.2.3 哲学理念尽管这不是官方的列表,但其中的信念已经被认为是Apache基金会的核心哲学理念。这些理念有时候被引用为“Apache方法”:协作化的软件开发商业友好的标准许可证永远保证高质量的软件成员之间的交往要互相尊重,诚实,以技术为主依据标准的忠实实现强制的安全特性1.3 Apache开发流程Apache的开发流程既可以是自上而下的,也可以是自下而上的。采用自上而下的设计方法时,可以增加一些很
13、棒的想法,如需要代码重写或者新的组件所带来的关键新特性、新功能,这些想法可能需要几个月甚至几年才能从概念变为成熟产品。而采用自下而上的设计方法时,可以增加一些小的补丁,用来修改一些软件Bug或者增加一些新的特性,这些小的补丁很容易融合到目前的软件版本中。模块式开发方法通常介于软件开发的宏观方法和微观方法之间。模块是一个自包含的插件,通常是开发者(大多数情况下是其他人)基于某种兴趣而实现的新特性。一个模块可能实现了Web服务器的核心功能,也可能实现了一个通用的服务,还可能实现了一个较小但是较为重要的功能,甚至只是一个单一目的的应用。如果某个模块实现了大家都比较感兴趣的功能,而且作者愿意公布,就可
14、以集成到Apache的核心发布版本中。但是,如果该模块需要额外的支持(如第三方的库),或者可能会涉及该模块的许可甚至是知识产权的因素,那么,该模块可能就不会被集成到Apache的核心发布版本中,而是通过它的开发者或者第三方独立地发布,就像支持Apache的公司或者Linux版本的发行商那么做。1.3.1 Apache代码仓库和其他的软件项目一样,Apache也维护着一个代码仓库。这个代码仓库以项目为单位,和Web服务器相关的是httpd项目(包括代码、文档和编译文件)和apr项目。1.3.1.1 Subversion所有的Apache代码都保存在代码仓库中,可以通过http:/svn.apac
15、he.org/进行访问。代码使用SVN进行管理,它是最近(2004年)开始使用的,之前我们使用的是和其功能类似、历史悠久的CVS系统。代码仓库的读取权限是公开的,但是写权限只有提交者才拥有。读权限允许任何人查看Apache开发过程中所走过的足迹,包括回顾任何单一或者累计的修改,针对这些修改所作的简要的解释(例如修改Bug、新的功能、内部改进等),以及修改的日期和参与修改的人员。1.3.1.2 分支:主线、开发版本和稳定版本代码仓库中包含一个主线和几个分支,其中的任何文件的默认版本都是主线。在Apache项目中,主线代表正在进行中的工作。从定义上可以看出,它是未经过测试的版本,一般都包括一些实验
16、性的代码。Apache当前的稳定分支是Apache httpd 2.2,可以在/branches/2.2.x/目录下找到。比较老的版本(如2.0和1.3)尽管已经不再是主要的开发方向,但是它们的分支还在维护中(尽管是精简地维护)。有时候也会为一些实验代码特别地创建一些分支,作为测试的基础。例如,当Apache2.2处于beta版测试时,为了支持异步I/O,需要对内核代码进行一些实质性的重写。这些修改后的代码对于主线来说过于实验化,因此,开发者决定创建一个新的开发分支来处理它们。这个新的分支随后逐渐地稳定下来并融入到主线中,并最终被包含在下一个稳定版本(2.4版)中。1.3.1.3 审查和通过A
17、pache的开发人员针对稳定版本和开发版本的代码采用不同的开发策略进行处理。稳定版本的代码总是遵从审阅并提交的方式(Review-Then-Commit,RTC),这就意味着任何将要加入到标记为稳定版本分支的代码,即使是最微不足道的补丁,也必须通过一个严格的审阅过程。开发版本的代码遵从提交并审阅的方式(Commit-Then-Review,CTR),这就意味着代码可能被某个提交者单方面地进行了增加、修改和删除,然后在恰当的时期由其他开发者进行审阅(当然,SVN使得对某个改变进行逆向操作变得非常容易)。不过,一些主要的变动需要在提交之前就进行审阅,或者使用单独的开发分支进行处理。1.3.1.4
18、增加新的功能(backport)新的代码首先加入主线。如果某个开发人员想让这个代码成为稳定分支的一部分(通常是修改了Bug或是做了一点改进),那么这个代码就将进入backporting阶段。该阶段使用一个叫做STATUS的状态文件,包含了backporting的当前情况列表,如为backport进行的投票情况等。为了保证backporting的质量,代码的任何变动必须从提交者那里得到至少三张支持票。一张支持票意味着投票人已经审阅了这个变动,并对此表示认可,因此,三张支持票就明确意味着这个变动确实不错。即使是最简单的Bug修改也要遵守这个规则,这就是说为了得到足够多提交者的同意,有时候一个不是很
19、重要的Bug修改也得需要很长时间。如果收到了三张支持票并且没有反对票,这个变动就可以加入到下一个稳定分支中了。可能审阅了这个变动的提交者对此并不满意,他将对此保留意见,甚至投反对票。投反对票的规则是必须附带一个说明,以及(或者)一个能够实现该变动目标的可选方案。被投了反对票的变动要么被放弃了,要么把其中的错误修正之后再次提交进行重新投票。反对票和保留意见通常会在开发者论坛中进行相关的讨论之后被进行处理。1.3.1.5 发布Apache有时会发布新的版本。当前稳定代码版本(在本书正在写作时为2.2.x版)的发布使得用户可以感受到Apache的最新进展,也修改了一些Bug。这些发布版本将会打上最佳
20、版本的标签并推荐给用户。通常由于开发者觉得已经有足够多的小变动积聚起来了,达到了新版本发布的要求,这样一个新的版本就发布了。不过有时候一个新的版本可能是因为某个安全问题引起开发者的注意而匆忙发布的。发布负责人通常由开发者志愿担任,负责管理发布流程并创建发布版本,其他的开发者将会全神贯注于开发在STATUS文件中已经核准的、但还没有解决的更新,并将其融入到稳定版本中。目前的策略是偶数版本的分支是稳定的,而奇数版本的分支打算供开发使用。因此2.0.x版本(2002年4月发布)和2.2.x版本都是稳定的,而2.1.x发布版供Apache2.2版本的alpha测试和beta测试使用。Apache2.1
21、版本经过接近10个月的alpha测试和3个月的beta测试之后才成为最终的2.2稳定版本。一个发布版需要在每一个支持的平台上经过编译、安装、运行的测试。这些步骤对于稳定的发布版本来说是必需的。对于开发版本,尽管不是那么严格,也是应当如此。为了保证发布版本满足这些要求,发布负责人首先通过一个合适的SVN分支为这个版本创建一个Build版本,然后把这个版本告知Apache的开发者和测试者。这就在其发布之前提供足够的时间,让更多的开发者和测试者对其在不同的硬件环境、操作系统和应用环境上进行安装和测试。如果在测试中发现了一个严重问题,那么这个Build版将不被发布。所有的发布版本都由发布管理人进行可靠
22、的PGP签名。很多Apache开发者的公钥,包括所有发布管理人的,都可以在http:/www.apache.org/dist/httpd/KEYS获得。1.3.2 开发者论坛Apache Web服务器最主要的开发者论坛就是devhttpd.apache.org邮件列表。所有和Apache开发相关的技术细节都在这里讨论。一个与此类似的开发者邮件列表devapr.apache.org是针对APR开发的。这些论坛都是100%对外开放的,所有的讨论都被归档在一些地方(本章结尾部分的参考地址)。另外一个比较流行的开发者论坛是互联网中继聊天(Internet Relay Chat,IRC)。关于Apach
23、e的开发者频道是上的#httpd-dev和#apr。这些讨论地点都是完全对外开放的。在http:/issues.apache.org/ 的Apache Bugzilla是一个可以搜索的数据库,包括Bug报告、提升要求和补丁,也包括目前的和历史的数据。这个数据库也是完全对外开放的。不过要注意的是,既然是一个完全开放的数据库,它会含有很多的虚假报告(有些由于不能被结束而显示为“再次开放”)和不能被验证真伪的报告。考虑到某些补丁可能对用户有用,但是这些补丁却没有被标准的Apache发布版包括进来,因此这个数据库也包含了一些故意保留下来的、标记为“补丁可获取”(PatchAvailable)的报告。包
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Apache 模块 开发 指南
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内