Anunciando o balanceamento de carga UDP no NGINX e no NGINX Plus

NGINX | 15 de março de 2016

Temos o orgulho de anunciar a adição de um novo e empolgante recurso ao NGINX Open Source e à nossa plataforma de entrega de aplicações, NGINX Plus – balanceamento de carga UDP. O novo recurso amplia nossas funcionalidades existentes de TCP e HTTP, tornando o NGINX um frontend avançado, fácil de usar e consistente para uma variedade ainda maior de aplicações e dispositivos conectados à Internet. Estamos entusiasmados em estender os recursos de balanceamento de carga que sustentam mais da metade das aplicações mais movimentadas do mundo a um novo grupo de usuários que está desenvolvendo a Internet das Coisas (IoT).

Por que adicionar suporte ao balanceamento de carga UDP?

A maioria das aplicações de Internet depende do HTTP para a comunicação em rede. Protocolos avançados, como SOAP e REST, são desenvolvidos com base no HTTP, que pode aproveitar diversas extensões avançadas — segurança com TLS, compactação com Gzip e melhorias de desempenho com HTTP/2.

No entanto, muitas aplicações precisam usar vários protocolos para diferentes finalidades, e muitos dos principais protocolos da Internet são anteriores ao HTTP. Por esse motivo, uma solução completa de balanceamento de carga e proxy reverso precisa oferecer suporte a uma ampla variedade de protocolos, tanto baseados em TCP quanto em UDP.

O UDP é comumente usado em protocolos leves que não são de natureza transacional, como DNS (usado para resolver nomes de domínio em endereços), syslog (usado para registros leves) e RADIUS (usado para autenticação). Esses protocolos não têm requisitos rígidos de confiabilidade — se uma mensagem UDP (datagrama) for perdida, o cliente poderá reenviá-la com segurança após um tempo limite —, mas os serviços que eles fornecem são essenciais para o funcionamento correto dos serviços de Internet. O UDP também está se tornando um dos protocolos preferidos para novas aplicações de IoT devido aos seus baixos requisitos de largura de banda.

Há um ano, a NGINX apresentou o balanceamento de carga TCP à nossa comunidade de usuários e clientes comerciais. Agora, temos o prazer de ampliar nossos recursos de balanceamento de carga com a adição do balanceamento de carga UDP. Com a NGINX e o NGINX Plus, os usuários agora podem fornecer serviços baseados em UDP com confiabilidade, escalabilidade e desempenho.

Como funciona o balanceamento de carga UDP?

O NGINX escuta o tráfego de rede UDP (protocolos como DNS, syslog e RADIUS) em um ou mais endereços (endereço IP e porta), conforme definido pelo administrador. Esses endereços são publicados para que os clientes saibam para onde enviar solicitações do serviço desejado.

Assim como no balanceamento de carga HTTP e TCP, a configuração do balanceamento de carga UDP define um grupo upstream — o conjunto de servidores de origem que fornecem o serviço baseado em UDP — e o algoritmo a ser usado para balancear o tráfego entre os servidores (por exemplo, Round Robin, Menor Número de Conexões ou Hash baseado no endereço IP de origem). A configuração também define um servidor virtual para cada porta UDP, com uma diretiva proxy_pass que especifica o grupo upstream responsável pelo serviço associado:

# Load balance UDP‑based DNS traffic across two serversstream {
    upstream dns_upstreams {
        server 192.168.136.130:53;
        server 192.168.136.131:53;
    }

    server {
        listen 53 udp;
        proxy_pass dns_upstreams;
        proxy_timeout 1s;
        proxy_responses 1;
        error_log logs/dns.log;
    }
}

Quando o NGINX recebe um datagrama UDP em uma porta (neste caso, uma consulta DNS na porta 53), ele usa o algoritmo de balanceamento de carga configurado (neste caso, o Round Robin padrão) para selecionar qual servidor do grupo upstream irá processá-lo. Quando apropriado, o NGINX aguarda uma resposta do servidor e encaminha essa resposta (e quaisquer pacotes subsequentes recebidos dentro do período de tempo limite) de volta ao cliente.

