O graceful shutdown é imperceptível para os consumidores da sua aplicação online, que continuam utilizando o serviço sem interrupções durante a reinicialização ou o encerramento. Por padrão, o Enterprise Distributed Application Service (EDAS) oferece suporte ao graceful shutdown para aplicações Spring Cloud. Não é necessário configurar o graceful shutdown para aplicações Spring Cloud.
Informações básicas
O graceful shutdown garante o processamento correto das requisições de serviço dos consumidores quando as aplicações são interrompidas. O ideal seria atualizar as aplicações de forma segura e confiável na ausência de requisições de serviço ativas. No entanto, essa situação é extremamente rara na prática.
Uma solução tradicional envolve executar manualmente as seguintes etapas: remover o tráfego, parar a aplicação, atualizá-la e reiniciá-la. Ao adotar esse método para atualizar sua aplicação, você mantém a continuidade dos negócios dos clientes.
Uma abordagem inovadora utiliza um mecanismo automatizado no nível do container ou do framework. Essa solução remove automaticamente o tráfego e processa todas as requisições recebidas, tornando o processo de atualização imperceptível para o seu negócio e aumentando a eficiência das tarefas de operação e manutenção. O graceful shutdown é um exemplo dessa solução inovadora.
Benefícios do graceful shutdown no EDAS
Ao utilizar a solução de graceful shutdown fornecida pelo Spring Cloud open source, é preciso usar shutdown hooks, Spring Boot Actuator e Ribbon. Essa abordagem exige esforço adicional de desenvolvimento e pode causar perda temporária de tráfego nos registros de serviço.
O EDAS integra o graceful shutdown ao processo de release para implementá-lo automaticamente quando você para, implanta, reverte, reduz horizontalmente ou redefine aplicações. Em comparação com o graceful shutdown do Spring Cloud open source, a implementação do EDAS oferece as seguintes vantagens.
Categoria | Spring Cloud open source | EDAS |
Versão | Ao chamar o ServiceRegistryEndpoint, use o Spring Boot Actuator e atualize-o para uma versão compatível com a versão do Spring Cloud em uso. | O EDAS suporta Spring Cloud Dalston ou superior. Nenhuma operação extra é necessária. |
Registro de serviço e perda de tráfego | O Spring Cloud open source depende de registros que podem causar perda de tráfego:
| O EDAS não depende de registros de serviço. Não ocorre perda de tráfego. |
Cenário |
| Encerre aplicações implantadas em clusters ECS e Kubernetes com graceful shutdown diretamente no console do EDAS. As operações e configurações das aplicações permanecem inalteradas. |
Cache do cliente | Configure um intervalo de tempo adequado para o Ribbon atualizar o cache nos clientes. Se o intervalo for muito longo, ocorrerá perda de tráfego durante o graceful shutdown. Se for muito curto, o desempenho do serviço será comprometido. | Durante o graceful shutdown, o EDAS fornece um mecanismo aprimorado para o Ribbon atualizar o cache nos clientes. O EDAS atualiza automaticamente o cache com base em um método de resposta reativa, eliminando a necessidade de atualização manual do cache. |
Verificar se o graceful shutdown está em vigor
Valide se o graceful shutdown funciona nas suas aplicações conforme as necessidades do seu negócio. O EDAS fornece as seguintes aplicações de demonstração: Provider e Consumer. Use essas demos em um cluster Container Service for Kubernetes (ACK) para confirmar se o graceful shutdown está ativo.
Procedimento
-
Implante o Provider e o Consumer em um cluster ACK.
O Provider tem duas instâncias implantadas e o Consumer tem uma instância implantada. Para mais informações sobre como implantar as aplicações de demonstração, consulte Implantar aplicações.

-
Visualize o status das chamadas iniciadas pelo Consumer para o Provider.
-
Acesse o pod onde o Consumer está implantado e execute os comandos abaixo para acessar continuamente os serviços do Provider:
#!/usr/bin/env bash while true do echo `curl -s -XGET http://localhost:18091/user/rest` done -
Verifique as respostas das chamadas.

As respostas acima indicam que o Consumer acessa aleatoriamente duas instâncias do Provider. Os endereços IP das instâncias são 172.20.0.221 e 172.20.0.223.
ImportanteNão feche a janela de resposta.
-
Reduza horizontalmente uma instância do Provider e reinicie-a. Para mais detalhes, consulte Gerenciamento do ciclo de vida de aplicações em clusters Kubernetes.
-
Analise novamente as respostas das chamadas para confirmar se o graceful shutdown está funcionando.

Examine o status das chamadas do Consumer para validar o graceful shutdown. Consulte também os logs do Consumer. Se os logs não apresentarem exceções, a indisponibilidade da instância foi imperceptível para o Consumer.
As respostas acima mostram que o Consumer acessa apenas a instância restante do Provider, cujo endereço IP é 172.20.0.221. Durante todo o processo de acesso, nenhuma exceção de chamada ocorreu e o Consumer não foi impactado.