Cloudflare cambiou de NGINX ao seu propio proxy Pingora, escrito en Rust

Cloudflare anunciou a transición da súa rede de entrega de contidos para utilizar o proxy Pingora, escrito na linguaxe Rust. O novo proxy substitúe a configuración baseada no servidor NGINX con scripts Lua e procesa máis dun billón de solicitudes ao día. Nótase que a transición a un proxy especializado permitiu non só implementar novas funcións e aumentar a seguridade debido ao funcionamento seguro da memoria, senón que tamén levou a un aumento significativo no rendemento e no aforro de recursos: a solución baseada en Pingora non require o uso. de Lua, polo que consome un 70% menos de recursos CPU e un 67% menos de memoria mentres procesa a mesma cantidade de tráfico.

Durante moito tempo, un sistema de proxy de tráfico entre usuarios e servidores finais baseado en scripts NGINX e Lua satisfacía as necesidades de Cloudflare, pero a medida que a rede medraba e a súa complexidade aumentaba, unha solución universal resultou insuficiente, tanto en termos de rendemento e debido ás limitacións na extensibilidade e implantación de novas oportunidades para os clientes. En particular, houbo retos para engadir funcionalidades máis aló dunha simple pasarela e un equilibrador de carga. Por exemplo, facíase necesario, se o servidor non procesaba unha solicitude, volver enviar a solicitude a outro servidor, proporcionándolle un conxunto diferente de cabeceiras HTTP.

En lugar dunha arquitectura que separa as solicitudes en procesos de traballo separados, Pingora utiliza un modelo multiproceso, que nos casos de uso de Cloudflare (alta concentración de tráfico de diferentes sitios cun gran cambio estatístico) mostrou unha distribución máis eficiente dos recursos entre os núcleos da CPU. En particular, a vinculación de nginx de solicitudes desequilibradas aos procesos deu lugar a unha carga desequilibrada nos núcleos da CPU, o que provocou solicitudes de uso intensivo de recursos e o bloqueo de E/S ralentizando o procesamento doutras solicitudes. Ademais, vincular o conxunto de conexións aos procesos controladores non permitiu a reutilización de conexións xa establecidas doutros procesos controladores, o que reduce a eficiencia cando hai un gran número de procesos controladores.

NGINX:

Cloudflare cambiou de NGINX ao seu propio proxy Pingora, escrito en Rust

Pingora:

Cloudflare cambiou de NGINX ao seu propio proxy Pingora, escrito en Rust

A implantación de Pingora permitiu reducir en 160 o número de instalacións de novas conexións e aumentar a cota de consultas reutilizadas do 87.1% ao 99.92%. Ademais de reducir as reconexións e un uso máis eficiente dos núcleos da CPU, a mellora do rendemento do novo proxy debeuse principalmente á eliminación dos lentos controladores de Lua utilizados con nginx.

Elixiuse a linguaxe Rust para conseguir un alto rendemento combinado coa dispoñibilidade de ferramentas para garantir un funcionamento seguro con memoria. Menciónase que a pesar dos enxeñeiros altamente cualificados de Cloudflare e revisar o código escrito en linguaxe C, non foi posible evitar erros que provocaban problemas de memoria (por exemplo, unha vulnerabilidade no analizador HTML). En canto ao novo código, fálase de casos de análise de fallos en Pingora, que non se produciron por problemas na aplicación, senón por un erro no núcleo de Linux e por fallos de hardware.

Ademais, podemos observar o comentario de Linus Torvalds, expresado na conferencia Open-Source Summit Europe que se celebra estes días, sobre a inclusión do soporte para a linguaxe Rust no núcleo de Linux. Os parches para desenvolver controladores de dispositivos na linguaxe Rust non se incluíron no núcleo 6.0, pero segundo Linus, moi probablemente serán aceptados no núcleo 6.1; non vai atrasar a integración. Como motivación para engadir apoio a Rust, ademais do impacto positivo na seguridade, Linus tamén cita a oportunidade de aumentar o interese por traballar no núcleo dos novos participantes, o que é importante no contexto do envellecemento dos vellos.

Fonte: opennet.ru

Engadir un comentario