Apache 介绍

Apache 基金会

Apache基金会(Apache Software Foundation)简称ASF。是一个负责管理 Apache 项目的开源基金会。

例如:Apache HTTP Server、Apache Kafka、Apache Tomcat、Apache ZooKeeper等。

Apache 基金会官网:https://apache.org/


Apache HTTP Server

Apache HTTP Server(简称Apache),是世界上使用最广泛的Web服务器软件,起初是用来支持World Wide Web的增长。

Apache HTTP Server官网:https://httpd.apache.org/


Apache HTTP Server 起源:

Apache起源于1995年,是最早用于支持快速增长的World Wide Web的Web服务器之一。

Apache最初是基于NCSA HTTPd服务器的补丁和扩展,后来发展成为一个独立的项目。它的名称“Apache”源自“a patchy server”,意即由许多补丁组成的服务器,但后来这个名字也与美国原住民部落Apache联系在一起,象征自由和力量。


Apache HTTP Server 和 WWW 的关系:

Apache HTTP Server 和 WWW是相互促进的关系。

  • WWW的发展促进了Apache的诞生:WWW的发明和快速增长需要可靠的、易于使用的服务器软件来托管网站和网络服务。这种需求催生了Apache HTTP Server的开发,它是为了改进当时已存在的Web服务器技术而创建的。

  • Apache的普及推动了WWW的增长:Apache的出现为WWW的扩展提供了强大的支持。作为一个开源、免费且功能强大的Web服务器软件,Apache使得个人和组织更容易地在互联网上发布内容和提供服务。


Apache HTTP Server 和 Apache 基金会关系:

Apache HTTP Server的出现早于 ASF 基金会的成立,当 Apache HTTP Server 被创造出来后,为了更好地管理和支持这个项目以及其他相关开源项目,Apache 基金会随后成立。


Apache 和 HTTPD

Apache HTTP Server有些时候也简称为 httpd,目的是为了和Apache 软件基金会进行区分。

httpd 是 HTTP daemon 的缩写。daemon 是指在后台运行的服务或进程。因此,httpd可以翻译为为“HTTP服务程序”,它代表着运行在服务器上,负责处理HTTP请求的服务进程。


Apache 特点:

  • 开源免费:Apache 是开源软件,遵循 Apache 许可证,可以免费使用、修改和重分发。

  • 模块化设计:Apache是基于模块化设计的,通过加载不同的模块可以实现不同的功能。

  • 跨平台:支持在Unix、Windows、Linux、MacOS上运行


Apache 版本说明

Apache的版本由三部分组成:主版本号+次版本号+修订版本号

  • 主版本号:如果主版本号不同,通常涉及重大变更或重大功能升级

  • 次版本号:表示在主版本下的重要更新。奇数表示开发和测试版本。如果是偶数表明是稳定版本。

  • 修订版本:通常是针对特定错误修复、安全修补或小的功能改进的更新。

Apache版本变更

  • 1.x版本:于1995年发布1.0版本

  • 2.x版本:于2000年发布2.x版本,此时的架构发生了重大的更新

例如:Apache/2.4.58 表示当前版本是稳定版。



Apache 工作模式:

Apache通过启用不同的MPM模块,就可以切换不同的工作模式。

Aapache为了解决各种场景下的并发处理需求,引入了一个叫作“多处理模块(Multi-Processing Module,简称 MPM)”的概念,不同的模块定义了 Apache 如何处理并发请求

Prefork MPM 模块

Apache 启动时创建一个父进程。这个父进程主要负责管理子进程,不直接处理客户端请求。父进程根据对应的配置创建一定数量的子进程,没有请求时这些子进程是空闲的,当一个请求到达时,父进程将其分配给一个空闲的子进程。

特点: 因为每个子进程独立运行,它们之间没有共享状态,所以非常稳定,但是内存占用可能会更多。

Worker MPM 模块

Apache 启动时创建一个父进程。这个父进程负责监控和管理子进程,但不直接处理客户端请求。会根据配置创建对应的子进程数量,每个子进程可以创建并管理多个线程。每个线程可以独立处理一个客户端请求。

特点: 适合处理高并发请求,且资源消耗低。

Event MPM 模块

Event MPM 是对 Worker MPM 的一个优化,特别是在处理持久连接方面。一个持久连接占用一个线程,直到连接关闭。


Event MPM 模块工作原理:

通过引入监听线程,通过监听线程来负责接收新的连接请求,并将这些请求分配给子进程中的工作线程。

  • 接收新请求:所谓的新请求就是客户端首次尝试建立与服务器的连接,新请求到来时,首先被监听线程接收,由监听线程将该请求分配给一个工作线程进行实际的处理。

  • 管理现有连接:会监控那些处于持久连接状态(如 HTTP Keep-Alive)的连接,一般工作线程完成请求后,将这个工作线程转入空闲状态,随时准备处理新的分配给它的请求。

MPM WinNT 模块

专门給Windows设计的一个模块,使用单个固定的父进程,该父进程创建多个子线程来处理请求。


常见的web服务器软件:

  • Apache:在动态内容和复杂配置环境中表现良好,且社区支持完善。

  • ISS:Microsoft开发的一种Web服务器软件,专为Windows服务器环境设计。

  • NGINX:高性能的Web服务器和反向代理服务器,适用于处理大量并发连接环境。


C10K 问题:

C10k指的是"concurrent 10,000"(同时1万个连接),即一万个客户端同时向web服务器发起请求。

这个问题在1999年由丹·基斯勒(Dan Kegel)提出,在当时这被视为一个重要的技术挑战,因为当时的服务器软件和操作系统通常难以应对这种高并发水平。

提出这个问题的目的是指出当时许多网络服务器(包括但不限于Apache)在面对成千上万的并发客户端连接时的性能局限性。

虽然Apache是当时最受欢迎的Web服务器之一,也受到了C10K问题的影响,但这个问题并非特指Apache,而是涉及了所有类型的网络服务器软件。随后,Apache和其他服务器软件(例如Nginx)都采取了各种措施来优化它们的架构和处理机制,以更好地处理大量的并发连接。

因为Apache最初是基于进程/线程的模型设计的。在处理客户端请求时,它会为每个请求创建一个新的进程或线程。虽然这种模型在低到中等的负载下运行得很好,但在高并发场景下,会有一些限制。


Apache 解决C10K问题的方案:

切换工作模式

针对这个问题,APache进行了多次迭代和改进引入了几种多路复用和事件驱动的模型解决高并发导致的性能问题。可以使用下面两种工作模式来用于高并发场景。

  • 事件(Event)MPM:是为了提高处理大量并发连接的能力而设计的。它使用更少的线程来管理连接,并且在必要时才创建新的线程,从而减少资源消耗并提高性能。

  • 工作(Worker)MPM:这是一种多线程和多进程的混合模型,旨在提供比传统的prefork MPM更好的并发处理能力。


服务器硬件优化

提升硬件性能也是应对高并发连接,如使用固态硬盘提高数据读写速度,增加CPU核心提高服务器的并发处理能力,减少等待时间,加大内存容量,提升网络带宽,高带宽可以确保数据快速传输。

posted on 2024-01-15 15:42  背对背依靠  阅读(51)  评论(0编辑  收藏  举报