Apache Server
VS
Nginx
Julio 2018
Contenido
- TL; DR
- Contexto y trayectoria
- Arquitectura
- Rendimiento
- Contenido dinámico
- Configuración
- Modularidad
- Soporte
TL; DR to long; don’t read
Apache Server Nginx
Usos
Cliente-servidor mejor
API Gateway mejor
Microservicios mejor
Contenido
estático igual igual
dinámico procesado internamente procesado por terceros
Configuración
Distribuida mejor
Centralizada mejor
Publicación de contenidos mejor
Funcionalidad de proxy server mejor
Desarrollo de nuevos módulos mejor
Módulos en el listado oficial 122 143
Load Balancer mejor
Caching mejor
terminación SSL mejor
Soporte
Comunidad OpenSource mejor
Empresarial mejor
“Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.”
—Chris Lea.
“Apache is like Microsoft Word, it has a million
options but you only need six. Nginx does
those six things, and it does five of them 50
times faster than Apache.”
—Chris Lea.
Senior engineer at @NodeSource
Contexto y trayectoria
Evolución del
tráfico y volumen
en Internet
- Más usuarios
- Mayor de tráfico
- Request más pesadas
- Response time
más exigente
1991 1993 1995 1999 2002 2005 2014
2002 2004 2011 2015 2018
NSCA
httpd
Apache
Group
Versión
1
Apache
Software
Foundation
Versión
2
70% market
share
Release
2.4
Versión
inicial
Open
source
Versión
1
Dinamic
modules
Release
1.14
Contexto y trayectoria
Contexto y trayectoria
1991
- Rob MacCool desarrolla NSCA-httpd
1993
- Nace Apache Group usando NSCA-httpd “a patchy server”
1995
- Versión 1.0
1998
- Release 1.3
1999
- Nace Apache Software Foundation (Brian Behlendorf)
2002
- Versión 2.0
2005
- Mayor cuota de mercado 70%
2014
- Release 2.4
2002
- Igor Sysoev (Rambler.ru) desarrolla nginx para resolver el problema
C10K de Apache Server
2004
- El código de Nginx pasa a ser open source
2011
- Fundación de NGINX, Inc
- Versión 1
2015
- Se añaden la opción dynamic modules
2018
- Release 1.14
El problema C10K se refiere a la incapacidad de un
servidor para escalar más allá de 10.000 conexiones o
clientes debido al agotamiento de recursos.
Las arquitecturas thread-based asignan
aproximadamente 1 MB por subproceso, esto agota la
memoria del servidor sumado al excesivo cambio de
contexto de la CPU para atender a todos los
subprocesos
Arquitectura
Thread-based
Se crea un proceso para atender cada conexión
Event-based
Un proceso gestiona múltiples conexiones
procesándolas según los eventos que se
generan
Arquitectura
Evolución de Apache Server para mejorar
la escalabilidad
- Prefork
Arrancar previamente threads a espera de
nuevas conexiones
- MPM multi-processing module
Varios threads comparten recursos para evitar
algunos tipos de bloqueos
MPM
prefork
Arquitectura
Alternativa de Nginx para aumentar la
alta concurrencia de conexiones
- Un proceso por core (worker)
- En memoria se almacena el estado de la conexión
- Cada conexión genera eventos a ejecutar y los añade
a la cola de eventos
- El worker ejecuta la cola de eventos sin generar
bloqueos
Rendimiento
Nginx ofrece mayor concurrencia y menor uso de recursos
Contenido dinámico
Basado en módulos
El contenido dinámico es procesado por
módulos añadidos al server
Basado en proxy
El contenido dinámico se envia a procesos
externos (proxy)
httpd
+
php_mod
worker php_fpm
Configuración
-La configuración global se registra en el
fichero httpd.conf
-El desarrollador puede añadir configuraciones
a nivel de directorio usando ficheros .htaccess
-Configuración orientada a la publicación de
contenidos
-La configuración global se registra en el
fichero nginx.conf
-No existe configuración por .htaccess
-Configuración orientada al enrutamiento de la
request (URIs , proxy server)
Modularidad
El desarrollo de nuevos módulos en Apache
es sencillo y existe un gran catálogo de
módulos disponibles
La instalación de módulos no necesita
compilación
El número de módulos disponibles es menor
debido a que son más complejos de programar
Desde 2015 no es necesario compilar Nginx
para añadir nuevos módulos (dynamic modules)
Nginx, Inc. publica un listado oficial de módulos
que certifica y da soporte.
Soporte
-Licencia ASF 2
-Amplio soporte por la comunidad Apache
-Explícitamente no se ofrece soporte
personalizado
- Licencia BSD
-Soporte comunitario
(aunque la comunidad de Nginx es más
pequeña y estricta)
-Nginx Inc ofrece soporte personalizado
sobre la versión Nginx Plus
info@hoplasoftware.com
Referencias
https://w3techs.com/technologies/cross/web_server/ranking
http://www.websiteoptimization.com/speed/tweak/average-web-page/
https://www.nginx.com/blog/nginx-vs-apache-our-view/
https://www.digitalocean.com/community/tutorials/apache-vs-nginx-practical-considerations
http://berb.github.io/diploma-thesis/original/042_serverarch.html#42
https://nginx.org/en/
https://www.nginx.com/resources/wiki/modules/
http://httpd.apache.org/
http://httpd.apache.org/ABOUT_APACHE.html
http://httpd.apache.org/docs/2.4/mod/prefork.html
https://httpd.apache.org/docs/2.4/mod/

Apache Server vs Nginx

  • 1.
  • 2.
    Contenido - TL; DR -Contexto y trayectoria - Arquitectura - Rendimiento - Contenido dinámico - Configuración - Modularidad - Soporte
  • 3.
    TL; DR tolong; don’t read Apache Server Nginx Usos Cliente-servidor mejor API Gateway mejor Microservicios mejor Contenido estático igual igual dinámico procesado internamente procesado por terceros Configuración Distribuida mejor Centralizada mejor Publicación de contenidos mejor Funcionalidad de proxy server mejor Desarrollo de nuevos módulos mejor Módulos en el listado oficial 122 143 Load Balancer mejor Caching mejor terminación SSL mejor Soporte Comunidad OpenSource mejor Empresarial mejor
  • 4.
    “Apache is likeMicrosoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.” —Chris Lea. “Apache is like Microsoft Word, it has a million options but you only need six. Nginx does those six things, and it does five of them 50 times faster than Apache.” —Chris Lea. Senior engineer at @NodeSource
  • 5.
    Contexto y trayectoria Evolucióndel tráfico y volumen en Internet - Más usuarios - Mayor de tráfico - Request más pesadas - Response time más exigente
  • 6.
    1991 1993 19951999 2002 2005 2014 2002 2004 2011 2015 2018 NSCA httpd Apache Group Versión 1 Apache Software Foundation Versión 2 70% market share Release 2.4 Versión inicial Open source Versión 1 Dinamic modules Release 1.14 Contexto y trayectoria
  • 7.
    Contexto y trayectoria 1991 -Rob MacCool desarrolla NSCA-httpd 1993 - Nace Apache Group usando NSCA-httpd “a patchy server” 1995 - Versión 1.0 1998 - Release 1.3 1999 - Nace Apache Software Foundation (Brian Behlendorf) 2002 - Versión 2.0 2005 - Mayor cuota de mercado 70% 2014 - Release 2.4 2002 - Igor Sysoev (Rambler.ru) desarrolla nginx para resolver el problema C10K de Apache Server 2004 - El código de Nginx pasa a ser open source 2011 - Fundación de NGINX, Inc - Versión 1 2015 - Se añaden la opción dynamic modules 2018 - Release 1.14
  • 8.
    El problema C10Kse refiere a la incapacidad de un servidor para escalar más allá de 10.000 conexiones o clientes debido al agotamiento de recursos. Las arquitecturas thread-based asignan aproximadamente 1 MB por subproceso, esto agota la memoria del servidor sumado al excesivo cambio de contexto de la CPU para atender a todos los subprocesos
  • 9.
    Arquitectura Thread-based Se crea unproceso para atender cada conexión Event-based Un proceso gestiona múltiples conexiones procesándolas según los eventos que se generan
  • 10.
    Arquitectura Evolución de ApacheServer para mejorar la escalabilidad - Prefork Arrancar previamente threads a espera de nuevas conexiones - MPM multi-processing module Varios threads comparten recursos para evitar algunos tipos de bloqueos MPM prefork
  • 11.
    Arquitectura Alternativa de Nginxpara aumentar la alta concurrencia de conexiones - Un proceso por core (worker) - En memoria se almacena el estado de la conexión - Cada conexión genera eventos a ejecutar y los añade a la cola de eventos - El worker ejecuta la cola de eventos sin generar bloqueos
  • 12.
    Rendimiento Nginx ofrece mayorconcurrencia y menor uso de recursos
  • 13.
    Contenido dinámico Basado enmódulos El contenido dinámico es procesado por módulos añadidos al server Basado en proxy El contenido dinámico se envia a procesos externos (proxy) httpd + php_mod worker php_fpm
  • 14.
    Configuración -La configuración globalse registra en el fichero httpd.conf -El desarrollador puede añadir configuraciones a nivel de directorio usando ficheros .htaccess -Configuración orientada a la publicación de contenidos -La configuración global se registra en el fichero nginx.conf -No existe configuración por .htaccess -Configuración orientada al enrutamiento de la request (URIs , proxy server)
  • 15.
    Modularidad El desarrollo denuevos módulos en Apache es sencillo y existe un gran catálogo de módulos disponibles La instalación de módulos no necesita compilación El número de módulos disponibles es menor debido a que son más complejos de programar Desde 2015 no es necesario compilar Nginx para añadir nuevos módulos (dynamic modules) Nginx, Inc. publica un listado oficial de módulos que certifica y da soporte.
  • 16.
    Soporte -Licencia ASF 2 -Ampliosoporte por la comunidad Apache -Explícitamente no se ofrece soporte personalizado - Licencia BSD -Soporte comunitario (aunque la comunidad de Nginx es más pequeña y estricta) -Nginx Inc ofrece soporte personalizado sobre la versión Nginx Plus
  • 17.
  • 18.