Se um servidor não responder a uma solicitação, o NGINX o marcará como “com falha” e interromperá temporariamente o envio de datagramas para ele. A cada poucos segundos, o NGINX verificará a integridade do servidor para saber se ele se recuperou, enviando uma pequena quantidade de tráfego real.

O NGINX Plus R9 incluirá verificações de integridade de aplicações (também chamadas de verificações ‘assíncronas’ ou ‘sintéticas’) para serviços UDP, semelhantes às usadas para tráfego HTTP e TCP. Você poderá configurar o NGINX Plus para enviar solicitações UDP especiais aos servidores upstream e definir o tipo de resposta que eles deverão retornar para serem considerados íntegros.

Outros recursos compatíveis com o balanceamento de carga UDP incluem o registro de transações em um log de acesso no estilo de servidor web, listas de controle de acesso baseadas em endereços IP e diversos recursos de limitação de taxa.

No NGINX Plus R9, as estatísticas de monitoramento de atividade em tempo real fornecidas pelo módulo Status incluirão métricas de UDP, e você poderá reconfigurar dinamicamente os grupos upstream de UDP, usando uma API baseada em HTTP e DNS, como já é possível fazer com servidores HTTP e TCP.

Casos de uso do balanceamento de carga UDP

O balanceamento de carga UDP atende a dois casos de uso principais: alta disponibilidade e escalabilidade horizontal. Por definição, o UDP não garante a entrega de dados de ponta a ponta e, portanto, exige que o software cliente lide com erros no nível da rede e retransmissões. Os protocolos baseados em UDP normalmente definem um par de servidores; se um cliente não conseguir se conectar ao servidor preferencial, deverá aguardar um período de tempo limite definido antes de tentar o outro servidor. Isso pode causar atrasos prolongados nas transações UDP.

A implantação do NGINX ou do NGINX Plus como um balanceador de carga confiável e de alta disponibilidade na frente dos seus servidores UDP pode eliminar ou reduzir atrasos desse tipo. Os clientes enviam solicitações UDP ao balanceador de carga NGINX ou NGINX Plus, que monitora a integridade e a disponibilidade dos servidores UDP e não envia solicitações a servidores com falha ou sobrecarregados. Os clientes não enfrentam falhas de conexão ou de solicitação e, portanto, não ficam sujeitos aos tempos limite associados às novas tentativas de solicitação.

Usar o NGINX ou o NGINX Plus como balanceador de carga também permite dimensionar uma aplicação UDP para lidar com tráfego intenso. Em uma implantação UDP típica, os clientes conhecem no máximo dois servidores UDP, mas o dimensionamento para atender a uma alta demanda exige muitos outros servidores UDP. Nesse cenário, os clientes enviam suas solicitações UDP para uma ou duas instâncias conhecidas do NGINX ou do NGINX Plus, que distribuem as solicitações entre o número maior de servidores UDP realmente necessário para processar a carga.

O balanceamento de carga UDP com o NGINX e o NGINX Plus é adequado para qualquer aplicação baseada em UDP que envie dados e, opcionalmente, espere uma ou mais respostas. O NGINX também pode balancear a carga de protocolos proprietários baseados em UDP, como os encontrados em ambientes de IoT.

Primeiros passos

