Todos os produtos
Search
Central de documentação

Enterprise Distributed Application Service:Encerrar aplicações Spring Cloud com graceful shutdown

Última atualização: Jun 26, 2026

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:

  • Registros ZooKeeper não causam perda de tráfego.

  • Registros Eureka causam perda de tráfego por três segundos.

  • Registros Nacos podem causar perda de tráfego por até 10 segundos devido ao cache nos clientes.

O EDAS não depende de registros de serviço. Não ocorre perda de tráfego.

Cenário

  • Para encerrar com graceful shutdown uma aplicação implantada em um cluster Elastic Compute Service (ECS), visualize os detalhes da alteração da aplicação.

  • Para encerrar com graceful shutdown uma aplicação implantada em um cluster Container Service for Kubernetes, chame o prestop. Contudo, configure apenas uma ação para o prestop.

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

  1. Baixe as aplicações de demonstração Provider e Consumer.

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

    Image - Deploy an application

  3. Visualize o status das chamadas iniciadas pelo Consumer para o Provider.

    1. 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
    2. Verifique as respostas das chamadas.

      Image - Successful call responses

      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.

      Importante

      Não feche a janela de resposta.

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

  5. Analise novamente as respostas das chamadas para confirmar se o graceful shutdown está funcionando.

    Image - Call responses - Graceful shutdown

    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.