BLOG | NGINX

Anunciando o balanceamento de carga UDP no NGINX e NGINX Plus

NGINX-Parte-de-F5-horiz-preto-tipo-RGB
Miniatura de Faisal Memon
Faisal Memon
Publicado em 15 de março de 2016

Temos orgulho de anunciar a adição de um novo recurso interessante ao NGINX Open Source e à nossa plataforma de entrega de aplicativos, NGINX Plus – balanceamento de carga UDP. O novo recurso se baseia em nossos recursos TCP e HTTP existentes, tornando o NGINX um frontend poderoso, fácil de usar e consistente para uma gama ainda maior de aplicativos e dispositivos de Internet. Estamos entusiasmados em estender os recursos de balanceamento de carga que alimentam mais da metade dos aplicativos mais movimentados do mundo para um novo conjunto de usuários que estão construindo a Internet das Coisas (IoT).

Por que adicionar suporte para balanceamento de carga UDP?

A maioria dos aplicativos de Internet depende de HTTP para comunicação de rede. Protocolos avançados como SOAP e REST são criados com base no HTTP, que pode aproveitar uma série de extensões avançadas – segurança usando TLS, compactação usando Gzip e melhorias de desempenho usando HTTP/2 .

No entanto, muitos aplicativos precisam usar vários protocolos para diferentes propósitos, e muitos dos principais protocolos da Internet são anteriores ao HTTP. Por esse motivo, uma solução completa para 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 para protocolos leves que não são transacionais por natureza, como DNS (usado para resolver nomes de domínio em endereços), syslog (usado para registro leve) e RADIUS (usado para autenticação). Esses protocolos não têm requisitos rígidos de confiabilidade – se uma mensagem UDP ( datagrama ) for descartada, o cliente pode reenviar a mensagem com segurança após um tempo limite – mas os serviços que eles fornecem são essenciais para a operação correta dos serviços de Internet. O UDP também está emergindo como um dos protocolos de escolha para novas aplicações de IoT devido aos seus baixos requisitos de largura de banda.

Há um ano, o NGINX introduziu 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 o 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.

Quanto ao balanceamento de carga HTTP e TCP, a configuração para 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 ao balancear a carga do tráfego entre os servidores (por exemplo, Round Robin, Least Connections ou Hash com base no endereço IP de origem). A configuração também define um servidor virtual para cada porta UDP, com uma diretiva proxy_pass nomeando o grupo upstream que fornece o serviço associado:

# Balancear a carga do tráfego DNS baseado em UDP em dois servidoresstream {
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 (aqui, uma consulta DNS na porta 53), ele usa o algoritmo de balanceamento de carga configurado (aqui, o Round Robin padrão) para selecionar qual servidor no 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 "falha" e interromperá temporariamente o envio de datagramas para ele. A cada poucos segundos, o NGINX verifica a integridade do servidor para ver se ele se recuperou, enviando uma pequena quantidade de tráfego ativo.

O NGINX Plus R9 incluirá verificações de integridade de aplicativos (também chamados de 'assíncronos' ou 'sintéticos') para serviços UDP, semelhantes aos do 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 os servidores devem retornar para serem considerados íntegros.

Outros recursos suportados pelo balanceamento de carga UDP incluem registro de transações em um log de acesso no estilo servidor web , listas de controle de acesso baseadas em endereço IP e uma variedade de recursos de limitação de taxa.

No NGINX Plus R9, as estatísticas de monitoramento de atividades ao vivo fornecidas pelo módulo Status incluirão métricas UDP, e você poderá reconfigurar grupos upstream UDP imediatamente , usando uma API baseada em HTTP e DNS, como você pode fazer atualmente com servidores HTTP e TCP.

Casos de uso para balanceamento de carga UDP

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

A implantação do NGINX ou NGINX Plus como um balanceador de carga altamente disponível e confiável na frente de 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 para servidores com falha ou sobrecarregados. Os clientes não sofrem falhas de conexão ou solicitação e, portanto, não sofrem os tempos limite associados à repetição de solicitações.

Usar o NGINX ou o NGINX Plus como balanceador de carga também possibilita dimensionar um aplicativo UDP para lidar com tráfego pesado. Em uma implantação UDP típica, os clientes estão cientes de no máximo dois servidores UDP, mas a expansão para atender à alta demanda requer muito mais servidores UDP. Nesse cenário, os clientes enviam suas solicitações UDP para uma ou duas instâncias conhecidas do NGINX ou NGINX Plus, que balanceiam a carga das solicitações entre o maior número de servidores UDP realmente necessários para lidar com a carga.

O balanceamento de carga UDP com NGINX e NGINX Plus é adequado para qualquer aplicativo baseado 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 aqueles encontrados em ambientes de IoT.

Primeiros passos

O momento específico de disponibilidade do balanceamento de carga UDP em nossas versões é o seguinte:

  • Hoje – Nós enviamos a primeira versão do código para balanceamento de carga UDP para o repositório de software NGINX de código aberto. Os primeiros usuários e aqueles que desejam testar nossa implementação podem clonar o código-fonte e criar um binário NGINX com recursos de balanceamento de carga UDP. Agradecemos seu feedback sobre a 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 com base nessa versão).
  • Abril de 2016 – O NGINX Plus Release 9 (R9) incluirá balanceamento de carga UDP. O NGINX Plus, nossa plataforma de entrega de aplicativos comerciais, estenderá os recursos de balanceamento de carga UDP em código aberto com recursos adicionais para criar e monitorar serviços baseados em UDP confiáveis e escaláveis.

O NGINX e o NGINX Plus fornecem uma plataforma completa de balanceamento de carga e entrega de aplicativos para uma ampla gama de protocolos de Internet. Quer você esteja entregando aplicativos baseados em HTTP, aplicativos TCP de nível inferior ou protocolos baseados em UDP, você pode contar com o NGINX e o NGINX Plus para fornecer alta disponibilidade, confiabilidade, escalabilidade e desempenho em um único aplicativo leve. Estamos muito animados com o novo recurso de balanceamento de carga UDP e seu potencial para levar balanceamento de carga de alto desempenho e entrega perfeita de aplicativos para um novo conjunto 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 seu teste gratuito de 30 dias ou entre em contato conosco para discutir seus casos de uso .


"Esta postagem do blog pode fazer referência a produtos que não estão mais disponíveis e/ou não têm mais suporte. Para obter as informações mais atualizadas sobre os produtos e soluções F5 NGINX disponíveis, explore nossa família de produtos NGINX . O NGINX agora faz parte do F5. Todos os links anteriores do NGINX.com redirecionarão para conteúdo semelhante do NGINX no F5.com."