Apache基金会
Apache 软件基金会(Apache Software Foundation),简写为ASF。是一个负责管理 Apache 项目的开源基金会。
例如:Apache HTTP Server、Apache HTTP Server、Apache HTTP Server、Apache Kafka、Apache Tomcat以及Apache ZooKeeper都是Apache基金会中的开源项目。
Apache基金会官网:https://apache.org/
Apache HTTP Server
Apache HTTP Server(简称Apache),它的出现早于ASF基金会的成立,当 Apache HTTP Server 被创造出来后,为了更好地管理和支持这个项目以及其他相关开源项目,Apache 轑件基金会随后成立。
Apache是世界上最流行的网页服务器软件之一,apache具有以下特点:
- 开源免费:Apache 是开源软件,遵循 Apache 许可证,可以免费使用、修改和重分发。
- 模块化设计:Apache是基于模块化设计的,通过加载不同的模块可以实现不同的功能。
- 跨平台:支持在Unix、Windows、Linux、MacOS上运行
网页服务器和WWW、HTTP的关系:
- WWW:是一个广泛的概念,由遍布全球的众多网页服务器共同构成。WWW的目标就是通过超链接技术(HTML)使得资源可以相互关联和访问
- HTTP:设计用于客户端和WWW之间的数据交互,定义了请求和响应格式。
- 网页服务器:是WWW的一个具体实现,存储相关的HTML文档和资源。
Apache 工作模式:
Apache一个很大的特点就是模块化设计。不同功能可以通过模块(Modules)来实现,这些模块可以根据需要加载或卸载。
Aapache为了解决各种场景下的并发处理需求,引入了一个叫作“多处理模块(Multi-Processing Module,简称 MPM)”的概念,不同的模块定义了 Apache 如何处理并发请求
Prefork MPM模块:
Apache 启动时创建一个父进程。这个父进程主要负责管理子进程,不直接处理客户端请求。父进程根据对应的配置创建一定数量的子进程,没有请求时这些子进程是空闲的,当一个请求到达时,父进程将其分配给一个空闲的子进程。
特点:因为每个子进程独立运行,它们之间没有共享状态,所以非常稳定,但是内存占用可能会更多。
Worker MPM模块:
Apache 启动时创建一个父进程。这个父进程负责监控和管理子进程,但不直接处理客户端请求。会根据配置创建对应的子进程数量,每个子进程可以创建并管理多个线程。每个线程可以独立处理一个客户端请求。
特点:适合处理高并发请求,且资源消耗低。
Event MPM模块:
Event MPM 是对 Worker MPM 的一个优化,特别是在处理持久连接方面。一个持久连接占用一个线程,直到连接关闭。
优化方法:
引入监听线程,通过监听线程来负责接收新的连接请求,并将这些请求分配给子进程中的工作线程。
- 接收新请求:所谓的新请求就是客户端首次尝试建立与服务器的连接,新请求到来时,首先被监听线程接收,由监听线程将该请求分配给一个工作线程进行实际的处理。
- 管理现有连接:会监控那些处于持久连接状态(如 HTTP Keep-Alive)的连接,一般工作线程完成请求后,将这个工作线程转入空闲状态,随时准备处理新的分配给它的请求。
MPM WinNT:
专门給Windows设计的一个模块,使用单个固定的父进程,该父进程创建多个子线程来处理请求。
Apache的C10k问题
C10k"代表 "concurrent 10,000"(同时1万个连接)
原因:
- Apache是基于进程/线程的工作模式:如Prefork MPM模式,每个请求都会占用一个进程。即使是使用 Worker MPM模式,在处理大量并发连接时,线程的创建和上下文切换仍然会导致性能问题。
- 资源限制问题:在高并发场景下,Apache 可能会受到操作系统对进程和线程数量的限制,随着并发数的增加,导致系统资源的急剧增加,从而可能导致系统崩溃。
- 连接处理效率不高:在处理短链接或者持久连接时,因为apache的架构问题,会导致不必要的资源占用,因为即使连接处于空闲状态,也会占用一个进程或线程。
解决Apache的C10k问题:
1、提供高性能的硬件和网络资源,防止因为资源消耗的问题导致服务器崩溃。
2、使用Event MPM工作模式,这种模型比传统的 Prefork 或 Worker MPM 更适合处理高并发连接。
3、优化Apache的相关配置
4、使用负载均衡技术