O Enterprise Distributed Application Service (EDAS) oferece suporte a uma conexão não intrusiva com o Microservices Engine (MSE). É possível implementar os recursos de governança de microsserviços fornecidos pelo MSE em aplicações Spring Cloud e Dubbo no EDAS. Ao criar ou implantar uma aplicação, configure o registro e descoberta de serviços, a proteção contra lista vazia e a inicialização gradual para a aplicação. Este tópico descreve como configurar a governança de microsserviços.
Informações básicas
Registro e descoberta de serviços
Eureka, ZooKeeper e Nacos são tipos populares de registros de serviço em modelos de microsserviços Java. Os registros de serviço implementam o registro e a descoberta de serviços, desacoplando-os e eliminando a necessidade de gerenciamento manual de dependências. Dessa forma, você gerencia microsserviços dinamicamente.
Proteção contra lista vazia
Este recurso aplica-se ao cenário em que ocorre uma exceção em um servidor durante o registro de serviço. Nessa situação, após um cliente solicitar a lista de endereços do servidor (lista de instâncias) a um registro de serviço, o registro retorna uma lista vazia. Se você ativar o recurso de proteção contra lista vazia, o cliente ignora a lista vazia e obtém a lista de instâncias retornada normalmente na última vez a partir do cache. Isso garante a disponibilidade do cliente mesmo quando as assinaturas forem afetadas por eventos inesperados. Por exemplo, as assinaturas podem ser impactadas quando um registro de serviço atualiza configurações, realiza um upgrade ou downgrade, ou encontra uma exceção, como desconexão de rede ou falta de energia.
Os clientes (consumidores) assinam a lista de instâncias fornecida pelos servidores (provedores) a partir de um registro de serviço. Quando um registro de serviço atualiza configurações, executa um upgrade ou downgrade, ou enfrenta uma exceção como desconexão de rede ou queda de energia, as assinaturas dos consumidores podem ser afetadas. Como resultado, a disponibilidade dos consumidores é degradada. Para lidar com erros de assinatura causados por exceções, ative o recurso de proteção contra lista vazia para os consumidores.

