A Cloudflare lançou a versão 0.6 do framework Pingora, voltado para o desenvolvimento de serviços de rede seguros e de alto desempenho na linguagem Rust. O proxy construído com o Pingora já está em uso na rede de entrega de conteúdo da Cloudflare há mais de dois anos, substituindo o nginx e processando mais de 40 milhões de solicitações por segundo. O código é escrito em Rust e publicado sob a licença Apache 2.0.
Principais recursos do Pingora:
- Suporte a HTTP/1 e HTTP/2 (planejando HTTP/3), além da possibilidade de criar serviços que utilizem seus próprios protocolos ou UDP/TCP.
- Suporte ao processamento de solicitações em múltiplas threads de forma assíncrona.
- Possibilidade de anexar manipuladores de callback e filtros, permitindo o gerenciamento de várias etapas do processamento da solicitação, bem como modificar, redirecionar, bloquear e registrar solicitações e respostas.
- Proxy para gRPC e WebSocket.
- Balanceadores de carga plugáveis.
- Capacidade de alterar a configuração sem reinicialização.
- Suporte à atualização do código do aplicativo sem interromper as conexões.
- Ferramentas para comutação de carga em caso de falha (failover).
- Integração com diversos sistemas de monitoramento e registro de logs (Syslog, Prometheus, Sentry, OpenTelemetry).
- Suporte à criptografia TLS (utilizando OpenSSL, BoringSSL ou Rustls).
- Pacotes Rust prontos para criar proxies HTTP, trabalhar com protocolos de rede, analisar cabeçalhos HTTP, contabilizar e limitar tráfego, balancear carga, trabalhar com tabelas de hash distribuídas Ketama, manter o cache em memória e processar timeouts de forma assíncrona.
Entre as mudanças na nova versão:
- Durante o encerramento, a gravação dos nomes dos componentes de runtime é garantida no log para facilitar a diagnóstico de problemas causados pela ausência de componentes de runtime, resultando em atrasos durante o encerramento.
- O rastreamento de fases de execução foi incluído servidor, cujas informações podem ser úteis para monitoramento ou garantir resiliência. Ao mudar de fase de execução, uma mensagem ExecutionPhase é gerada, que pode ser interceptada através da API Server::watch_execution_phase.
- A alocação em memória de dicionários compactados é permitida.
- Na implementação do servidor http e do proxy http, foram adicionadas as diretivas HttpServerOptions e H2Options.
- Foi implementada proteção contra o ataque MadeYouReset, que permite induzir uma negação de serviço através da manipulação de quadros de controle HTTP/2.
Fonte: opennet.ru
