基于Apache源代码的Web应用服务器的体系结构分析 论文(3)

2019-03-22 12:04

沈阳工程学院毕业论文 第3章 Apache体系结构

第3章 Apache体系结构

本章从整体上介绍了Apache的三层体系结构,并着重介绍了核心功能层,分析了核心功能层中各个重要的组件及它们之间的相互依赖关系。另外本章还讲述了Apache的运行流程及主函数的实现细节。

Apache服务器是一个非常复杂的服务器,一方面,它是为处理Web应用而存在的,因此,它不需要实现所有与Web服务器相关的技术,比如HTTP协议、授权处理等;另一方面,它又是一个服务器,因此,它必须考虑到服务器设计的各种关键技术,比如如何承载高负载,如何方便地进行功能拓展等。因此对于Apache而言,如何设计它的体系结构成为一个头等的大事请。幸运的是,Apache采用了模块化的体系结构,它的大部分功能都被分割为相互独立的模块。这样,一方面,通过增加或删除模块就可以拓展和修改Apache提供的功能;另一方面,对于Apache功能的理解也变得非常容易。

3.1 Apache目录

在了解整个Apache体系结构之前,我们必须先了解Apache的源代码是如何组成的。Apache2.0版本的目录结构如图3-1所示。

support build test include docs srclib apr-util apr pcre os modules ssl proxy ··· Httpd-2.0.45 server mpm 图3-1 Apache2.0的源代码组织结构

- 5 -

沈阳工程学院毕业论文 第3章 Apache体系结构

整个Apache核心功能包括请求处理、协议处理等功能,实现文件全部包含在server目录中,server目录中又包含一个称之为mpm的目录。在2.0以上的版本中,Apache推出了多种进程的一种并发模型,包括线程池,预创建等,这些都被称之为多进程处理模块(MPM)。它们之间既互相独立,又能互相替换。这些模块统统保存在mpm目录中。每一种并发模型对应一个.c文件。

另外一个重要的目录就是modules,顾名思义,其中保存着Apache中的所有模块。每一个模块占有一个目录,比如AAA认证模块目录为aaa。代理模块名称为proxy。

include目录包含了Apache中必须的头文件。

srclib目录中包含了Apache开发和运行所需要的基础库。 os目录中包含了各个操作系统中所特有的内容。

docs目录中包含了Apache提供的文档

test目录中包含了很多APR库使用的测试函数。

3.2 Apache层次结构

整个Apache可以被划分为四个大的层次:可以只运行库层(APR)、Apache核心功能层(Apache CPRE)、Apache可选功能层(Apache Optional Module)及Apache第三方支持库。图3-2描述了Apache中的层次关系。

OpenSSLmod_SSLhttp_core共享内存LDAP5······Apache模块中使用的第三方支持库PerlPHPmod_rewritemod_phpmod_spelingmod_ladpmod_perl4······Apache可选功能层Apache核心核心模块http_protocolhttp_requestmod_MPMmod_coremod_httpmod_so3···Apache核心功能层Libapr库2文网件···络可移植运行库层或者操作系统适配层libldaplibldaplibpcre1操作系统(Operating System)IOIO平台功能层

图3-2 Apache的体系结构

- 6 -

沈阳工程学院毕业论文 第3章 Apache体系结构

3.2.1 操作系统支持层

Apache归根结底是建立在操作系统的普通的营运程序上的,因此,很多时候必须使用操作系统本身提供的底层功能。离开了操作系统,Apache就失去了存在的根基。

3.2.2 可移植运行库层

早期的Apache设计者并没有把跨平台作为Apache的设计目标之一,但是从Apache2.0开始,Apache就专门封装不同操作系统API的任务独立出来形成一个新的项目APR,全称为Apache可移植运行库。APR的任务是屏蔽底层的操作系统API细节,对于所有的操作系统,提供一个完全相同的函数接口。这样,Apache开发者就不必顾虑操作系统细节,而是只要开发商层功能即可。

3.2.3 核心功能层

对于Apache而言,其最核心的功能则位于第三层,我们称之为核心功能层。这层主要包括两大部分:Apache核心程序和Apache核心模块。

Apache的核心程序主要用于实现Apache作为HTTP服务器的基本功能,这些基本功能包括:

(1)启动和停止Apache

(2)处理配置文件(config.c) (3)接受和处理HTTP连接

(4)读取HTTP请求并对该请求进行处理 (5)处理HTTP协议

