No post do blog, NGINX como proxy WebSocket discutimos o uso do NGINX como proxy para servidores de aplicações WebSocket. Neste post, abordaremos algumas questões de arquitetura e infraestrutura que devem ser consideradas ao criar aplicações em tempo real com WebSocket, incluindo os componentes necessários e como estruturar seus sistemas.
WebSocket adiciona interatividade ao HTTP
O HTTP funciona bem para aplicações web baseadas em solicitação e resposta, nas quais o fluxo de comunicação sempre começa com o cliente enviando uma solicitação, à qual um servidor de backend responde. Aplicações web com uma interação mais dinâmica e baseada em mensagens entre o cliente e o servidor precisam de algo além do HTTP simples. As tentativas anteriores de simular uma comunicação full-duplex por HTTP eram complexas e apresentavam muitas desvantagens. O protocolo WebSocket, juntamente com a interface JavaScript WebSocket, oferece uma maneira muito mais fácil de desenvolver esses tipos de aplicação, além de reduzir a quantidade de dados transferidos e a latência.
A capacidade de criar uma conexão de soquete full-duplex entre o cliente e o servidor permite o desenvolvimento de aplicações web em tempo real orientadas a eventos que utilizam comunicações por push, polling ou streaming. Com o WebSocket, tanto o cliente quanto o servidor podem iniciar a comunicação após o estabelecimento da conexão. Isso possibilita diversos tipos de aplicações web, incluindo jogos online, chats, acompanhamento de ações e atualização de placares esportivos em tempo real.
Outro caso de uso do WebSocket é o desenvolvimento de aplicações baseadas em WebRTC. O WebRTC é usado para criar aplicações que permitem a comunicação entre navegadores. Ele requer um canal de sinalização separado para estabelecer as comunicações, e o WebSocket é um bom protocolo para essa finalidade.
Requisitos técnicos para uma aplicação WebSocket
A infraestrutura mínima necessária para uma aplicação web WebSocket consiste em um navegador cliente executando uma aplicação JavaScript WebSocket e se comunicando com um servidor WebSocket. As versões recentes de todos os principais navegadores já oferecem suporte a WebSocket, mas é importante garantir que os clientes tenham um navegador compatível com WebSocket. Há muitas opções de servidores WebSocket. Veja alguns exemplos para diferentes ambientes (esta lista é fornecida para sua conveniência e não constitui um endosso da NGINX, Inc.):
Escalabilidade do WebSocket para grandes volumes de tráfego
É possível usar um único servidor WebSocket, mas o desempenho da aplicação fica limitado à capacidade desse servidor, que também representa um ponto único de falha. Muitas aplicações em tempo real são desenvolvidas com a expectativa de alcançar ampla adoção, mas pode ser difícil prever o ritmo de crescimento. Para acompanhar a crescente popularidade de uma aplicação em tempo real, a infraestrutura deve ser capaz de:
- Escalar para comportar um grande número de usuários simultâneos
- Oferecer baixa latência ao processar as comunicações entre cliente e servidor
- Oferecer alta disponibilidade (o que implica não haver um ponto único de falha)
- Permitir que a configuração seja alterada facilmente e se adapte a mudanças nas condições
Isso pode ser feito colocando o NGINX à frente dos servidores WebSocket e HTTP (já que a maioria das aplicações WebSocket também usa HTTP), para atuar como proxy reverso compatível com WebSocket e balanceador de carga. Nem todos os proxies reversos oferecem suporte direto ao WebSocket. Alguns, como o Elastic Load Balancing (ELB) no ambiente da Amazon Web Services (AWS), precisam operar no modo TCP, o que significa que não conseguem processar cabeçalhos HTTP. O Proxy Protocol foi desenvolvido para contornar essa limitação e também é compatível com o NGINX, o que significa que o WebSocket tem suporte completo na AWS. Usar o NGINX como proxy reverso para WebSocket oferece benefícios adicionais, como flexibilidade de roteamento e a possibilidade de fazer com que o NGINX encerre conexões SSL.
Uma configuração típica de WebSocket usando o NGINX pode ser semelhante a esta:

Aqui, mostramos diversos clientes para desktop e dispositivos móveis conectados a um par de servidores NGINX de alta disponibilidade, que distribuem a carga entre um conjunto de servidores HTTP e WebSocket. Esse tipo de configuração é capaz de lidar com a falha de um servidor WebSocket ou NGINX, além de permitir que você adicione ou remova servidores WebSocket com facilidade. Além disso, todos os detalhes de roteamento para conexão com os servidores WebSocket ficam ocultos dos clientes, proporcionando uma infraestrutura robusta e escalável para aplicações WebSocket. O desempenho e a confiabilidade da Web são essenciais para aplicações Web em tempo real. Entre em contato conosco hoje mesmo para saber como o NGINX Plus pode ajudar a melhorar o desempenho, a confiabilidade e a disponibilidade das suas aplicações.
Para mais informações, consulte:
- NGINX como proxy WebSocket
- Desempenho do WebSocket no NGINX
- Proxy reverso de WebSocket no nginx.org
- Comparação de recursos do NGINX e do NGINX Plus
- Especificações técnicas do NGINX Plus
Sobre o autor

Publicações relacionadas no blog

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
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
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
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
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
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.