Inicialização gradual
Para aplicações online, operações como lançamento, scale-out, scale-in e reinicialização são inevitáveis. O EDAS integra a solução de inicialização gradual do MSE para proteger as aplicações nas fases de inicialização. Essa solução fornece recursos como pré-busca de serviço, registro de serviço atrasado e implantação contínua gradual.
Pré-busca de serviço: permite especificar o período e a curva de pré-busca. Isso reduz a possibilidade de um serviço recém-lançado falhar ao suportar um pico de tráfego em um curto período.
-
Registro de serviço atrasado: força o registro da aplicação somente após o término do período estendido especificado. Isso garante que a aplicação não seja registrada até que esteja inicializada. Assim, a aplicação tem tempo suficiente para processar solicitações assíncronas e preparar recursos de computação, o que evita erros devido a falhas de inicialização.
Se o processo de inicialização de uma aplicação for complexo, o registro e a inicialização podem ocorrer simultaneamente. A aplicação pode ter sido registrada em um registro antes de ser completamente inicializada. Nesse caso, se um consumidor chamar a aplicação, um erro poderá ser retornado. Para resolver esse problema, use o recurso de registro de serviço atrasado para permitir que a aplicação se registre em um registro somente após a inicialização completa.
-
Implantação contínua gradual: fornece a interface de verificação de integridade para consumidores fora de um sistema de microsserviços verificarem se uma aplicação está pronta. Isso garante que todos os consumidores possam verificar o status da aplicação, independentemente de estarem dentro ou fora de um sistema de microsserviços. Este recurso suporta verificações tanto do status de registro de serviço quanto do status de pré-busca de serviço.
A implantação contínua gradual no Kubernetes divide um processo completo de lançamento em vários lotes. Um lote é lançado por vez. Após o lançamento de todos os lotes, a implantação contínua gradual é concluída. O EDAS orquestra o ciclo de vida dos microsserviços e o ciclo de vida do serviço Kubernetes para aplicações Kubernetes. O EDAS fornece capacidades de inicialização gradual para que as aplicações sejam registradas em um registro e passem pela pré-busca antes da verificação de prontidão. Isso garante que instâncias disponíveis de uma aplicação estejam em execução durante uma implantação contínua gradual.
Registro antes da verificação de prontidão: O EDAS fornece um recurso que alinha o ciclo de vida dos microsserviços com as verificações de prontidão do Kubernetes. Se você ativar este recurso, poderá usar o EDAS Agent para fornecer uma porta destinada a detectar se uma aplicação está registrada em um registro. O EDAS não interfere na aplicação. Se o EDAS detectar que a aplicação está registrada, o código de status 200 será retornado. Se o EDAS detectar que a aplicação não está registrada, o código de status 500 será retornado.
Pré-busca antes da verificação de prontidão: O EDAS permite associar o recurso de pré-busca de serviço às verificações de prontidão do Kubernetes. Dessa forma, uma aplicação só estará pronta após a conclusão da pré-busca dos serviços ativados para ela.
Limites
-
É possível ativar os recursos de proteção contra lista vazia e inicialização gradual de maneira não intrusiva apenas para aplicações Spring Cloud e Dubbo. A tabela a seguir descreve as versões suportadas do Spring Cloud e do Dubbo.
Item
Empty list protection
Graceful start
Spring Cloud
Spring Cloud Edgware and later
Spring Cloud Edgware and later
Dubbo
Dubbo 2.5.3 to 2.7.8
NotaSe você quiser usar os recursos no Dubbo 3.0 e posterior, entre no grupo do DingTalk (ID: 31723701) para obter suporte técnico.
Dubbo 2.7.3 to 2.7.8
NotaSe você quiser usar os recursos no Dubbo 2.6 ou Dubbo 3.0 e posterior, entre no grupo do DingTalk (ID: 31723701) para obter suporte técnico.
Os registros de serviço Nacos, Eureka e Zookeeper são suportados.
Na maioria dos casos, aplicações de gateway não são chamadas usando registros, mas sim expondo APIs. Portanto, o recurso de pré-busca de baixo tráfego fornecido pelo MSE é ineficaz para aplicações de gateway. Além disso, aplicações de gateway não possuem grandes alterações ou lógica de negócios complexa. Logo, o recurso de pré-busca de serviço não é obrigatório para aplicações de gateway.
Para aplicações lançadas no modo canary, não é possível ativar o recurso de pré-busca de serviço para o primeiro lote.
Configure governança de microsserviços ao criar uma aplicação
Faça login no console do EDASconsole do EDAS. No painel de navegação à esquerda, escolha . A página Applications aparece. Na barra de navegação superior, selecione uma região. Na parte superior da página, selecione um namespace. No canto superior esquerdo, clique em Create Application.
-
Na etapa Basic Information, defina os parâmetros Cluster Type e Application Runtime Environment e clique em Next. A tabela a seguir descreve os parâmetros.
Parameter
Description
Cluster Type
O tipo de cluster no qual você deseja implantar a aplicação. Selecione Kubernetes Clusters.
Application Runtime Environment
O ambiente de execução da aplicação. Selecione um ambiente de execução com base no tipo da aplicação hospedada.
Java
Custom: Selecione esta opção se quiser usar uma imagem personalizada para implantar a aplicação em um cluster Container Service for Kubernetes (ACK).
Java: Selecione esta opção se quiser usar um pacote JAR universal para implantar a aplicação como uma aplicação Dubbo ou Spring Boot. Você pode definir o parâmetro Java Environment após selecionar esta opção.
Tomcat: Selecione esta opção se quiser usar um pacote WAR universal para implantar a aplicação como uma aplicação Dubbo ou Spring. Você pode definir os parâmetros Java Environment e Container Version após selecionar esta opção.
EDAS-Container (HSF): Selecione esta opção se quiser usar um pacote WAR ou FatJar para implantar a aplicação como uma aplicação High-speed Service Framework (HSF). Você pode definir os parâmetros Java Environment, Pandora Version e Ali-Tomcat Version após selecionar esta opção.
PHP: Selecione esta opção se a aplicação for uma aplicação PHP executada no Apache HTTP Server.
Node.js, C++, Go, and Other Languages: Selecione esta opção se quiser usar uma imagem personalizada para implantar a aplicação em um cluster Kubernetes. O processo de configuração para aplicações multilíngues não é descrito neste tópico.
NotaSe você selecionar EDAS-Container (HSF) na seção Select Application, poderá ativar apenas o recurso de registro e descoberta de serviços para a aplicação.
Se você selecionar PHP ou Node.js, C++, Go, and Other Languages na seção Hosted Applications, não poderá configurar a governança de microsserviços para a aplicação.
Na etapa Configurations, configure as informações de ambiente, informações básicas e método de implantação para a aplicação, defina os parâmetros de recursos relacionados e clique em Next.
-
Na etapa Advanced Settings, clique em Microservices Governance. Em seguida, configure os recursos de registro e descoberta de serviços, proteção contra lista vazia e inicialização gradual conforme suas necessidades de negócios.
Parameter
Description
Service Registration and Discovery
O método de O&M para seu registro de serviço. Você pode selecionar o registro de serviço compartilhado do EDAS ou o registro de serviço configurado para a aplicação. Para mais informações, consulte Escolher um registro de serviço.
Empty List Protection
Especifica se deve ativar o recurso de proteção contra lista vazia.
Se você ativar a proteção contra lista vazia, as assinaturas de listas de instâncias vazias pelos consumidores serão ignoradas. Isso garante alta disponibilidade do serviço.
Se você desativar a proteção contra lista vazia, seus negócios serão interrompidos e um erro será retornado quando um consumidor assinar uma lista de instâncias vazia.
Graceful Release
Especifica se deve ativar o recurso de inicialização gradual. Para ativar este recurso, defina os seguintes parâmetros:
Prefetching Duration (Seconds): o período necessário para a pré-busca de serviço na próxima inicialização de uma instância da aplicação. O valor padrão é 120. Valores válidos: 0 a 86400. O valor 86400 equivale a 24 horas.
Number of Prefetching Curves: Em uma duração de pré-busca configurada, o peso do tráfego para a aplicação pré-buscada cresce exponencialmente com o valor da curva. Em uma duração de pré-busca especificada, se o valor da curva for alto, o peso do tráfego para a aplicação pré-buscada será baixo quando a aplicação for inicializada. Isso garante que aplicações complexas tenham tempo suficiente para a pré-busca.
O valor padrão é 2, adequado para cenários comuns de pré-busca. Esse valor indica que o tráfego recebido pelo provedor durante a pré-busca é exibido como uma curva quadrática. Valores válidos: 0 a 20. Para a mesma duração de pré-busca, um valor maior deste parâmetro indica que o provedor de serviços recebe uma quantidade menor de tráfego quando a pré-busca de serviço começa, e a quantidade de tráfego recebido aumenta gradualmente até que a pré-busca seja concluída.
Registration Delay (Seconds): Defina este parâmetro com um valor entre 0 e 86400. O valor 86400 equivale a 24 horas.
Graceful Rolling Release: Especifique se deve ativar o recurso de implantação contínua gradual.
Complete Service Registration before Readiness Probing: fornece a porta 55199 para a aplicação verificar se os serviços estão registrados. Em caso afirmativo, o código de status 200 é retornado. Caso contrário, o código de status 500 é retornado.
Complete Service Prefetching before Readiness Probing: fornece a porta 55199 para a aplicação verificar se os serviços passaram pela pré-busca. Em caso afirmativo, o código de status 200 é retornado. Caso contrário, o código de status 500 é retornado.
NotaSe você ativar tanto Complete Service Registration before Readiness Probing quanto Complete Service Prefetching before Readiness Probing, a porta 55199 será fornecida para verificar se os serviços passaram pela pré-busca.
-
Na etapa Advanced Settings, clique em Application Life Cycle Management. Defina as opções do parâmetro Readiness e ative a chave para que a configuração da sonda de prontidão tenha efeito.

Se você não configurar uma sonda de prontidão para a aplicação, após ativar o recurso de implantação contínua gradual, a opção de modo de implantação contínua gradual estará disponível para o parâmetro Select a mode. Se você selecionar o modo de implantação contínua gradual, o sistema usará o caminho /health como caminho padrão para a aplicação e fornecerá a porta 55199 para a verificação de prontidão. Use o modo de implantação contínua gradual para orquestrar o ciclo de vida dos microsserviços e o ciclo de vida do serviço Kubernetes para aplicações Kubernetes. Alternativamente, utilize outros modos juntamente com a interface de verificação de integridade para verificar a prontidão conforme suas necessidades de negócios.
Clique em Create Application.
-
Na página Creation Completed, verifique as informações nas seções Basic Information, Configurations e Advanced Settings. Em seguida, clique em Create Application.
Na parte superior da página Application Overview, clique em View Details. Na página Change List, visualize o processo de alteração da aplicação. Aguarde alguns minutos até que a aplicação seja implantada. Após a conclusão do processo de alteração da aplicação, visualize o status da instância na seção Basic Information da página Application Overview. Se o status indicar que um pod está em execução, a aplicação foi implantada.
Configure governança de microsserviços ao atualizar uma aplicação
Se você não ativou os recursos de registro e descoberta de serviços, proteção contra lista vazia e inicialização gradual ao criar uma aplicação, poderá ativá-los ao implantar a aplicação.
Faça login no console do EDAS console do EDAS.
No painel de navegação à esquerda, clique em . Na barra de navegação superior, selecione uma região. Na parte superior da página, selecione um namespace. Selecione Container Service or Serverless Kubernetes Cluster na lista suspensa Cluster Type. Em seguida, localize a aplicação que deseja implantar e clique no nome da aplicação.
Na página Overview ou Basic information, escolha no canto superior direito.
Na página Select Deployment Mode, selecione um modo de implantação e clique em Start Deployment no canto superior direito da seção do modo de implantação especificado.
-
Defina o ambiente de execução e o pacote de implantação para a aplicação e clique em Configuration Management. Após concluir a configuração, clique em OK.
-
Expanda Microservices Governance e configure os recursos de registro e descoberta de serviços, proteção contra lista vazia e inicialização gradual conforme suas necessidades de negócios.
Parameter
Description
Service Registration and Discovery
O método de O&M para seu registro de serviço. Você pode selecionar o registro de serviço compartilhado do EDAS ou o registro de serviço configurado para a aplicação. Para mais informações, consulte Escolher um registro de serviço.
Empty List Protection
Especifica se deve ativar o recurso de proteção contra lista vazia.
Se você ativar a proteção contra lista vazia, as assinaturas de listas de instâncias vazias pelos consumidores serão ignoradas. Isso garante alta disponibilidade do serviço.
Se você desativar a proteção contra lista vazia, seus negócios serão interrompidos e um erro será retornado quando um consumidor assinar uma lista de instâncias vazia.
Graceful Release
Especifica se deve ativar o recurso de inicialização gradual. Para ativar este recurso, defina os seguintes parâmetros:
Prefetching Duration (Seconds): o período necessário para a pré-busca de serviço na próxima inicialização de uma instância da aplicação. O valor padrão é 120. Valores válidos: 0 a 86400. O valor 86400 equivale a 24 horas.
Number of Prefetching Curves: Em uma duração de pré-busca configurada, o peso do tráfego para a aplicação pré-buscada cresce exponencialmente com o valor da curva. Em uma duração de pré-busca especificada, se o valor da curva for alto, o peso do tráfego para a aplicação pré-buscada será baixo quando a aplicação for inicializada. Isso garante que aplicações complexas tenham tempo suficiente para a pré-busca.
O valor padrão é 2, adequado para cenários comuns de pré-busca. Esse valor indica que o tráfego recebido pelo provedor durante a pré-busca é exibido como uma curva quadrática. Valores válidos: 0 a 20. Para a mesma duração de pré-busca, um valor maior deste parâmetro indica que o provedor de serviços recebe uma quantidade menor de tráfego quando a pré-busca de serviço começa, e a quantidade de tráfego recebido aumenta gradualmente até que a pré-busca seja concluída.
Registration Delay (Seconds): Defina este parâmetro com um valor entre 0 e 86400. O valor 86400 equivale a 24 horas.
Graceful Rolling Release: Especifique se deve ativar o recurso de implantação contínua gradual.
Complete Service Registration before Readiness Probing: fornece a porta 55199 para a aplicação verificar se os serviços estão registrados. Em caso afirmativo, o código de status 200 é retornado. Caso contrário, o código de status 500 é retornado.
Complete Service Prefetching before Readiness Probing: fornece a porta 55199 para a aplicação verificar se os serviços passaram pela pré-busca. Em caso afirmativo, o código de status 200 é retornado. Caso contrário, o código de status 500 é retornado.
NotaSe você ativar tanto Complete Service Registration before Readiness Probing quanto Complete Service Prefetching before Readiness Probing, a porta 55199 será fornecida para verificar se os serviços passaram pela pré-busca.
Expanda Throttling and Degradation Configuration e ative Access AHAS.
ImportanteA aplicação é reiniciada após você clicar em OK. Recomendamos configurar esses recursos fora dos horários de pico.
-
Verifique o resultado
No painel de navegação à esquerda da página de detalhes da aplicação, clique em Change List para visualizar os detalhes da alteração da aplicação. Se a execução da alteração atual for bem-sucedida, a aplicação estará implantada e as configurações estarão em vigor.
Após a implantação da aplicação com o lançamento sem perdas, é possível visualizar o efeito de pré-aquecimento.
No painel de navegação à esquerda, selecione 机器监控.
-
Na página 机器监控, visualize o efeito de pré-aquecimento da aplicação.
-
Pré-aquecimento de serviço
Se a implantação da aplicação utilizar o lançamento em lotes, com o pré-aquecimento de serviço ativado durante a implantação e a aplicação integrada ao AHAS, o exemplo do efeito de pré-aquecimento será semelhante ao seguinte:

Sob um tráfego de negócios estável, é possível observar que a taxa de tráfego ocupada pela aplicação recém-lançada aumenta lentamente seguindo uma curva de pré-aquecimento.
O recurso de lançamento sem perdas controla a porcentagem de tráfego da aplicação recém-lançada através da configuração da duração e da curva de pré-aquecimento. Os usuários podem configurar a duração do pré-aquecimento conforme a necessidade do negócio e ajustar a curva de pré-aquecimento com base na complexidade do programa para modificar o peso do tráfego atribuído logo após a inicialização da aplicação. A curva funcional do efeito de pré-aquecimento é apresentada abaixo:

Exemplos de efeitos com diferentes curvas de pré-aquecimento configuradas durante a implantação da aplicação:
Duração de pré-aquecimento de 120 segundos e curva de pré-aquecimento igual a 2.

Duração de pré-aquecimento de 120 segundos e curva de pré-aquecimento igual a 5.

-
Lançamento contínuo sem perdas
Ao ativar o lançamento contínuo sem perdas, o ciclo de vida dos microsserviços é integrado ao ciclo de vida do K8s. Ao optar pelo lançamento em lotes com pré-aquecimento de serviço configurado e lançamento contínuo sem perdas ativado, os seguintes efeitos podem ser observados durante o processo de lançamento:
O tráfego recebido pela aplicação recém-lançada aumenta lentamente seguindo uma curva de pré-aquecimento.

O tráfego da aplicação antiga diminui gradualmente.

Durante o processo de lançamento da aplicação, é possível visualizar eventos de alerta Unhealthy nos eventos da aplicação. Como a sonda de prontidão da aplicação ainda não passou na verificação, as instâncias das versões antiga e nova coexistem, e a instância antiga recebe tráfego adicional durante o processo de pré-aquecimento. Após o término do pré-aquecimento, a solicitação da sonda de prontidão retorna 200, e a instância antiga é excluída para concretizar o pré-aquecimento do serviço e integrar o ciclo de vida com o K8s.

-
Registro atrasado
Ao configurar o registro atrasado, a aplicação aguarda o tempo de atraso especificado após a inicialização antes de se registrar no centro de registro para fornecer serviços. Isso concede tempo suficiente para a inicialização da aplicação, evitando perda de tráfego causada pelo carregamento incompleto da aplicação.
Por exemplo, ao configurar a implantação da aplicação em lote único com registro atrasado de 300 segundos e pré-aquecimento de serviço de 120 segundos, além de ativar o lançamento contínuo sem perdas, o efeito será o seguinte:

Visualize os registros de alterações da aplicação na página 变更记录.

É possível observar que a aplicação sofreu uma alteração às 11:17:59 e que nenhum Pod criado antes das 11:24:44 recebeu tráfego. Além disso, o pré-aquecimento de tráfego começou após as 11:24:44. Ao analisar os eventos de alteração da aplicação, encontra-se o evento de alerta Unhealthy. Considerando que o processo de inicialização da aplicação inclui eventos como agendamento de Pods, pull de imagens e início do programa, o intervalo entre o horário de lançamento da aplicação e o término do fluxo de alterações corresponde aproximadamente ao tempo necessário para a inicialização da aplicação realizar o registro atrasado e o pré-aquecimento de serviço.
-