Lançamento do Pingora 0.4, um framework para criação de serviços de rede

A Cloudflare publicou o lançamento da estrutura Pingora 0.4, projetada para desenvolver serviços de rede seguros e de alto desempenho na linguagem Rust. O proxy criado com Pingora tem sido usado na rede de entrega de conteúdo Cloudflare em vez de Nginx há mais de dois anos e processa 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 para HTTP/1 e HTTP/2 (HTTP/3 nos planos), bem como capacidade de criar serviços usando protocolos próprios ou UDP/TCP.
  • Suporte para processamento multithread de solicitações em modo assíncrono.
  • A capacidade de anexar manipuladores de retorno de chamada e filtros que permitem gerenciar vários estágios de processamento de solicitações, bem como modificar, redirecionar, bloquear e registrar solicitações e respostas.
  • Proxy de gRPC e WebSocket.
  • Balanceadores de carga conectáveis.
  • Capacidade de alterar a configuração sem reiniciar.
  • Suporte para atualização do código do aplicativo sem interromper conexões.
  • Meios de comutação de carga em caso de falha (failover).
  • Integração com diversos sistemas de monitoramento e registro (Syslog, Prometheus, Sentry, OpenTelemetry).
  • Suporte para criptografia TLS (usando OpenSSL, BoringSSL ou Rustls).
  • Pacotes Rust prontos para criação de proxies HTTP, trabalho com protocolos de rede, análise de cabeçalhos HTTP, contabilidade e limitação de tráfego, balanceamento de carga, trabalho com tabela hash distribuída Ketama, manutenção de cache na RAM e processamento assíncrono de timeouts.

Entre as mudanças na nova versão:

  • Suporte inicial para a biblioteca de criptografia Rustls usando provedores de criptografia baseados em aws-lc-rs e bibliotecas de anel baseadas em BoringSSL.
  • Suporte experimental para a plataforma Windows.
  • Modo TLS fictício, que pode ser usado em situações onde não é possível usar uma implementação TLS real.
  • Adicionado suporte ao módulo gRPC-web para traduzir solicitações do cliente gRPC-web em solicitações para servidor gRPC.
  • Fornece a capacidade de lidar com conexões H2C (HTTP/2 sobre TCP simples, sem criptografia) e HTTP/1 na mesma porta de rede.
  • Adicionada a capacidade de conectar suas próprias implementações da função connect() para alterar o comportamento ao estabelecer uma conexão de rede, por exemplo, para definir opções adicionais para o soquete ou simular erros durante o teste.
  • Forneceu a capacidade de ignorar respostas informativas durante o proxy, como respostas com o cabeçalho "Expect: 100-continue".
  • Adicionado suporte para descompactar respostas compactadas com gzip.
  • Implementou a contabilidade do estado de back-end para fins de monitoramento.
  • Adicionada a capacidade de vincular a um intervalo de portas locais.

Fonte: opennet.ru

Adicionar um comentário