浅析 Apache 工做原理


title: 浅析 Apache 工做原理
date: 2017-04-01 23:32:29
categories:
tags: ["Apache","web服务器"]
---
Apache是目前世界上使用最为普遍的一种Web Server,它以跨平台、高效和稳定而闻名。那么Apache是怎样工做的呢?php

1、LAMP架构

提及apache,那就不得不了解一下LAMP架构,LAMP架构是较为流行的一套建站架构,因其通用、跨平台、高性能、低价格的优点,不管是性能、质量仍是价格都是企业搭建网站的首选平台。git

这里写图片描述

  • Linux 操做系统底层github

  • Apache 服务器,属于次级服务器,沟通Linux和phpweb

  • PHP 服务端脚本语言,使用php_module模块与Apache服务器关联,sql

  • Mysql 和 Web Aplication (其余web服务),使用php_extensions 模块相关联apache

2、Apache 生命周期

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

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

3、Apache 处理请求的过程

  • 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 的两种工做模式

1.什么是MPM

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

2.Prefork

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

    StartServices    服务器启动默认启动的子进程;
    
    MinSpareServers    最小空闲进程数量;
    
    MaxSpareServers    最大空闲进程数量;
    
    MaxClients     最高的并发量;
    
    ServerLimit    最大限制的并发量;
    
    MaxRequestsPerChild      每一个子进程默认最多处理多少个请求。当达到设定值时,这个进程就会被kill掉,从新生成一个新的进程(避免内存泄露等安全性问题,运行过久怕出一些bug,可能出现假死,或者占用太多内存等);

    3.worker

  • Workder是线程化、多进程的MPM,每一个进程能够生成多个线程,每一个线程处理一个请求;不须要启用太多的子进程,每一个进程可以拥有的线程数量是固定的。服务器会根据负载状况增长或减小进程数量。一个单独的控制进程(父进程)负责子进程的创建。每一个子进程可以创建ThreadsPerChild数量的服务线程和一个监听线程,该监听线程监听接入请求并将其传递给服务线程处理和应答。

  • 配置参数:

    StartServers 服务器启动时创建的子进程数,默认值是"3"。
    
    MaxClients  容许同时服务的最大接入请求数量(最大线程数量)。任何超过MaxClients限制的请求都将进入等候队列,默认值是"400"。
    
    MinSpareThreads 最小空闲线程数,默认值是"75"。
    
    MaxSpareThreads  设置最大空闲线程数。默认值是"250"。
    
    ThreadsPerChild  每一个子进程创建的常驻的执行线程数。默认值是25
    
    MaxRequestsPerChild  设置每一个子进程在其生存期内容许处理的最大请求数量。

4.Prefork和Worker的比较

  1. prefork方式速度要稍高于worker,然而它须要的cpu和memory资源也稍多于woker。

  2. prefork的无线程设计在某些状况下将比worker更有优点:它可使用那些没有处理好线程安全的第三方模块,而且对于那些线程调试困难的平台而言,它也更容易调试一些。

  3. 在一个高流量的HTTP服务器上,Worker MPM是个比较好的选择,由于Worker MPM的内存使用比Prefork MPM要低得多。

博客始发于本人我的博客:浅析apache工做原理

相关文章
相关标签/搜索