
Digamos que temos uma configuração de implantação azul/verde bastante padrão. O NGINX está atualmente fazendo proxy de todo o tráfego para o servidor ativo (AZUL). Em seguida, implantamos uma versão atualizada do nosso código no servidor inativo (VERDE). Por fim, atualizamos a configuração do NGINX para que todo o tráfego HTTP seja roteado para GREEN.
Pelo que entendi, o NGINX lidará com essa recarga normalmente. Todas as solicitações HTTP futuras serão roteadas para GREEN e todas as solicitações HTTP pendentes que chegarem a BLUE serão tratadas por BLUE.
Mas e os WebSockets? Digamos que o BLUE tivesse dez conexões WebSocket ativas quando a configuração foi recarregada. O que aconteceu com eles?
Pelo que entendi na documentação do NGINX, as conexões serão encerradas em 60 segundos se nenhum dado novo for enviado.
No entanto, se os clientes estiverem usando algum tipo de keep-alive ou ping, imagino que as conexões WebSocket serão mantidas indefinidamente, mesmo que o BLUE não esteja mais atendendo a nenhum outro tráfego HTTP.
Minha intuição está certa aqui? Nesse caso, imagino que o BLUE precise fechar as conexões sozinho ou o código do lado do cliente, a menos que o NGINX tenha um recurso que estou faltando.
Responder1
Correto, as conexões serão mantidas indefinidamente. Há uma diretiva especial para lidar com esses casos:
https://nginx.org/en/docs/ngx_core_module.html#worker_shutdown_timeout