Lançamento do balanceador de carga HTTP/TCP HAProxy 2.0

Publicado lançamento do balanceador de carga com o encaminhamento de solicitações através do TCP sobre IPv4 e IPv6 ou sem encaminhamento de conexões (para envio de solicitações heartbeat de verificação, confirmando que está em operação normal)., permitindo distribuir o tráfego HTTP e solicitações TCP arbitrárias entre um grupo de servidores, considerando diversos fatores (por exemplo, verifica a disponibilidade dos servidores, avalia o nível de carga, possui mecanismos de defesa contra DDoS) e realiza uma filtragem inicial de dados (como analisar cabeçalhos HTTP, filtrar a passagem de parâmetros de solicitação inválidos, bloquear injeção SQL e XSS, conectar agentes de processamento de conteúdo). O HAProxy também pode ser usados para coordenar a interação de componentes em sistemas baseados na arquitetura de microserviços. O código do projeto é escrito em C e é disponibilizado sob licença GPLv2. O projeto é utilizado em muitos sites grandes, incluindo Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter e Vimeo.

Principais características do lançamento:

  • Um novo API Data Plan, que permite gerenciar as configurações do HAProxy em tempo real através da REST Web API. É possível adicionar e remover dinamicamente backends e servidores, criar ACLs, alterar o roteamento de solicitações, modificar associações de manipuladores a IPs;
  • Foi adicionada a diretiva nbthread, que permite configurar o número de threads usadas no HAProxy para otimizar o desempenho em CPUs multinúcleo. Por padrão, o número de threads de trabalho é selecionado com base nos núcleos de CPU disponíveis no ambiente atual, e em ambientes de nuvem, um único thread é configurado por padrão. Para definir limites rígidos, foram adicionadas opções de configuração MAX_THREADS e MAX_PROCS, que limitam o máximo de threads e processos;
  • A utilização da diretiva bind para associar manipuladores a endereços de rede foi simplificada. Agora, ao configurar, a definição de parâmetros do processo não é obrigatória — por padrão, as conexões serão distribuídas entre threads com base no número de conexões ativas.
  • A configuração de logs ao iniciar em contêineres isolados foi simplificada — o log agora pode ser direcionado para stdout e stderr, bem como para qualquer descritor de arquivo existente (por exemplo, "log fd@1 local0");
  • O suporte ao HTX (Representação HTTP Nativa) está habilitado por padrão, permitindo o balanceamento ao utilizar funcionalidades avançadas como HTTP/2 de ponta a ponta, Repetições na Camada 7 e gRPC. O HTX não substitui os cabeçalhos in-loco, mas reduz a operação de modificação a remover e adicionar um novo cabeçalho ao final da lista, permitindo manipular quaisquer variantes avançadas do protocolo HTTP, mantendo a semântica original dos cabeçalhos e alcançando melhor desempenho na transição de HTTP/2 para HTTP/1.1 e vice-versa;
  • Adicionada a suporte oficial ao modo de Ponta a Ponta HTTP/2 (processamento em todas as etapas em HTTP/2, incluindo chamadas ao backend, e não apenas a interação do proxy com o cliente);
  • Implementado suporte completo para proxy bidirecional do protocolo gRPC com capacidade de análise de fluxos gRPC, destacando mensagens individuais, refletindo o tráfego gRPC no log e filtrando mensagens usando ACL. O gRPC permite a operação de microserviços em várias linguagens de programação que se comunicam entre si através de uma API universal. A interação em rede no gRPC é feita sobre o protocolo HTTP/2 e baseia-se no uso de Protocol Buffers para a serialização de dados.
  • Adicionado suporte ao modo 'Layer 7 Retries', que permite reencaminhar solicitações HTTP em caso de falhas de software não relacionadas a problemas na conexão de rede (por exemplo, quando não há resposta ou a resposta do POST é vazia). Para desativar o modo, foi adicionado o sinalizador 'disable-l7-retry' na opção 'http-request', e para ajustes finos nas seções defaults, listen e backend, a opção 'retry-on' está disponível. Os seguintes indicadores estão disponíveis para reenvios: all-retryable-errors, none, conn-failure, empty-response, junk-response, response-timeout, 0rtt-rejected, além da vinculação aos códigos de status retornados (404, etc.);
  • Implementado um novo gerenciador de processos (Process Manager), permitindo a configuração da chamada de arquivos executáveis externos com manipuladores para o HAProxy.
    Por exemplo, este manipulador externo foi implementado como API Data Plan (/usr/sbin/dataplaneapi), além de vários mecanismos de processamento Offload;
  • Adicionados bindings para .NET Core, Go, Lua e Python para o desenvolvimento de extensões SPOE (Stream Processing Offload Engine) e SPOP (Stream Processing Offload Protocol). Anteriormente, apenas o desenvolvimento de extensões em C era suportado;
  • Adicionado o manipulador externo spoa-mirror ( /usr/sbin/spoa-mirror ) para espelhar solicitações em um servidor separado (por exemplo, para copiar parte do tráfego de trabalho para testar um ambiente experimental sob carga real);
  • Apresentado Controlador de Ingress HAProxy Kubernetes para garantir a integração com a plataforma Kubernetes;
  • Adicionada suporte interno para exportar estatísticas para o sistema de monitoramento Prometheus;
  • O protocolo Peers Protocol foi expandido, usado para troca de informações com outros nós usando HAProxy. Inclui suporte para Heartbeat e transmissão de dados criptografada;
  • Adicionado o parâmetro 'sample' à diretiva 'log', permitindo que apenas uma parte das solicitações seja registrada, por exemplo, 1 de 10, para formar uma amostra analítica;
  • Adicionado um modo de perfilamento automático (a diretiva profiling.tasks, que pode assumir os valores auto, on e off). O perfilamento automático é ativado quando a média de latência excede 1000 ms. Para visualizar os dados de perfilamento na API Runtime, adicionada o comando 'show profiling' ou existe a opção de resetar as estatísticas no log;
  • Adicionada suporte para requisições a servidores backend usando o protocolo SOCKS4;
  • Adicionada suporte de ponta a ponta (end-to-end, em seu caminho de processamento de solicitação, abrangendo o backend) para o mecanismo de abertura rápida de conexões TCP (TFO - TCP Fast Open, RFC 7413), que reduz o número de etapas na instalação da conexão ao combinar em uma única requisição os primeiros e segundos passos do clássico processo de negociação de conexão de 3 etapas e permite o envio de dados na fase inicial da instalação da conexão;
  • Novas ações foram adicionadas:
    • 'http-request replace-uri' para substituir URLs usando expressões regulares;
    • 'tcp-request content do-resolve' e 'http-request do-resolve' para resolução de nome de host;
    • 'tcp-request content set-dst' e 'tcp-request content set-dst-port' para substituição do endereço IP de destino e porta.
  • Novos módulos de conversão adicionados:
    • aes_gcm_dev para descriptografar fluxos usando algoritmos AES128-GCM, AES192-GCM e AES256-GCM;
    • protobuf para extrair campos de mensagens Protocol Buffers;
    • ungrpc para extrair campos de mensagens gRPC.

    Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster