Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia descreve o que você deve estar ciente quando deseja migrar um aplicativo spring cloud existente para ser executado no Azure Container Apps.
Pré-migração
Antes de tudo, para garantir uma migração bem-sucedida, conclua as etapas de avaliação e de inventário descritas nas seções a seguir.
Se você não puder atender a nenhum desses requisitos de pré-migração, confira os seguintes guias de migração complementares:
- Migrar aplicativos JAR executáveis para contêineres em Azure Kubernetes Service (diretrizes planejadas)
- Migrar aplicativos JAR executáveis para Azure Virtual Machines (diretrizes planejadas)
Inspecionar os componentes de aplicativo
Determinar se e como o sistema de arquivos é usado
Localize instâncias nas quais os serviços gravem e/ou leiam do sistema de arquivos local. Identifique onde os arquivos de curto prazo/temporários são gravados e lidos e onde os arquivos de longa duração são gravados e lidos.
Azure Container Apps oferece vários tipos de armazenamento. O armazenamento temporário pode ler e gravar dados temporários e estar disponível para um contêiner ou réplica em execução. Azure Arquivo fornece armazenamento permanente e pode ser compartilhado entre vários contêineres. Para obter mais informações, consulte Use pontos de montagem de armazenamento no Azure Container Apps.
Conteúdo estático de leitura apenas
Se seu aplicativo estiver servindo conteúdo estático no momento, você precisará de um local alternativo para ele. Talvez você queira considerar mover conteúdo estático para Azure Blob Storage e adicionar Azure CDN para downloads rápidos globalmente. Para obter mais informações, consulte Hospedagem de site estático no Azure Storage e Introdução rápida: Integre uma conta de armazenamento do Azure com o Azure CDN.
Conteúdo estático publicado dinamicamente
Se o aplicativo der suporte a conteúdo estático, seja carregado ou gerado pelo próprio aplicativo, que permanecerá inalterado após sua criação, você poderá integrar Azure Blob Storage e Azure CDN. Você também pode usar uma função Azure para gerenciar uploads e disparar atualizações de CDN quando necessário. Fornecemos uma implementação de exemplo para seu uso em Fazer upload e pré-carregamento de conteúdo via CDN com Azure Functions.
Determinar se algum dos serviços contém o código específico do SO
Se seu aplicativo contiver qualquer código com dependências do sistema operacional do host, você precisará refatorá-lo para remover essas dependências. Por exemplo, talvez seja necessário substituir qualquer uso de / ou \ em caminhos do sistema de arquivos por File.Separator ou Paths.get se o aplicativo estiver em execução no Windows.
Alternar para uma plataforma compatível
Se você criar seu Dockerfile manualmente e implantar um aplicativo em contêiner no Azure Container Apps, você terá controle total sobre a sua implantação, incluindo versões JRE/JDK.
Para a implantação a partir de artefatos, o Azure Container Apps também oferece versões específicas de Java (8, 11, 17 e 21) e versões específicas dos componentes Spring Boot e Spring Cloud. Para garantir a compatibilidade, primeiro migre seu aplicativo para uma das versões com suporte do Java em seu ambiente atual e, em seguida, prossiga com as etapas de migração restantes. É necessário testar completamente a configuração resultante. Use a versão estável mais recente da sua distribuição do Linux nesses testes.
Observação
Essa validação é especialmente importante se o servidor atual estiver sendo executado em um JDK não compatível (como Oracle JDK ou IBM OpenJ9).
Para obter a versão atual do Java, entre no servidor de produção e execute o seguinte comando:
java -version
Para versões com suporte do Java, Spring Boot e Spring Cloud, bem como instruções para atualização, consulte Java em Azure Container Apps visão geral.
Identificar as versões do Spring Boot
Examine as dependências de cada aplicativo que está sendo migrado para determinar a versão do Spring Boot.
Maven
Em projetos do Maven, a versão do Spring Boot normalmente é encontrada no <parent> elemento do arquivo POM:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.3.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
Gradle
Em projetos do Gradle, a versão do Spring Boot normalmente será encontrada na plugins seção, como a versão do org.springframework.boot plug-in:
plugins {
id 'org.springframework.boot' version '3.3.3'
id 'io.spring.dependency-management' version '1.1.6'
id 'java'
}
Para todos os aplicativos que usam versões do Spring Boot antes do 3.x, siga o guia de migração do Spring Boot 2.0 ou o Guia de Migração do Spring Boot 3.0 para atualizá-los para uma versão do Spring Boot com suporte. Para versões com suporte, consulte a documentação do Spring Cloud .
Identificar as versões do Spring Cloud
Examine as dependências de cada aplicativo que você está migrando para determinar a versão dos componentes do Spring Cloud usados.
Maven
Em projetos do Maven, a versão do Spring Cloud normalmente é definida na spring-cloud.version propriedade:
<properties>
<spring-cloud.version>2023.0.2</spring-cloud.version>
</properties>
Gradle
Em projetos Gradle, a versão do Spring Cloud é normalmente definida no bloco “propriedades extras”:
ext {
set('springCloudVersion', "2023.0.2")
}
Você precisa atualizar todos os aplicativos para usar as versões com suporte do Spring Cloud. Para versões com suporte, consulte a documentação do Spring Cloud .
Identificar as soluções de agregação de log
Identifique as soluções de agregação de log em uso pelos aplicativos que você está migrando. Você precisa definir as configurações de diagnóstico na migração para disponibilizar eventos registrados para consumo. Para obter mais informações, consulte Garantir o registro em log do console e definir a seção de configurações de diagnóstico .
Identificar os agentes de APM (gerenciamento de desempenho de aplicativo)
Identifique os agentes de gerenciamento de desempenho de aplicativos usados por seus aplicativos. Azure Container Apps não oferece suporte nativo para integração com APM. Você precisa preparar sua imagem de contêiner ou integrar a ferramenta APM diretamente ao seu código. Se você quiser medir o desempenho do aplicativo, mas ainda não tiver integrado nenhum APM, considere usar Azure Application Insights. Para obter mais informações, consulte a seção Migração .
Recursos externos de inventário
Identifique recursos externos, como fontes de dados, agentes de mensagens JMS e URLs de outros serviços. Em aplicativos Spring Cloud, normalmente é possível encontrar a configuração desses recursos em uma das seguintes localizações:
- Na pasta src/main/resources , em um arquivo normalmente chamado application.properties ou application.yml.
- No repositório do Spring Cloud Config Server que você identificou na etapa anterior.
Bancos de dados
Para um aplicativo Spring Boot, as cadeias de conexão geralmente aparecem em arquivos de configuração quando dependem de um banco de dados externo. Aqui está um exemplo de um arquivo application.properties :
spring.datasource.url=jdbc:mysql://localhost:3306/mysql_db
spring.datasource.username=dbuser
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
Aqui está um exemplo de um arquivo application.yaml :
spring:
data:
mongodb:
uri: mongodb://mongouser:deepsecret@mongoserver.contoso.com:27017
Confira a documentação do Spring Data para obter mais cenários de configuração possíveis:
Agentes de mensagem JMS
Identifique o agente ou os agentes em uso examinando o manifesto de construção (normalmente, um arquivo pom.xml ou build.gradle) para identificar as dependências relevantes.
Por exemplo, um aplicativo Spring Boot usando o ActiveMQ normalmente conteria essa dependência em seu arquivo depom.xml :
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
Os aplicativos Spring Boot que usam agentes comerciais normalmente contêm dependências diretamente nas bibliotecas de driver JMS dos agentes. Aqui está um exemplo de um arquivo build.gradle :
dependencies {
...
compile("com.ibm.mq:com.ibm.mq.allclient:9.4.0.5")
...
}
Depois de identificar os agentes em uso, localize as configurações correspondentes. Em aplicativos spring cloud, você normalmente pode encontrá-los nos arquivos application.properties e application.yml no diretório do aplicativo ou no repositório Spring Cloud Config Server.
Observação
A Microsoft recomenda usar o fluxo de autenticação mais seguro disponível. O fluxo de autenticação descrito neste procedimento, como bancos de dados, caches, mensagens ou serviços de IA, requer um grau muito alto de confiança no aplicativo e traz riscos não presentes em outros fluxos. Use esse fluxo somente quando opções mais seguras, como identidades gerenciadas para conexões sem senha ou sem chave, não forem viáveis. Para operações de computador local, prefira identidades de usuário para conexões sem senha ou sem chave.
Aqui está um exemplo do ActiveMQ de um arquivo application.properties :
spring.activemq.brokerurl=broker:(tcp://localhost:61616,network:static:tcp://remotehost:61616)?persistent=false&useJmx=true
spring.activemq.user=admin
spring.activemq.password=<password>
Para obter mais informações sobre a configuração do ActiveMQ, consulte a documentação de mensagens do Spring Boot.
Aqui está um exemplo do IBM MQ de um arquivo application.yaml :
ibm:
mq:
queueManager: qm1
channel: dev.ORDERS
connName: localhost(14)
user: admin
password: <password>
Para obter mais informações sobre a configuração do IBM MQ, consulte a documentação de componentes do IBM MQ Spring.
Identificar os caches externos
Identifique os caches externos em uso. Frequentemente, o Redis é usado por meio do Spring Data Redis. Para obter informações de configuração, consulte a documentação do Spring Data Redis .
Determine se os dados de sessão estão sendo armazenados em cache por meio de Spring Session pesquisando a respectiva configuração (em Java ou XML).
Provedores de identidade
Identifique todos os provedores de identidade e todos os aplicativos Spring Cloud que requerem autenticação e/ou autorização. Para obter informações sobre como configurar provedores de identidade, veja os seguintes recursos:
- Para a configuração do OAuth2, consulte o início rápido do Spring Cloud Security.
- Para a configuração do Auth0 Spring Security, consulte a documentação do Auth0 Spring Security.
- Para a configuração do PingFederate Spring Security, consulte as instruções do Auth0 para PingFederate.
Recursos configurados por meio do VMware TAS (Tanzu Application Service) (antigo Pivotal Cloud Foundry)
Para os aplicativos gerenciados com o TAS, os recursos externos, incluindo aqueles descritos anteriormente, são geralmente configurados por meio de associações de serviço do TAS. Para examinar a configuração desses recursos, use a CLI do TAS (Cloud Foundry) para exibir a VCAP_SERVICES variável para o aplicativo.
# Log into TAS, if needed (enter credentials when prompted)
cf login -a <API endpoint>
# Set the organization and space containing the application, if not already selected during login.
cf target org <organization name>
cf target space <space name>
# Display variables for the application
cf env <Application Name>
Examine a VCAP_SERVICES variável para definir as configurações de serviços externos associados ao aplicativo. Para obter mais informações, consulte a documentação do TAS (Cloud Foundry).
Todos os outros recursos externos
É inviável que este guia documente todas as dependências externas possíveis. Após a migração, é sua responsabilidade verificar se você pode satisfazer todas as dependência externas do aplicativo.
Inventariar as fontes de configuração e segredos
Inventariar as senhas e cadeias de caracteres seguras
Verifique todas as propriedades e os arquivos de configuração, assim como as variáveis de ambiente, nas implantações de produção em busca de senhas e cadeias de caracteres secretas. Em um aplicativo spring cloud, normalmente você pode encontrar essas cadeias de caracteres no arquivo application.properties ou application.yml em serviços individuais ou no repositório Spring Cloud Config Server.
Certificados de inventário
Documente todos os certificados usados para endpoints públicos de SSL ou para comunicação com bancos de dados de back-end e outros sistemas. Você pode exibir todos os certificados nos servidores de produção executando o seguinte comando:
keytool -list -v -keystore <path to keystore>
Determinar se o Spring Cloud Vault é usado
Se você usar o Spring Cloud Vault para armazenar e acessar segredos, identifique o repositório de segredos de backup – por exemplo, HashiCorp Vault ou CredHub. Em seguida, identifique todos os segredos usados pelo código de aplicativo.
Localize a origem do servidor de configuração
Se o aplicativo usar um Servidor de Configuração do Spring Cloud, identifique onde a configuração está armazenada. Normalmente, você encontra essa configuração no arquivo bootstrap.yml ou bootstrap.properties ou, às vezes, no arquivo application.yml ou application.properties . A configuração será semelhante ao exemplo a seguir:
spring.cloud.config.server.git.uri: file://${user.home}/spring-cloud-config-repo
Embora o Git seja usado com mais frequência como o armazenamento de dados de backup do Spring Cloud Config Server, como mostrado anteriormente, um dos outros back-ends possíveis pode estar em uso. Consulte a documentação do Spring Cloud Config Server para obter informações sobre outros back-ends, como Banco de Dados Relacional (JDBC),SVN e o sistema de arquivos local.
Inspecionar a arquitetura de implantação
Documentar os requisitos de hardware para cada serviço
Para cada um dos serviços do Spring Cloud (não incluindo o servidor de configuração, o registro nem o gateway), documente as seguintes informações:
- O número de instâncias em execução.
- O número de CPUs alocadas para cada instância.
- A quantidade de RAM alocada para cada instância.
Documentar a replicação geográfica/distribuição
Determine se os aplicativos Spring Cloud estão atualmente distribuídos entre várias regiões ou datacenters. Documente os requisitos de tempo de atividade/SLA (Contrato de Nível de Serviço) para os aplicativos que você está migrando.
Identificar os clientes que ignoram o registro de serviço
Identifique aplicativos cliente que invoquem qualquer um dos serviços a serem migrados sem usar o Spring Cloud Service Registry. Após a migração, essas invocações não serão mais possíveis. Atualize esses clientes para usar o Spring Cloud OpenFeign antes da migração.
Migração
Remover configurações restritas
O ambiente Azure Container Apps oferece servidor Eureka gerenciado, Servidor de Configuração do Spring Cloud e Administrador. Quando um aplicativo é associado ao componente Java, Azure Container Apps injeta propriedades relacionadas como variáveis de ambiente do sistema. De acordo com o design da Configuração Externalizada do Spring Boot , as propriedades do aplicativo definidas em seu código ou empacotadas em artefatos são substituídas por variáveis de ambiente do sistema.
Se você definir uma das seguintes propriedades por meio do argumento de linha de comando, uma propriedade do sistema Java ou a variável de ambiente do contêiner, você deverá removê-la para evitar conflitos e comportamento inesperado:
SPRING_CLOUD_CONFIG_COMPONENT_URISPRING_CLOUD_CONFIG_URISPRING_CONFIG_IMPORTeureka.client.fetch-registryeureka.client.service-url.defaultZoneeureka.instance.prefer-ip-addresseureka.client.register-with-eurekaSPRING_BOOT_ADMIN_CLIENT_INSTANCE_PREFER-IPSPRING_BOOT_ADMIN_CLIENT_URL
Criar um ambiente gerenciado Azure Container Apps e aplicativos
Provisione um aplicativo Azure Container Apps em sua assinatura Azure em um ambiente gerenciado existente ou crie um novo para cada serviço que você está migrando. Você não precisa criar aplicativos que sejam executados como servidores de configuração e registro do Spring Cloud. Para obter mais informações, consulte Quickstart: implantar seu primeiro aplicativo de contêiner usando o portal Azure.
Preparar o Spring Cloud Config Server
Configure o servidor de configuração em seu Azure Container Apps para o componente Spring. Para obter mais informações, consulte Configurações do Config Server for Spring component in Azure Container Apps.
Observação
Se o seu repositório atual do Spring Cloud Config estiver no sistema de arquivos local ou nas instalações, primeiro você precisará migrar ou replicar seus arquivos de configuração para um repositório na nuvem, como GitHub, Azure Repos ou BitBucket.
Garantir o registro em log do console e configurar as configurações de diagnóstico
Configure o log para garantir que toda a saída seja roteada para o console e não para arquivos.
Depois que um aplicativo é implantado no Azure Container Apps, você pode configurar as opções de logging em seu ambiente de Azure Container Apps para definir um ou mais destinos dos logs. Esses destinos podem incluir Azure Monitor Log Analytics, Azure Hub de Eventos ou até mesmo outras soluções de monitoramento de terceiros. Você também tem a opção de desabilitar dados de log e exibir os logs somente durante o tempo de execução. Para obter instruções detalhadas de configuração, consulte Opções de armazenamento e monitoramento de logs em Azure Container Apps.
Configurar um armazenamento persistente
Se qualquer parte do aplicativo ler ou gravar no sistema de arquivos local, você precisará configurar o armazenamento persistente para substituir o sistema de arquivos local. Você pode especificar o caminho para montar no contêiner por meio das configurações do aplicativo e alinhá-lo com o caminho que seu aplicativo está usando. Para obter mais informações, consulte Use pontos de montagem de armazenamento no Azure Container Apps.
Migrar segredos do Spring Cloud Vault para Azure KeyVault
Você pode injetar segredos diretamente em aplicativos por meio do Spring usando o Azure KeyVault Spring Boot Starter. Para obter mais informações, consulte Como usar o Spring Boot Starter para Azure Key Vault.
Observação
A migração pode requerer que você renomeie alguns segredos. Atualize o código do aplicativo de acordo.
Migrar todos os certificados para o Key Vault
Azure Aplicativos de Contêineres dá suporte à comunicação segura entre aplicativos. Seu aplicativo não precisa gerenciar o processo de estabelecer comunicação segura. Você pode carregar o certificado privado para Azure Container Apps ou usar um certificado gerenciado gratuito fornecido pelo Azure Container Apps. Usar Azure Key Vault para gerenciar certificados é uma abordagem recomendada. Para obter mais informações, consulte Certificates no Azure Container Apps.
Configurar as integrações de APM (gerenciamento de desempenho de aplicativos)
Se você já configurou variáveis relacionadas ao APM no contêiner, tudo o que você precisa fazer é garantir que seja possível estabelecer a conexão com a plataforma APM de destino. Se a configuração do APM fizer referência a variáveis de ambiente do contêiner, você precisará definir as variáveis de ambiente de runtime adequadamente em Azure Container Apps. Informações confidenciais, como o connection string, devem ser tratadas com segurança. Você pode especificá-lo como um segredo ou referenciar um segredo armazenado em Azure Key Vault.
Configurar os segredos por serviço e definir as configurações externas
Você pode injetar as definições de configuração em cada contêiner como variáveis de ambiente. Qualquer alteração nas variáveis cria uma nova revisão para o aplicativo existente. Os segredos são pares chave-valor e permanecem válidos em todas as revisões.
Migrar e habilitar o provedor de identidade
Se qualquer um dos aplicativos Spring Cloud requerer autenticação ou autorização, use as diretrizes a seguir para garantir que os aplicativos foram configurados para acessar o provedor de identidade:
- Se o provedor de identidade for Microsoft Entra ID, nenhuma alteração deverá ser necessária.
- Se o provedor de identidade for uma floresta do Active Directory local, considere implementar uma solução de identidade híbrida com a Microsoft Entra ID. Para obter diretrizes, consulte a documentação de identidade híbrida.
- Se o provedor de identidade for outra solução local, como PingFederate, consulte o tópico Instalação personalizada do Microsoft Entra Connect para configurar a federação na Microsoft Entra ID. Como alternativa, considere usar o Spring Security para usar seu provedor de identidade por meio do OAuth2/OpenID Connect ou SAML.
Atualizar aplicativos cliente
Atualize a configuração de todos os aplicativos cliente para usar os endpoints publicados do Azure Container Apps para os aplicativos migrados.
Após a migração
Agora que você concluiu a migração, confirme se o aplicativo funciona conforme o esperado. Em seguida, você pode tornar seu aplicativo mais nativo de nuvem usando as recomendações a seguir.
Considere a possibilidade de habilitar seu aplicativo para que ele funcione com o Registro do Spring Cloud. Esse componente permite que o aplicativo seja descoberto dinamicamente por outros aplicativos e clientes Spring implantados. Para obter mais informações, consulte Configurações de configuração para o componente Eureka Server for Spring em Azure Container Apps. Em seguida, modifique todos os clientes de aplicativo para usar o Load Balancer do Spring Client. O spring client Load Balancer permite que o cliente obtenha endereços de todas as instâncias em execução do aplicativo e localize uma instância que funcione se outra instância ficar corrompida ou sem resposta. Para obter mais informações, consulte Spring Tips: Spring Cloud Load Balancer no Spring Blog.
Em vez de tornar seu aplicativo público, considere adicionar uma instância do Spring Cloud Gateway . O Spring Cloud Gateway fornece um único ponto de extremidade para todos os aplicativos implantados em seu ambiente de Azure Container Apps. Se um Spring Cloud Gateway já estiver implantado, verifique se uma regra de roteamento está configurada para rotear o tráfego para o aplicativo recém-implantado.
Considere a possibilidade de adicionar um Config Server do Spring Cloud para gerenciar de maneira centralizada a configuração e fazer o controle de versão dela para todos os aplicativos do Spring Cloud. Primeiro, crie um repositório Git para hospedar a configuração e configure a instância do aplicativo para usá-la. Para obter mais informações, consulte Configurações do Config Server for Spring component in Azure Container Apps. Em seguida, migre sua configuração usando as seguintes etapas:
Dentro do diretório src/main/resources do aplicativo, crie um arquivo bootstrap.yml com o seguinte conteúdo:
spring: application: name: <your-application-name>No repositório Git de configuração, crie um arquivo <seu-nome-do-aplicativo>.yml, onde
your-application-nameé o mesmo que na etapa anterior. Mova as configurações de application.yml arquivo em src/main/resources para o novo arquivo que você criou. Se as configurações estiverem anteriormente em um arquivo .properties , convertê-las em YAML primeiro. Você pode encontrar ferramentas online ou plug-ins IntelliJ para realizar essa conversão.Crie um arquivo application.yml no diretório acima. Você pode usar esse arquivo para definir as configurações e os recursos compartilhados entre todos os aplicativos no ambiente Azure Container Apps. Essas configurações normalmente incluem fontes de dados, configurações de registro de log, configuração do Atuador do Spring Boot, entre outros.
Faça commit dessas alterações e efetue push delas para o repositório Git.
Remova o arquivo application.properties ou application.yml do aplicativo.
Considere adicionar o componente gerenciado Admin for Spring para habilitar uma interface administrativa para aplicativos Web Spring Boot que expõem pontos de extremidade do atuador. Para obter mais informações, consulte Configurar o componente do Administrador do Spring Boot em Azure Container Apps.
Considere adicionar um pipeline de implantação para garantir que as implantações sejam automáticas e consistentes. As instruções estão disponíveis para Azure Pipelines e para GitHub Actions.
Considere a possibilidade de usar revisões de aplicativos de contêiner, rótulos de revisão e pesos de tráfego de entrada para habilitar a implantação azul-verde, o que permite testar alterações de código na produção antes que elas sejam disponibilizadas para alguns ou todos os usuários finais. Para obter mais informações, consulte Blue-Green Deployment in Azure Container Apps.
Considere adicionar associações de serviço para conectar seu aplicativo a bancos de dados de Azure com suporte. Essas associações de serviço eliminariam a necessidade de fornecer informações de conexão, incluindo credenciais, para os aplicativos Spring Cloud.
Considere habilitar a pilha de desenvolvimento Java para coletar métricas essenciais de JVM para seus aplicativos. Para obter mais informações, consulte Java métricas para aplicativos Java em Azure Container Apps.
Considere adicionar Azure Monitor regras de alerta e grupos de ações para detectar e abordar rapidamente condições aberrantes. Para obter mais informações, consulte Configurar alertas em Azure Container Apps.
Considere replicar seu aplicativo entre as zonas da região habilitando a redundância de zonas do Azure Container Apps. O tráfego tem balanceamento de carga e é roteado automaticamente para réplicas se ocorre uma interrupção de zona. Para obter mais informações sobre configurações redundantes, consulte Reliability no Azure Container Apps.
Considere proteger Azure Container Apps contra explorações e vulnerabilidades comuns usando Firewall de Aplicação Web no Gateway de Aplicações. Para obter mais informações, consulte Proteger Azure Container Apps com Web Application Firewall no Gateway de Aplicativo.
Se os aplicativos usarem componentes herdados do Spring Cloud Netflix, considere substituí-los por alternativas atuais, como mostrado na tabela a seguir:
Legado Atual Spring Cloud Eureka Registro do Serviço do Spring Cloud Spring Cloud Netflix Zuul Spring Cloud Gateway Spring Cloud Netflix Archaius Servidor de Configuração do Spring Cloud Faixa de opções do Spring Cloud Netflix Balanceador de Carga do Spring Cloud (balanceador de carga do lado do cliente) Spring Cloud Hystrix Spring Cloud Circuit Breaker + Resilience4j Turbina do Spring Cloud Netflix Micrometer + Prometheus