核心层另一个重要组成部分就是核心模块。Apache中大部分模块都是可选择的,这意味着对于Apache而言是可有可无的。这些模块的缺失至多影响Apache功能完整性,并不影响运行。但是有两个模块是必须的,即mod_core和mod_so。前者负责处理文件中大部分配置指令,并根据这些指令运行Apache,而后者则负责动态加载其余的模块,缺少了该模块,其余的模块就无法使用。这两个模块都必须静态编译。

3.2.4 可选功能层

可选功能层通常指Apache模块。如前所述,除了mod_core和mod_so模块外,其余的模块都属于可选模块,在必要的时候可以被mod_so模块夹在到Apache中,二在不需要的时候也可以从Apache中卸载。

- 7 -

沈阳工程学院毕业论文 第3章 Apache体系结构

3.3 Apache核心功能层

3.3.1 核心与可选模块的关系

Apache核心与Apache模块之间的关系是调用和被调用的关系,所有的模块都是直接与核心进行交互。

Apache核心模块和Apache可选模块的接口完全相同,并且它们队员爬出核心而言也是完全相同的。在处理过程中,核心并不会去关心谁是核心模块,谁是可选模块,它们都是一视同仁地被调用。核心模块和非核心模块的唯一区别就是加载的时间不同。核心模块通常必须静态加载,而非核心模块则既可以静态加载,也可以动态加载。因此核心模块是Apache中必不可少的一部分。

3.3.2 核心组件

对于Apache而言,Apache核心组件包括下面几大部分。 (1)配置文件组件(HTTP_CONFIG) (2)进程并发处理组件(MPM)

(3)连接处理组件(HTTP_CNNECTION)

(4)HTTP协议处理组件(HTTP_PROTOCOL) (5)HTTP请求处理组件(HTTP_REQUEST)

(6)HTTP核心组件(HTTP_CORE) (7)核心模块组件(MOD_CORE)

Apache核心组件之间的相互关系可以用图2-3进行描述。

MAIN(main.c)MPMHTTP_CONFIG(config.c)MOD_CORE(core.c)HTTP_CORE(http_core.c)HTTP_PROTOCOL(http_protocol.c)MOD_CORE(core.c)HTTPClientHTTP_CONNECTION(connection.c)HTTP_REQUEST(http_request.c)

图3-3 Apache各组件之间的交互关系

- 8 -

沈阳工程学院毕业论文 第3章 Apache体系结构

3.4 Apache运行流程

Apache的运行流程可以细分为三个大的阶段。 (1)Apache启动过程。

(2)接受客户端连接,并处理该连接。

(3)从连接中读取请求数据,处理客户端的第一次请求。

3.4.1 Apache启动过程

Apache的启动包括两个阶段:高权限启动阶段和低权限运行阶段,通常称之为两阶段启动方式。Apache总是以root用户身份启动运行,因此启动Apache时首先必须获得root权限。在启动的过程中,初始化工作包括以下几个方面。

由于Apache中绝大多是的内存都是基于内存池分配的,因此,在Apache启动的时候必须首先初始化内存池资源。另外,初始化的一个重要任务就是对配置文件惊醒读取和解析。在启动的工程中,配置文件会被读取两次。第一次称之为预读取,主要是从配置文件中获取第二次配置文件中需要的一些配置信息;基于第一次读取的结果,第二次才是真正的配置文件读取。

在启动的最后阶段,Apache将通过调用ap_mpm_run函数将控制权交给MPM模块,只有MPM模块执行失败或执行完毕的时候,执行权才会从MPM返回到主程序中。MPM是Apache服务器和操作系统之间的接口,它的目的只有一个,就是充分利用操作系统特性,对服务器的并发进行最大化的优化。

3.4.2 HTTP连接处理

在接收到客户端的HTTP连接之后,客户端的IP地址已经可以获取。通过该IP地址,便可以确定该IP地址所对应的虚拟主机族,因此,连接处理的第一件事情就是更新虚拟主机的相关信息。

对于连接处理,最主要的任务就是调用预先定义好的连接处理挂钩process_connection。任何模块模块如果要处理连接,都可以实现该挂钩。一旦某个模块是相爱挂钩,那么在连接处理的过程中他们将会被调用。

在连接处理过程中,通过调用ap_read_request函数进入请求读取过程,然后调用ap_process_request对该请求进行处理。

3.4.3 请求报文读取

一旦接收到客户端的连接,请求数据将被读取出来,然后HTTP_PROTCCOL模块将开始对该报文进行解析,请求的解析包括三部分:

(1)HTTP请求头 (2)HTTP请求域

- 9 -


基于Apache源代码的Web应用服务器的体系结构分析 论文(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:苏教版语文五年级上册单元要点总结及练习

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: