Em arquiteturas de microsserviços, as chamadas entre aplicações costumam ser aleatórias. Ao atualizar uma aplicação Spring Cloud ou Dubbo, direcionar tráfego específico para a nova versão pode ser difícil. O recurso de liberação canário de ponta a ponta do MSE Microservices Governance permite implementar controle de tráfego granular e completo sem modificar o código da aplicação. As lanes isolam versões de aplicações em ambientes de execução separados. Ao definir regras de roteamento para uma lane, você encaminha solicitações que atendem a critérios específicos para a versão desejada da aplicação.
Processo de implementação
Limitações
O recurso de liberação canário de ponta a ponta utiliza a capacidade de roteamento baseado em tags do MSE Microservices Governance, distinta do roteamento baseado em tags do próprio gateway. Para evitar conflitos, não aplique regras separadas de roteamento canário ou baseado em tags às aplicações gerenciadas por este recurso.
Para limitações do recurso de liberação canário de ponta a ponta em aplicações Java, consulte Java frameworks supported by MSE Microservices Governance.
Para utilizar os recursos mais recentes de liberação canário de ponta a ponta, seu gateway nativo da cloud MSE deve estar na versão 2.0.6 ou superior. Para obter instruções sobre como atualizar seu gateway, consulte Upgrade an MSE cloud-native gateway.
Cenário de exemplo
O cenário de pedido abaixo, típico de uma arquitetura de e-commerce, demonstra o controle de tráfego de ponta a ponta desde um gateway nativo da cloud MSE até os microsserviços de backend. A arquitetura consiste em um gateway nativo da cloud MSE e uma estrutura de microsserviços construída com Spring Cloud. A cadeia de chamadas envolve três services: centro de transações (A), centro de produtos (B) e centro de estoque (C). Os clientes acessam os services de backend, que utilizam um registro de services MSE Nacos para descoberta de services.
Após a realização de um pedido, o gateway nativo da cloud MSE roteia o tráfego recebido para o centro de transações (A). Em seguida, o centro de transações (A) chama o centro de produtos (B), que chama o centro de estoque (C) downstream. A cadeia completa de chamadas é: Cliente > Gateway nativo da cloud MSE > A > B > C.
Conforme o negócio evolui, novos recursos exigem a liberação simultânea de novas versões das Aplicações A e C. Antes de colocar as novas versões em produção, valide ambas por meio de uma liberação canário. Após confirmar a estabilidade das novas versões, prossiga com a liberação oficial.
Os recursos de liberação canário de ponta a ponta do gateway nativo da cloud MSE e do MSE Microservices Governance permitem construir um pipeline de liberação canário do gateway para múltiplos services de backend. Solicitações com características específicas são roteadas consistentemente para o ambiente canário correspondente, possibilitando a validação simultânea de vários services. Caso uma versão canário alvo não esteja disponível, o tráfego realiza failover automaticamente para o ambiente base.

Conceitos principais
Gateway nativo da cloud MSE: Um gateway de próxima geração compatível com o padrão Kubernetes Ingress. Oferece suporte a diversos métodos de descoberta de services, incluindo Container Service for Kubernetes (ACK) e MSE Nacos, além de fornecer vários métodos de autenticação para proteger seus services.
Lane: Um ambiente isolado definido para um grupo de versões específicas de aplicações, como todas as versões "canário". Apenas o tráfego que corresponde às regras de roteamento é direcionado para as aplicações tagueadas dentro da lane correspondente. Uma aplicação pode pertencer a múltiplas lanes, e uma lane pode conter múltiplas aplicações, formando uma relação muitos-para-muitos.
Grupo de lanes: Uma coleção de lanes. Grupos de lanes são usados principalmente para separar ambientes por equipes ou cenários.
Ambiente base: O ambiente para aplicações sem tags. Serve como fallback ou ambiente de produção para todos os outros ambientes.
Pré-requisitos
Criar um cluster Kubernetes
Para mais informações, consulte Create an ACK dedicated cluster (discontinued) ou Create an ACK managed cluster.
Ativar a governança de microsserviços MSE
Certifique-se de que seu agente Java MSE esteja na versão 3.2.3 ou superior. Caso contrário, suas operações comerciais podem ser afetadas.
Ative a Professional Edition na página de ativação do MSE Microservices Governance.
Conecte suas aplicações de microsserviços ACK ao MSE Governance Center conforme descrito em Connect ACK microservice applications to the MSE Governance Center.
Criar um gateway nativo da cloud MSE
Para mais informações, consulte Create an MSE cloud-native gateway.
Associar uma source de service ao gateway nativo da cloud
Para mais informações, consulte Add a service source.
Para o recurso de liberação canário de ponta a ponta, os gateways nativos da cloud MSE suportam atualmente apenas clusters Container Service for Kubernetes (ACK) e instâncias MSE Nacos como sources de service.
O gateway nativo da cloud MSE e o cluster ACK ou instância MSE Nacos devem estar na mesma virtual private cloud (VPC).
Etapa 1: Configurar o ambiente base
Etapa 1: Implantar as aplicações base
Faça login no console ACK.
No painel de navegação à esquerda, clique em Clusters. Em seguida, clique no nome do cluster que deseja gerenciar.
No painel de navegação à esquerda, escolha .
Na parte superior da página, selecione o namespace do cluster e clique em Create from YAML.
-
Implante as aplicações base.
MSE Nacos
Copie o conteúdo YAML a seguir para implantar as versões base das aplicações A, B e C.
NotaSubstitua
nacos server addressno código pelo nome de domínio interno da sua instância MSE Nacos. Remova as chaves{}.Container Service (ACK)
-
Copie o conteúdo YAML a seguir para implantar o Nacos e simular um registro de service auto-gerenciado.
-
Copie o conteúdo YAML a seguir para implantar as versões base das aplicações A, B e C.
-
Copie o conteúdo YAML a seguir para criar um Service para a aplicação de entrada A.
-
Etapa 2: Expor a Aplicação A
New service
Se você ainda não adicionou a Aplicação A ao gateway nativo da cloud, siga estas etapas para expô-la.
-
Faça login no MSE console. Acesse Cloud-native Gateway > Gateways e clique no nome da sua instância de gateway. No painel de navegação à esquerda, escolha Routes. Na página exibida, selecione a aba Services e clique em Add Service. Para mais informações, consulte Add a service.
-
Se sua source de service for um cluster ACK:
Service Source: Selecione Container Service.
Namespace: Selecione default.
Services: Selecione sc-a.
-
Se sua source de service for uma instância MSE Nacos:
Service Source: Selecione MSE Nacos.
Namespace: Selecione public.
Services: Selecione sc-A.
-
-
Na página Routes, selecione a aba Routes. Clique em Add Route para criar uma rota para o service sc-a/sc-A e expô-lo. Para mais informações, consulte Create a route.
Parameter
Description
Path
Selecione o tipo de correspondência Prefix e defina o valor do caminho como /a.
Route Target
Selecione Single Service.
Backend service
Selecione sc-A.
Existing service
Se a Aplicação A já for um service online no seu gateway, siga estas etapas para expô-la.
Faça login no MSE console. Acesse Cloud-native Gateway > Gateways e selecione sua instância de gateway. No painel de navegação à esquerda, escolha Routes. Na página exibida, selecione a aba Routes. Edite uma rota existente para expor o service.
|
Parameter |
Description |
|
Path |
Selecione o tipo de correspondência Prefix e defina o valor do caminho como /a. |
|
Route Target |
Selecione Single Service. |
|
Backend service |
Selecione sc-A. |
Etapa 3: Testar o tráfego do ambiente base
Faça login no console MSE. Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Cloud-native Gateway > Gateways. Na página Gateways, clique no ID do gateway.
No painel de navegação à esquerda, clique em Overview.
Na aba Endpoint, localize o Ingress IP Address do SLB na seção Gateway Ingress.
-
Execute o comando curl para testar o tráfego do ambiente base. O resultado mostra que o tráfego passa pelas versões base das aplicações A, B e C.
# Test command curl x.x.1.1/a # Test result A[10.0.3.178][config=base] -> B[10.0.3.195] -> C[10.0.3.201]A ausência de sufixo de versão para as aplicações B e C na saída indica que as solicitações foram roteadas para suas versões base.
Etapa 2: Configurar o ambiente canário
Se um novo recurso exigir a liberação simultânea de novas versões das Aplicações A e C, utilize uma liberação canário de ponta a ponta para validá-las.
Etapa 1: Implantar as aplicações canário
Faça login no console ACK.
No painel de navegação à esquerda, clique em Clusters. Em seguida, clique no nome do cluster que deseja gerenciar.
No painel de navegação à esquerda, escolha .
Na parte superior da página, selecione o namespace do cluster e clique em Create from YAML.
-
Copie o conteúdo YAML a seguir para implantar as versões canário das aplicações A e C.
MSE Nacos
NotaSubstitua
{nacos server address}no código pelo nome de domínio interno da sua instância MSE Nacos. Não inclua as chaves{}.Container Service (ACK)
Etapa 2: Criar um grupo de lanes
Faça login no console MSE e selecione uma região na barra de navegação superior.
No painel de navegação à esquerda, escolha .
Se não existir nenhum grupo de lanes no namespace de microsserviço selecionado, clique em Create Lane Groups and Lanes. Se já existir um grupo de lanes, clique em + Create Lane Group.
-
No painel Create Lane Group, configure os parâmetros a seguir e clique em OK.
Parameter
Description
Name of Lane Group
Insira um nome para o grupo de lanes.
Entry Type
Selecione MSE Cloud-native Gateway.
Gateway
Selecione o gateway nativo da cloud alvo.
Lane Group Application
Selecione spring-cloud-a, spring-cloud-b e spring-cloud-c.
Após a criação do grupo de lanes, visualize-o na seção Lane Group da página Full link Grayscale. Para modificar as informações do grupo de lanes, clique no ícone de edição (
) e atualize as configurações.
Etapa 3: Criar uma lane
Ao usar o recurso de liberação canário de ponta a ponta, adicione uma
tagespecial às suas aplicações canário para distingui-las de outros nós. Em ambientes de contêiner, adicione o rótuloalicloud.service.tag: ${tag}emspec.template.metadata.labels. Em ambientes ECS, adicione o parâmetro de inicialização Java-Dalicloud.service.tag=${tag}.-
Ao utilizar um gateway nativo da cloud como entrada para uma liberação canário de ponta a ponta, o MSE suporta dois modos de liberação canário para lanes.
Liberação canário por conteúdo: Recomendado quando o conteúdo da solicitação identifica o tráfego canário. Caso contrário, considere modificar seu sistema para adicionar identificadores canário e obter melhores resultados, como manter a consistência das solicitações de um usuário.
Liberação canário por proporção: Modo de fallback para quando o conteúdo da solicitação não identifica o tráfego canário e sistemas legados não podem ser modificados. Este modo pode rotear solicitações da mesma source para lanes diferentes, causando comportamento inconsistente para requisições canário.
O modo de liberação canário deve ser consistente em todas as lanes dentro de um grupo de lanes. Defina o modo de liberação canário apenas ao criar a primeira lane de um grupo.
Na parte inferior da página Full link Grayscale, se não existir nenhuma lane no namespace selecionado, clique em Click to create the first shunt Lane. Se já existir uma lane, clique em + Create swim lanes.
-
No painel Create swim lanes, configure as definições da lane e clique em OK.
By content
Parameter
Description
Add Node Tag
Adicione uma tag aos nós da sua aplicação canário para distingui-los dos nós base.
Enter lane information
Lane Name: Insira um nome para a lane.
Lane Tag: A tag de destino para o tráfego que corresponde às regras desta lane.
Confirm Matching Relationship: Verifique se o número de nós de aplicação com esta tag atende às suas expectativas.
Lane Status: Selecione Enable.
Add Canary Release Rule
Defina a regra para rotear tráfego para esta lane.
-
Canary Release Mode: Selecione Canary Release by Content.
-
Canary Release Condition: Selecione Meet All Conditions.
A condição neste exemplo é configurada da seguinte forma:
-
Parameter Type: Header.
-
Parameter: canary.
-
Condition: ==.
-
Value: gray.
-
Modos de roteamento canário
Canary release condition
Effect
Meet All Conditions
O tráfego é roteado para a lane correspondente apenas se todas as condições especificadas forem atendidas.
Meet Any Condition
O tráfego é roteado para a lane correspondente se qualquer uma das condições especificadas for atendida.
Tipos de condição
Condition
Description
Configuration example
Request example
==
Correspondência exata. A condição é atendida apenas se o valor no tráfego corresponder exatamente ao valor especificado.
Por exemplo, a condição de correspondência de solicitação para a lane mse (tag da lane: gray, lista de aplicações da lane:
spring-cloud-a,spring-cloud-c) é Condition: AND header: [name] == xiaoming. Isso significa que, quando o valor do cabeçalho de solicitaçãonamefor exatamente igual axiaoming, o tráfego será roteado para esta lane. O status atual da lane é Enabled.Uma solicitação GET é enviada para o caminho
/acom o cabeçalhoname=xiaoming. A respostaAgray[192.168.0.22][config=base] -> B[192.168.0.9] -> Cgray[192.168.0.17]confirma que o tráfego foi roteado pelas versões canário dos services A e C.!=
Correspondência de desigualdade. A condição é atendida se o valor no tráfego não corresponder ao valor especificado.
Por exemplo, se a condição de correspondência de solicitação para a lane mse estiver definida como
header: [name] != xiaoming, o tráfego será correspondido a esta lane quando o valor do campo name no cabeçalho da solicitação não for igual axiaoming.Por exemplo, se você enviar uma solicitação GET para o caminho
/acom o cabeçalho definido comoname=xiaoming1, a resposta mostrará que o tráfego foi roteado pelo link canário:Agray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]. Isso indica que o tráfego corresponde à regra canário quando o valor denamenão é igual ao valor da condição.in
Correspondência de inclusão. A condição é atendida se o valor no tráfego estiver presente na lista especificada.
Por exemplo, a condição de correspondência de solicitação para a lane mse está definida como
header: [name] in [xiaoming,xiaohong]. Isso significa que, se o valor do cabeçalho name em uma solicitação for xiaoming ou xiaohong, o tráfego será roteado para as aplicações canário spring-cloud-a e spring-cloud-c correspondentes a esta lane.Uma solicitação GET é enviada para o caminho
/acom o cabeçalhonamedefinido comoxiaohong. A respostaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]confirma que o tráfego foi roteado para a lane canário porque o valor estava na lista.Percentage
Correspondência percentual. A condição é atendida se hash(get(key)) % 100 < value for verdadeiro.
Uma regra é configurada para rotear 10% das solicitações para a lane tagueada como gray, com base no hash do parâmetro Header name. Esta lane inclui
spring-cloud-aespring-cloud-c.Uma solicitação GET é enviada para o caminho
/acom o cabeçalhoname=111. A respostaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]indica que o valor de hash desta solicitação caiu dentro da faixa de 10% e foi roteado para a lane canário.Regex
Correspondência por expressão regular. A condição é atendida se o valor no tráfego corresponder à expressão regular especificada.
Uma regra é configurada para corresponder a solicitações onde o parâmetro Header name corresponde a uma regex para uma string alfanumérica de 32 caracteres. A lane tagueada como gray inclui
spring-cloud-a,spring-cloud-c.Uma solicitação GET é enviada para o caminho
/acom o cabeçalho name definido como1234567890abcdef1234567890ABCDEF. A respostaAgray[10.0.10.58][config=base] -> B[10.0.10.206] -> Cgray[10.0.10.8]confirma que o tráfego foi roteado para a lane canário porque o valor correspondeu à regex.By ratio
NotaPara criar uma lane para liberação canário por proporção, a versão do ack-onepilot deve ser 3.0.18 ou superior e a versão do agente deve ser 3.2.3 ou superior.
Parameter
Description
Add Node Tag
Adicione uma tag aos nós da sua aplicação canário para distingui-los dos nós base.
Enter lane information
Lane Name: Insira um nome para a lane.
Lane Tag: A tag de destino para o tráfego que corresponde às regras desta lane.
Confirm Matching Relationship: Verifique se o número de nós de aplicação com esta tag atende às suas expectativas.
Lane Status: Selecione Enable.
Configure Routing and Canary Release Rules
Defina a regra para rotear tráfego para esta lane.
-
Canary Release Mode: Selecione Routing by Percentage.
-
Traffic Percentage: 30%.
NotaTambém é possível definir proporções de tráfego diferentes para cada rota base do gateway. Ao ativar este recurso, certifique-se de que a soma de todas as proporções de tráfego configuradas para essa rota base em todos os grupos de lanes não exceda 100%.
-
Após criar a lane, visualize seus detalhes na seção Traffic Allocation da página Full link Grayscale e execute as seguintes ações:
Na coluna Actions, clique em Enable para ativar a lane. O tráfego será então roteado de acordo com as regras da lane. O tráfego correspondente tem prioridade para a versão da aplicação com a tag da lane correspondente. Se nenhuma versão desse tipo for encontrada, o tráfego será roteado para a versão base sem tag.
Na coluna Actions, clique em Close para desativar a lane. O tráfego subsequente será roteado para a versão base sem tag.
Clique no ícone de visualização (
) para ver a proporção de tráfego da lane.Clique no ícone de status (
) para definir o status das aplicações dentro da lane.
Etapa 4: Testar o tráfego canário
By content
Utilize o comando curl para testar o tráfego canário. O resultado mostra que o tráfego passa pelos ambientes canário de A e C. Como não existe uma versão canário da aplicação B (tagueada como 'gray'), o tráfego é automaticamente roteado para sua versão base.
# Test command
curl -H "canary: gray" x.x.x.x/a
# Test result
Agray[10.0.3.177][config=base] -> B[10.0.3.195] -> Cgray[10.0.3.180]
By ratio
Execute o script Python a seguir para testar a distribuição de tráfego para roteamento por proporção. Instale o pacote requests e substitua x.x.x.x pelo endereço IP de entrada do seu gateway nativo da cloud.
O resultado mostra que aproximadamente 30% do tráfego é roteado para o ambiente canário.
(Opcional) Etapa 3: Observabilidade
Os recursos de observabilidade do MSE ajudam você a monitorar o desempenho da aplicação e diagnosticar problemas rapidamente.
Observabilidade do gateway nativo da cloud
Na página Routes do console do gateway nativo da cloud MSE, selecione a aba Services. Clique no service alvo e visualize suas métricas de tráfego na área Monitor.

Observabilidade da governança de microsserviços MSE
Na página Full link Grayscale do MSE Microservices Governance, clique na aplicação alvo. Na área Application QPS Monitoring, visualize o tráfego das versões base (sem tag) e canário da lane correspondente.

Total QPS: O total de consultas por segundo (QPS) para a aplicação.
Abnormal QPS: O número de solicitações com falha por segundo para a aplicação.
GrayQPS: O QPS para a versão 'gray' da aplicação.
Observabilidade do ARMS
Se sua aplicação estiver conectada ao Application Real-Time Monitoring Service (ARMS), monitore as métricas de negócio do seu ambiente canário no painel de liberação canário de ponta a ponta do ARMS para decidir se deve reverter ou prosseguir com a liberação.
A aba end-to-end canary release compara métricas-chave para cada aplicação nos ambientes online e canário, incluindo requests per second, error rate e average response time. Selecionar uma aplicação mostra suas métricas de instance count, request volume, exception count, error rate e response time, ajudando você a determinar se o tráfego canário está apresentando o desempenho esperado.