O cronograma específico de disponibilização do balanceamento de carga UDP em nossas versões é o seguinte:

  • Hoje – Enviamos a primeira versão do código de balanceamento de carga UDP para o repositório de código aberto do software NGINX. Os primeiros usuários e aqueles que desejam testar nossa implementação podem clonar o código-fonte e compilar um binário do NGINX com recursos de balanceamento de carga UDP. Agradecemos seus comentários na lista de discussão do nginx.
  • Semana de 28 de março de 2016 – A versão 1.9.13 do NGINX será lançada e incluirá balanceamento de carga UDP (assim como os binários pré-compilados baseados nessa versão).
  • Abril de 2016 – o NGINX Plus Release 9 (R9) incluirá balanceamento de carga UDP. O NGINX Plus, nossa plataforma comercial de entrega de aplicações, ampliará os recursos de balanceamento de carga UDP da versão de código aberto com funcionalidades adicionais para criar e monitorar serviços baseados em UDP confiáveis e escaláveis.

O NGINX e o NGINX Plus oferecem uma plataforma completa de balanceamento de carga e entrega de aplicações para uma ampla variedade de protocolos de Internet. Seja para entregar aplicações baseadas em HTTP, aplicações TCP de nível mais baixo ou protocolos baseados em UDP, você pode contar com o NGINX e o NGINX Plus para oferecer alta disponibilidade, confiabilidade, escalabilidade e desempenho em uma única aplicação leve. Estamos muito entusiasmados com o novo recurso de balanceamento de carga UDP e com seu potencial para levar o balanceamento de carga de alto desempenho e a entrega impecável de aplicações a toda uma nova gama de dispositivos.

Quer se familiarizar com o NGINX Plus antes do lançamento do balanceamento de carga UDP na versão 9? Comece hoje mesmo sua avaliação gratuita de 30 dias ou entre em contato conosco para discutir seus casos de uso.


Compartilhar

Sobre o autor

Publicações relacionadas no blog

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade
NGINX | 10/10/2024

Como o F5 NGINX One aprimora o gerenciamento e a observabilidade

Descubra como o F5 NGINX One aprimora o gerenciamento e a observabilidade de ambientes híbridos e multicloud ao oferecer um console web centralizado baseado em SaaS, com insights em tempo real, conformidade automatizada e gerenciamento simplificado de configurações.

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa
NGINX | 17/06/2024

Do OpenAPI ao NGINX como gateway de API usando uma API declarativa

Descubra como transformar uma definição de esquema OpenAPI em uma configuração NGINX totalmente funcional, operando como um API Gateway com a segurança de um Web Application Firewall e um Portal do Desenvolvedor, usando uma abordagem declarativa de API.

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor
NGINX | 14/07/2021

Como gerenciar picos repentinos de tráfego e sobrecarga do servidor

Picos de tráfego e sobrecarga de servidores são preocupações sérias para varejistas online em qualquer época, mas especialmente durante a “Cyber Season” de compras de fim de ano. Detalhamos como você pode aproveitar as soluções de entrega de aplicações de nível de produção da NGINX para se preparar para aumentos repentinos de tráfego.

Distribuição segura de chaves privadas SSL com o NGINX
NGINX | 02/04/2019

Distribuição segura de chaves privadas SSL com o NGINX

Descrevemos três maneiras progressivamente mais seguras de proteger chaves privadas SSL ao configurar o NGINX para processar tráfego HTTPS: permitir acesso de leitura apenas ao usuário root, criptografar as chaves com senhas armazenadas separadamente e distribuir as senhas a partir de um repositório central.

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX
NGINX | 24/05/2018

Agrupando solicitações de API em lotes com NGINX Plus e o módulo JavaScript do NGINX

O módulo JavaScript do NGINX lançado com o NGINX Plus R15 oferece suporte a subsolicitações, possibilitando uma classe totalmente nova de casos de uso para o NGINX Plus. Este exemplo completo também usa a API do NGINX Plus e os módulos de chave-valor para converter solicitações de API dos clientes em solicitações separadas para as APIs dos microsserviços que compõem um aplicativo.

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus
NGINX | 19/04/2016

Como superar o esgotamento de portas efêmeras no NGINX e no NGINX Plus

Confira dicas para evitar o esgotamento de portas efêmeras com ajustes no kernel do Linux, conexões keepalive e conexões vinculadas dinamicamente a endereços IP locais.