Apache工作原理

Apache工作原理

文章目录

  • Apache工作原理
    • 前言
    • 1. LAMP架构
    • 2. Apache的生命周期
    • 3. Apache处理请求的过程
    • 4. Apache的两种工作模式
      • 4.1 什么是MPM
      • 4.2 prefork
      • 4.3 worker
      • 4.4 prefork和worker的比较

前言

  • Apache是目前世界上使用最为广泛的一种Web Server,它以跨平台、高效和稳定而闻名。那么Apache是怎样工作的呢?

1. LAMP架构

  • 说起apache,那就不得不了解一下LAMP架构,LAMP架构是较为流行的一套建站架构,因其通用、跨平台、高性能、低价格的优势,无论是性能、质量还是价格都是企业搭建网站的首选平台。

Apache工作原理_第1张图片

  • Linux 操作系统底层
  • Apache 服务器,属于次级服务器,沟通Linux和php
  • PHP 服务端脚本语言,使用php_module模块与Apache服务器关联,
  • Mysql 和 Web Aplication (其他web服务),使用php_extensions 模块相关联

2. Apache的生命周期

Apache工作原理_第2张图片

  • 启动阶段:Apache解析配置文件(如http.conf以及Include指令设定的配置文件等),模块加载(例如mod_php.so,mod_perl.so等)和系统资源初始化(例如日志文件、共享内存段等)工作。在这个阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(X系统)或超级管理员administrator(Windows系统)完成启动。

  • 运行阶段:在这个阶段,Apache为了获得系统资源最大的使用权限,将以特权用户root(X系统)或超级管理员administrator(Windows系统)完成启动。分11个阶段处理用户的请求。

3. Apache处理请求的过程

Apache工作原理_第3张图片

  • URI Translation阶段:将请求的URL映射到本地文件系统,mod_alias模块就是在这个阶段工作
  • Header Parsing阶段:解析header头部,mod_setenvif在这个阶段工作
  • Access Control阶段:按照配置文件设定的策略对用户进行认证,并设定用户名区域,模块可以在这阶段实现认证方法。
  • Authorization阶段:根据配置文件检查是否允许认证过的用户执行请求的操作,模块可以在这阶段实现用户权限管理的方法
  • MIME Type Checking阶段 :根据请求资源的MIME类型的相关规则,将文件交由相应的处理模块。
  • Fix Up 阶段:模块在内容生成器之前,运行必要的处理流程
  • Response阶段 :生成响应报文。
  • Logging阶段 :在响应客户端后记录事务
  • CleanUp阶段 :清除请求后遗留的环境,如文件、目录的处理或者Socket的关闭等。

4. Apache的两种工作模式

4.1 什么是MPM

  • MPM(Multi-Processing Modules,多路处理模块)是Apache的核心组件之一,Apache通过MPM来使用操作系统的资源,对进程和线程池进行管理。Apache为了能够获得更好的运行性能,针对不同的平台 (Unix/Linux、Window)提供了不同的MPM,用户可以根据实际情况进行选择,其中最常使用的MPM有 prefork和worker两种。

4.2 prefork

  • 工作原理:Prefork是非线程、预生成进程型MPM,会预先启动一些子进程,每个子进程一个时间只能处理一个请求,并且会根据并发请求数量动态生成更多子进程
  • 配置参数:
StartServices    服务器启动默认启动的子进程;

MinSpareServers    最小空闲进程数量;

MaxSpareServers    最大空闲进程数量;

MaxClients     最高的并发量;

ServerLimit    最大限制的并发量;

MaxRequestsPerChild      每个子进程默认最多处理多少个请求。当达到设定值时,这个进程就会被kill掉,重新生成一个新的进程(避免内存泄露等安全性问题,运行太久怕出一些bug,可能出现假死,或者占用太多内存等);

4.3 worker

  • Workder是线程化、多进程的MPM,每个进程可以生成多个线程,每个线程处理一个请求;不需要启用太多的子进程,每个进程能够拥有的线程数量是固定的。服务器会根据负载情况增加或减少进程数量。一个单独的控制进程(父进程)负责子进程的建立。每个子进程能够建立ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。
  • 配置参数:
StartServers 服务器启动时建立的子进程数,默认值是"3"。

MaxClients  允许同时服务的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列,默认值是"400"。

MinSpareThreads 最小空闲线程数,默认值是"75"。

MaxSpareThreads  设置最大空闲线程数。默认值是"250"。

ThreadsPerChild  每个子进程建立的常驻的执行线程数。默认值是25

MaxRequestsPerChild  设置每个子进程在其生存期内允许处理的最大请求数量。

4.4 prefork和worker的比较

  • prefork方式速度要稍高于worker,然而它需要的cpu和memory资源也稍多于woker。
  • prefork的无线程设计在某些情况下将比worker更有优势:它可以使用那些没有处理好线程安全的第三方模块,并且对于那些线程调试困难的平台而言,它也更容易调试一些。
  • 在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,因为Worker MPM的内存使用比Prefork MPM要低得多。

你可能感兴趣的:(Apache,面试干货)