Cloudflare ha reemplazado NGINX con su propio proxy Pingora, escrito en Rust

La empresa Cloudflare ha anunciado la transición de su red de entrega de contenido al uso del proxy Pingora, desarrollado en el lenguaje Rust. Este nuevo proxy ha reemplazado la configuración basada en el servidor NGINX con scripts Lua, manejando más de un billón de solicitudes al día. Se destaca que la transición a un proxy especializado no solo ha permitido implementar nuevas funcionalidades y aumentar la seguridad gracias a un manejo seguro de la memoria, sino que también ha resultado en un aumento significativo del rendimiento y un ahorro de recursos: la solución basada en Pingora no requiere el uso de Lua, lo que reduce el consumo de recursos de CPU en un 70% y el uso de memoria en un 67% al procesar el mismo volumen de tráfico.

Durante mucho tiempo, el sistema para la proxy de tráfico entre usuarios y finales servidores basado en NGINX y scripts Lua satisfacía las necesidades de Cloudflare, pero con el crecimiento de la red y el aumento de su complejidad, la solución universal resultó ser insuficiente, tanto en términos de rendimiento como debido a las limitaciones en escalabilidad y la implementación de nuevas funcionalidades para los clientes. En particular, surgieron dificultades para añadir funcionalidades que superan lo que podría ofrecer un simple gateway y balanceador de carga. Por ejemplo, surgió la necesidad de en caso de fallo en el procesamiento de una solicitud, el servidor redirigir la solicitud a otro servidor, dotándola de un conjunto diferente de encabezados HTTP.

En lugar de la arquitectura con separación de solicitudes en procesos manejadores individuales (workers), en Pingora se aplica un modelo multihilo, que en los escenarios de uso de Cloudflare (alta concentración de tráfico de diferentes sitios con un gran desplazamiento estadístico) ha mostrado una distribución de recursos más eficiente entre los núcleos de CPU. En particular, el enlace de solicitudes no balanceadas a procesos en NGINX ocasionaba una carga desequilibrada en los núcleos de CPU, resultando en que las solicitudes que consumen muchos recursos y las entradas/salidas bloqueantes ralentizaban el procesamiento de otras solicitudes. Además, el enlace de un grupo de conexiones a procesos manejadores no permitía reutilizar las conexiones ya establecidas de otros procesos manejadores, lo que reduce la eficiencia del trabajo al haber un gran número de procesos manejadores.

NGINX:

Cloudflare ha reemplazado NGINX con su propio proxy Pingora, escrito en Rust

Pingora:

Cloudflare ha reemplazado NGINX con su propio proxy Pingora, escrito en Rust

La implementación de Pingora ha permitido reducir en 160 veces el número de operaciones para establecer nuevas conexiones y aumentar la proporción de solicitudes reutilizables del 87.1% al 99.92%. Además de la reducción de conexiones repetidas y un uso más eficiente de los núcleos de CPU, el aumento del rendimiento del nuevo proxy se debe principalmente a la eliminación de los controladores lentos basados en Lua que se utilizaban con nginx.

El lenguaje Rust fue elegido por su capacidad para lograr un alto rendimiento junto con herramientas que garantizan un manejo seguro de la memoria. Se menciona que, a pesar de la alta calificación de los ingenieros de Cloudflare y de las revisiones de código en C, no se pudieron evitar errores que generaban problemas de memoria (por ejemplo, una vulnerabilidad en el analizador HTML). En lo que respecta al nuevo código, se discutieron casos de fallos en el análisis de Pingora, que resultaron ser causados por errores en el núcleo de Linux y fallos de hardware.

Además, se puede destacar el comentario de Linus Torvalds sobre la inclusión del soporte para el lenguaje Rust en el núcleo de Linux, mencionado en la conferencia Open-Source Summit Europe que se lleva a cabo estos días. En el núcleo 6.0, los parches para el desarrollo de controladores de dispositivos en Rust no fueron incluidos, pero según Linus, probablemente serán aceptados en el núcleo 6.1; no tiene intención de retrasar la integración. Como motivación para agregar soporte a Rust, además del impacto positivo en la seguridad, Linus menciona la posibilidad de aumentar el interés de nuevos participantes en el trabajo en el núcleo, algo relevante dado el envejecimiento de los veteranos.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster