Lançamento do balanceador HTTP/TCP HAProxy 2.0

publicado liberação do balanceador de carga HA Proxy 2.0, que permite distribuir tráfego HTTP e solicitações TCP arbitrárias entre um grupo de servidores, levando em consideração vários fatores (por exemplo, verifica a disponibilidade de servidores, avalia o nível de carga, possui contramedidas DDoS) e realiza filtragem de dados primários ( por exemplo, você pode analisar cabeçalhos HTTP, filtrar parâmetros de consulta incorretos de transmissão, bloquear substituição de SQL e XSS, conectar agentes de processamento de conteúdo). HAProxy também pode Aplique coordenar a interação de componentes em sistemas baseados em arquitetura de microsserviços. O código do projeto é escrito em C e fornecido licenciado sob GPLv2. O projeto é usado em muitos sites grandes, incluindo Airbnb, Alibaba, GitHub, Imgur, Instagram, Reddit, StackOverflow, Tumblr, Twitter e Vimeo.

Principais recursos de lançamento:

  • Nova API introduzida Plano de dados, que permite gerenciar as configurações do HAProxy dinamicamente por meio da API da Web REST. Inclusive, você pode adicionar e remover dinamicamente back-ends e servidores, criar ACLs, alterar o roteamento de solicitações, alterar ligações do manipulador para IP;
  • Adicionada a diretiva nbthread, que permite configurar o número de threads usados ​​no HAProxy para otimizar o desempenho em CPUs multi-core. Por padrão, o número de threads de trabalho é selecionado dependendo dos núcleos de CPU disponíveis no ambiente atual e, em ambientes de nuvem, o padrão é um thread. Para definir limites rígidos, as opções de montagem MAX_THREADS e MAX_PROCS foram adicionadas, limitando o limite superior no número de threads e processos;
  • O uso da diretiva bind para vincular manipuladores a endereços de rede foi simplificado. Na configuração, não é mais necessário definir parâmetros do processo - por padrão, as conexões serão distribuídas entre threads dependendo da quantidade de conexões ativas.
  • A configuração de logs ao executar em contêineres isolados foi simplificada - o log agora pode ser enviado para stdout e stderr, bem como para qualquer descritor de arquivo existente (por exemplo, “log fd@1 local0”);
  • O suporte para HTX (representação HTTP nativa) é habilitado por padrão, permitindo balanceamento ao usar recursos avançados, como HTTP/2 ponta a ponta, tentativas de camada 7 e gRPC. O HTX não substitui os cabeçalhos, mas reduz a operação de modificação à remoção e adição de um novo cabeçalho ao final da lista, o que permite manipular quaisquer variantes estendidas do protocolo HTTP, preservando a semântica original dos cabeçalhos e permitindo que você para obter maior desempenho ao traduzir HTTP/2 para HTTP/1.1 e vice-versa;
  • Adicionado suporte oficial para modo HTTP/2 End-to-End (processamento de todas as etapas em HTTP/2, incluindo chamadas para o backend, e não apenas interação entre o proxy e o cliente);
  • Foi implementado suporte total para proxy bidirecional do protocolo gRPC com a capacidade de analisar fluxos gRPC, destacando mensagens individuais, refletindo o tráfego gRPC no log e filtrando mensagens usando ACLs. gRPC permite organizar o trabalho de microsserviços em diversas linguagens de programação que interagem entre si por meio de uma API universal. A comunicação de rede no gRPC é implementada no protocolo HTTP/2 e é baseada no uso de buffers de protocolo para serialização de dados.
  • Adicionado suporte para o modo “Layer 7 Retries”, que permite enviar solicitações HTTP repetidas no caso de falhas de software que não estejam relacionadas a problemas no estabelecimento de uma conexão de rede (por exemplo, se não houver resposta ou uma resposta vazia a um Solicitação POST). Para desabilitar o modo, o sinalizador “disable-l7-retry” foi adicionado à opção “http-request”, e a opção “retry-on” foi adicionada para ajuste fino nas seções de padrões, escuta e backend. Os seguintes sinais estão disponíveis para reenvio: todos os erros repetíveis, nenhum, falha de conexão, resposta vazia, resposta indesejada, tempo limite de resposta, 0rtt rejeitado, bem como ligação para códigos de status de retorno (404, etc.) ;
  • Foi implementado um novo gerenciador de processos que permite configurar a chamada de arquivos executáveis ​​externos com manipuladores para HAProxy.
    Por exemplo, a API Data Plan (/usr/sbin/dataplaneapi), bem como vários mecanismos de processamento de fluxo Offload, são implementados na forma de tal manipulador externo;

  • Vinculações foram adicionadas para .NET Core, Go, Lua e Python para desenvolver extensões SPOE (Stream Processing Offload Engine) e SPOP (Stream Processing Offload Protocol). Anteriormente, o desenvolvimento de extensões era suportado apenas em C;
  • Adicionado um manipulador de espelho spoa externo (/usr/sbin/spoa-mirror) para espelhar solicitações para um servidor separado (por exemplo, para copiar parte do tráfego de produção para testar um ambiente experimental sob carga real);
  • Introduzido Controlador de entrada HAProxy Kubernetes garantir a integração com a plataforma Kubernetes;
  • Adicionado suporte integrado para exportação de estatísticas para o sistema de monitoramento Prometeu;
  • O Protocolo Peers, usado para trocar informações com outros nós que executam o HAProxy, foi estendido. Incluindo suporte adicional para Heartbeat e transmissão de dados criptografados;
  • O parâmetro “sample” foi adicionado à diretiva “log”, que permite despejar apenas uma parte das solicitações no log, por exemplo 1 em 10, para formar uma amostra analítica;
  • Adicionado modo de criação de perfil automático (diretiva profiling.tasks, que pode ativar e desativar os valores automaticamente). A criação de perfil automática será habilitada se a latência média exceder 1000 ms. Para visualizar os dados de criação de perfil, o comando “show profiling” foi adicionado à API Runtime ou é possível redefinir as estatísticas para o log;
  • Adicionado suporte para acesso a servidores backend usando o protocolo SOCKS4;
  • Adicionado suporte ponta a ponta para o mecanismo de abertura rápida de conexões TCP (TFO - TCP Fast Open, RFC 7413), que permite reduzir o número de etapas de configuração de conexão combinando a primeira em uma solicitação e a segunda etapa de o clássico processo de negociação de conexão em 3 etapas e possibilita o envio de dados na fase inicial de estabelecimento de uma conexão;
  • Novas ações adicionadas:
    • "http-request replace-uri" para substituir a URL usando uma expressão regular;
    • “tcp-request content do-resolve” e “http-request do-resolve” para resolver o nome do host;
    • “tcp-request content set-dst” e “tcp-request content set-dst-port” para substituir o endereço IP e a porta de destino.
  • Adicionados novos módulos de conversão:
    • aes_gcm_dev para descriptografar fluxos usando algoritmos AES128-GCM, AES192-GCM e AES256-GCM;
    • protobuf para extrair campos de mensagens de Protocol Buffers;
    • ungrpc para extrair campos de mensagens gRPC.

    Fonte: opennet.ru

Adicionar um comentário