A principios de este año, evaluamos el rendimiento de NGINX Plus y creamos una guía de dimensionamiento para implementarlo en servidores físicos. NGINX Open Source y NGINX Plus se utilizan ampliamente para el equilibrio de carga de capa 7 , también conocido como equilibrio de carga de aplicação .
[ Editor : Actualizamos la guía de tamaño periódicamente para reflejar los cambios en las capacidades de NGINX Plus y los costos y el rendimiento del hardware. El enlace de arriba siempre lleva a la guía más reciente.
Para obtener información sobre el rendimiento de NGINX y NGINX Plus como servidor web, consulte Prueba del rendimiento de los servidores web NGINX y NGINX Plus .]
La guía de tamaño describe el rendimiento que puede esperar lograr con NGINX Plus ejecutándose en varios tamaños de servidores, junto con los costos estimados del hardware. Puede utilizar la guía de dimensionamiento para especificar adecuadamente las implementaciones de NGINX Plus y evitar el exceso de aprovisionamiento (que le cuesta dinero inmediatamente) o el aprovisionamiento insuficiente (que puede causar problemas de rendimiento y costarle dinero a largo plazo) tanto como sea posible.
Hemos recibido mucho interés en la guía de tallas, junto con preguntas sobre la metodología que utilizamos, por parte de clientes y otras personas interesadas en reproducir nuestros resultados. Esta publicación de blog proporciona una descripción general de las pruebas que realizamos para lograr los resultados presentados en la guía de tallas. Cubre la topología que usamos, las pruebas que realizamos y cómo encontramos los precios que figuran en la guía de tamaño.
Nota : Aunque desarrollamos la guía de tamaño específicamente para NGINX Plus, utilizamos NGINX Open Source para las pruebas para que cualquiera pueda reproducir nuestras pruebas sin una suscripción a NGINX Plus. Las pruebas no ejercitan ninguna de las características mejoradas de NGINX Plus, por lo que los resultados para NGINX Open Source y NGINX Plus son los mismos. La versión 1.9.7 de código abierto de NGINX corresponde aproximadamente a NGINX Plus Release 7.
Sin embargo, para distinguir mejor el proxy inverso del servidor web backend en la topología de prueba, utilizamos NGINX Plus para el primero y NGINX (código abierto) para el segundo.
Todas las pruebas se realizaron utilizando tres máquinas independientes conectadas entre sí mediante enlaces duales de 40 GbE en una red de capa 2 simple y plana.
Para generar tráfico desde la máquina cliente, utilizamos wrk
, una herramienta de prueba de rendimiento similar a ab
(ApacheBench). Como se muestra en el diagrama, todo el tráfico se dirigió al proxy inverso NGINX Plus, que reenvió las conexiones al servidor web de código abierto NGINX.
Utilizamos el siguiente hardware para la prueba.
Máquina | CPU | Red | Memoria |
---|---|---|---|
el cliente | 2 CPU Intel(R) Xeon(R) E5‑2699 v3 a 2,30 GHz, 36 núcleos reales (o 72 HT) | 2 Intel XL710 40GbE QSFP+ (rev. 01) | 16 GB |
proxy inverso | 2 CPU Intel(R) Xeon(R) E5‑2699 v3 a 2,30 GHz, 36 núcleos reales (o 72 HT) | 4x Intel XL710 40GbE QSFP+ (rev. 01) | 16 GB |
Servidor web | 2 CPU Intel(R) Xeon(R) E5‑2699 v3 a 2,30 GHz, 36 núcleos reales (o 72 HT) | 2 Intel XL710 40GbE QSFP+ (rev. 01) | 16 GB |
Utilizamos el siguiente software para las pruebas:
wrk
que se ejecuta en la máquina cliente generó el tráfico que NGINX procesó. Lo instalamos según estas instrucciones .Probamos el rendimiento del servidor proxy inverso NGINX Plus con diferentes cantidades de CPU. Un proceso de trabajo
NGINX Plus consume una sola CPU, por lo que para medir el rendimiento de diferentes cantidades de CPU variamos la cantidad de procesos de trabajo
, repitiendo las pruebas con dos procesos de trabajo
, cuatro, ocho, etc. Para obtener una descripción general de la arquitectura NGINX, consulte nuestro blog .
Nota : Para establecer manualmente el número de procesos de trabajo
, utilice la directivaworker_processes
. El valor predeterminado es auto
, que le indica a NGINX Plus que detecte la cantidad de CPU y ejecute un proceso de trabajo
por CPU.
Medimos las siguientes métricas:
Para generar todo el tráfico del cliente, utilizamos wrk
con las siguientes opciones:
-c
especifica el número de conexiones TCP a crear. Para nuestras pruebas, lo configuramos en 50 conexiones.-d
especifica durante cuánto tiempo generar tráfico. Ejecutamos nuestras pruebas durante 3 minutos cada una.-t
especifica el número de subprocesos a crear. Especificamos un solo hilo.Para ejercitar completamente cada CPU, usamos tasket
, que puede anclar un solo proceso wrk
a una CPU. Este método produce resultados más consistentes que aumentar el número de subprocesos wrk
.
Para medir las solicitudes por segundo (RPS), ejecutamos el siguiente script:
para i en `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; hacer tasket -c $i wrk -t 1 -c 50 -d 180s http:// Dirección IP del servidor proxy inverso /1kb.bin y listo
Esta prueba generó una copia de wrk
por CPU, 36 en total para nuestra máquina cliente. Cada copia creó 50 conexiones TCP y realizó solicitudes continuas de un archivo de 1 KB sobre ellas durante 3 minutos (180 segundos).
Para medir las transacciones SSL/TLS por segundo (TPS), ejecutamos el siguiente script:
para i en `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; hacer tasket -c $i wrk -t 1 -c 50 -d 180s -H 'Conexión: cerrada' https:// Dirección IP del servidor proxy inverso /0kb.bin y listo
Esta prueba utiliza los mismos valores para -c
, -d
y -t
que la prueba anterior, pero difiere en dos formas notables porque el foco está en el procesamiento de conexiones SSL/TLS:
-H
establece el encabezado HTTP Connection:
close
).Para medir el rendimiento, ejecutamos el siguiente script:
para i en `seq 0 $(($(getconf _NPROCESSORS_ONLN) - 1))`; hacer tasket -c $i wrk -t 1 -c 50 -d 180s http:// Dirección IP del servidor proxy inverso /1mb.bin y listo
La única diferencia con la primera prueba es el tamaño del archivo, que es mayor, de 1 MB. Descubrimos que utilizar un tamaño de archivo incluso mayor (10 MB) no aumentó el rendimiento general.
En nuestras pruebas utilizamos múltiples tarjetas de red. El siguiente script ligeramente modificado garantizó que el tráfico se distribuyera de manera uniforme entre las dos tarjetas:
para i en `seq 0 $((($(getconf _NPROCESSORS_ONLN) - 1)/2))`; hacer n=`echo $(($i+ número-de-CPUs/2 ))`; conjunto-de-tareas -c $i ./wrk -t 1 -c 50 -d 180s http:// Dirección-IP-del-Servidor-Proxy-Inverso-1 /1kb.bin & conjunto-de-tareas -c $n ./wrk -t 1 -c 50 -d 180s http:// Dirección-IP-del-Servidor-Proxy-Inverso-2 /1kb.bin & hecho
El paso final, una vez que tuvimos números de rendimiento con diferentes números de núcleos, fue determinar el costo de los servidores con las especificaciones correspondientes. Utilizamos precios de servidores Dell PowerEdge con especificaciones similares a las del hardware Intel que usamos en nuestras pruebas. El apéndice a continuación tiene una lista completa de materiales para cada servidor, junto con la configuración completa de NGINX tanto para el proxy inverso como para el servidor web .
Los precios en la guía de tamaños son para las siguientes configuraciones de hardware de Dell.
Nota : Los modelos de servidor con las especificaciones y precios indicados estaban disponibles en el momento en que realizamos nuestras pruebas, pero están sujetos a cambios en el futuro.
Modelo de servidor | Especificaciones | Precio |
---|---|---|
Dell PowerEdge R230 | UPC: Intel Core I3 6100 de 2 núcleos a 3,7 GHz, 2 núcleos y 4 núcleos RAM: 4 GB Disco duro: 500 GB NIC: Intel X710 2×10 Gbe |
$1,200 |
UPC: Intel® Xeon® E3‑1220 v5 3,0 GHz, 4 núcleos/8 núcleos RAM: 4 GB Disco duro: 500 GB NIC: Intel XL710 2×40 Gbe |
$1,400 | |
Dell PowerEdge R430 | UPC: Intel® Xeon® E5‑2630 v3 2,4 GHz, 8C/16T RAM: 4 GB Disco duro: 500 GB NIC: Intel XL710 2×40 Gbe |
$2,200 |
UPC: 2 procesadores Intel® Xeon® E5‑2630 v3 de 2,4 GHz, 8 núcleos y 16 núcleos RAM: 8 GB Disco duro: 500 GB NIC: Intel XL710 2×40 Gbe |
$3,000 | |
Dell PowerEdge R630 | UPC: 2 Intel® Xeon® E5‑2697A v4 2,6 GHz, 16 C/32 T RAM: 8 GB Disco duro: 500 GB NIC: Intel XL710 2×40 Gbe |
$8,000 |
UPC: 2 procesadores Intel® Xeon® E5‑2699 v3 de 2,3 GHz, 18 núcleos y 36 núcleos RAM: 8 GB Disco duro: 500 GB NIC: Intel XL710 2×40 Gbe |
$11,000 |
La siguiente configuración se utilizó en el proxy inverso NGINX Plus. Tenga en cuenta los dos conjuntos de directivas keepalive_timeout
y keepalive_requests
:
La configuración es una configuración de servidor proxy inverso bastante estándar, con NGINX Plus haciendo proxy a un servidor web mediante la directiva proxy_pass
.
usuario nginx;procesos_de_trabajador automático; archivo_de_límite_de_trabajador 10240; pid /var/run/nginx.pid; eventos { conexiones_de_trabajador 10240; aceptar_mutex desactivado; aceptar_múltiples desactivado; } http { registro_de_acceso desactivado; incluir /etc/nginx/mime.types; tipo_predeterminado aplicação/octet-stream; formato_de_registro principal '$dirección_remota - $usuario_remoto [$tiempo_local] "$solicitud" ' '$estado $bytes_del_cuerpo_enviados "$http_referer" ' '"$agente_de_usuario_http" "$http_x_reenviado_para" "$cifrado_ssl" ' '"$protocolo_ssl" '; enviar_archivo activado; # Pruebas RPS tiempo_de_espera_mantener_activo 300 s; solicitudes_mantener_activo 1000000; # Pruebas TPS SSL/TLS #keepalive_timeout 0; #keepalive_requests 1; servidor web ascendente { servidor dirección IP del servidor web ; } servidor { escuchar 80; escuchar 443 backlog ssl=102400 puerto de reutilización; certificado_ssl /etc/nginx/ssl/rsa-cert.crt; clave_certificado_ssl /etc/nginx/ssl/rsa-key.key; tickets_ssl_session_desactivados; caché_ssl_session_desactivado; raíz /var/www/html; ubicación / { contraseña_proxy http://servidor_web; } } } }
La siguiente configuración se utilizó en el servidor web NGINX. Sirve archivos estáticos desde /var/www/html/ , según lo configurado por la directiva root
. Los archivos estáticos se generaron utilizando dd
; este ejemplo crea un archivo de 1 KB de ceros:
dd si=/dev/cero de=1kb.bin bs=1KB conteo=1
La configuración:
usuario nginx;
procesos_de_trabajo automáticos;
trabajador_rlimit_nofile 10240;
pid /var/run/nginx.pid;
eventos {
conexiones_de_trabajador 10240;
aceptar_mutex desactivado;
multi_accept desactivado;
}
http {
acceso_log desactivado;
incluir /etc/nginx/mime.types;
aplicação de tipo predeterminado /octet-stream;
formato de registro principal '$dirección_remota - $usuario_remoto [$hora_local] "$solicitud" '
'$estado $body_bytes_sent "$http_referer"'
'"$http_user_agent" "$http_x_reenviado_para" "$ssl_cipher" '
'"$ssl_protocol" ';
enviar archivo activado;
tiempo de espera de mantenimiento 300 s;
keepalive_requests 1000000;
servidor {
escuchar 80;
raíz /var/www/html;
}
}
Para probar NGINX Plus usted mismo, comience hoy una prueba gratuita de 30 días o contáctenos para analizar sus casos de uso .
"Esta publicación de blog puede hacer referencia a productos que ya no están disponibles o que ya no reciben soporte. Para obtener la información más actualizada sobre los productos y soluciones F5 NGINX disponibles, explore nuestra familia de productos NGINX . NGINX ahora es parte de F5. Todos los enlaces anteriores de NGINX.com redirigirán a contenido similar de NGINX en F5.com.