Cloudflare cambió de NGINX a su propio proxy Pingora escrito en Rust

Cloudflare ha anunciado que está migrando su red de entrega de contenido para usar el proxy Pingora, escrito en Rust. El nuevo proxy reemplazó la configuración basada en el servidor NGINX con secuencias de comandos Lua y maneja más de un billón de solicitudes por día. Se observa que la transición a un proxy especializado permitió no solo implementar nuevas funciones y aumentar la seguridad debido al trabajo seguro con la memoria, sino que también condujo a un aumento significativo en el rendimiento y el ahorro de recursos: una solución basada en Pingora no requiere el uso de Lua, por lo que consume un 70 % menos de recursos de CPU y un 67 % menos de memoria mientras maneja la misma cantidad de tráfico.

Durante mucho tiempo, un sistema de proxy de tráfico entre usuarios y servidores finales basado en scripts NGINX y Lua satisfacía las necesidades de Cloudflare, pero a medida que la red crecía y su complejidad aumentaba, una solución universal no era suficiente, tanto en términos de rendimiento como de rendimiento. y por limitaciones en la extensibilidad e implementación de nuevas oportunidades para los clientes. En particular, hubo dificultades para agregar funcionalidad más allá de una simple puerta de enlace y un equilibrador de carga. Por ejemplo, en el caso de que el servidor no pudiera procesar una solicitud, era necesario redirigir la solicitud a otro servidor, proporcionándole un conjunto diferente de encabezados HTTP.

En lugar de una arquitectura con solicitudes divididas en procesos de trabajo separados (trabajadores), Pingora usa un modelo de subprocesos múltiples, que en los escenarios de uso de Cloudflare (alta concentración de tráfico de diferentes sitios con un gran cambio estadístico) mostró una distribución más eficiente de recursos entre núcleos de CPU. En particular, vincular solicitudes desequilibradas a procesos en nginx condujo a una carga desequilibrada en los núcleos de la CPU, como resultado de lo cual las solicitudes que consumen muchos recursos y el bloqueo de E/S ralentizaron el procesamiento de otras solicitudes. Además, vincular el grupo de conexiones a los procesos del controlador no permitía reutilizar las conexiones ya establecidas de otros procesos del controlador, lo que reduce la eficiencia cuando hay una gran cantidad de procesos del controlador.

nginx:

Cloudflare cambió de NGINX a su propio proxy Pingora escrito en Rust

Píngora:

Cloudflare cambió de NGINX a su propio proxy Pingora escrito en Rust

La introducción de Pingora permitió reducir 160 veces el número de operaciones de establecimiento de nuevas conexiones y aumentar la proporción de solicitudes reutilizadas del 87.1 % al 99.92 %. Además de reducir las reconexiones y un uso más eficiente de los núcleos de la CPU, el rendimiento del nuevo proxy se debe principalmente a la eliminación de los controladores Lua lentos que se usan con nginx.

Se eligió el lenguaje Rust porque permite un alto rendimiento combinado con la disponibilidad de herramientas seguras para la memoria. Se menciona que a pesar de la alta calificación de los ingenieros de Cloudflare y las revisiones de código escritas en lenguaje C, no fue posible evitar errores que derivan en problemas de memoria (por ejemplo, una vulnerabilidad en el analizador HTML). En cuanto al nuevo código, hablamos de casos de análisis de bloqueos en Pingora, que resultaron ser causados ​​no por problemas en la aplicación, sino por un error en el kernel de Linux y fallas de hardware.

Adicionalmente, se puede señalar que Linus Torvalds comentó sobre la inclusión de soporte para el lenguaje Rust en el kernel de Linux, expresado en la conferencia Open-Source Summit Europe que se lleva a cabo estos días. El kernel 6.0 no incluía parches para desarrollar controladores de dispositivos en el lenguaje Rust, pero según Linus, es probable que se adopten en el kernel 6.1, no va a aprovechar la integración. Como motivo para agregar soporte para Rust, además de un impacto positivo en la seguridad, Linus también aprovecha la oportunidad para aumentar el interés en trabajar en el núcleo de los nuevos participantes, lo cual es importante en el contexto del envejecimiento de los veteranos.

Fuente: opennet.ru

Añadir un comentario