A liberação canária de aplicações frontend, combinada com políticas de monitoramento e rollback, cria um mecanismo robusto para garantir a estabilidade do sistema. A coordenação dessas três políticas ajuda a manter o alto desempenho e a alta estabilidade das aplicações frontend durante iterações e atualizações contínuas. Este tópico descreve como configurar um gateway nativo da nuvem do Microservices Engine (MSE) para implementar uma liberação canária em aplicações frontend.
Implemente uma liberação canária de ponta a ponta
Em cenários de microsserviços, as chamadas entre aplicações são aleatórias. Se uma nova versão estiver disponível para a aplicação Spring Cloud ou Dubbo implantada, o tráfego com características específicas pode não ser roteado para essa nova versão. Para implementar uma liberação canária de ponta a ponta, utilize a liberação canária de aplicações frontend em conjunto com a liberação canária de ponta a ponta baseada em gateways nativos da nuvem fornecida pelo MSE.
Toda requisição de um usuário frontend passa pelo Cloud-native Gateway, onde o sistema de permissões a autentica e adiciona um identificador de usuário exclusivo, como userid: 001, ao cookie da requisição.
O gateway possui um plug-in frontend-gray configurado que mapeia e encaminha o tráfego grayscale com base nas regras definidas.
Pré-requisitos
Crie um cluster gerenciado do Container Service for Kubernetes (ACK). Para mais informações, consulte Criar um cluster gerenciado do ACK.
Crie um gateway nativo da nuvem do MSE. Para mais informações, consulte Criar um gateway nativo da nuvem do MSE.
Implemente uma liberação canária em aplicações frontend usando gateways de Ingress do MSE
Instale o MSE Ingress Controller e use um gateway de Ingress do MSE para acessar o cluster ACK. Para mais informações, consulte Usar gateways de Ingress do MSE para acessar serviços em clusters ACK e ACS.
Etapa 1: Implante aplicações no cluster ACK
Para mais informações sobre como implantar uma aplicação, consulte Criar uma aplicação stateless usando um Deployment.
Etapa 2: Configure o plug-in frontend-gray no console MSE
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 Plug-in Marketplace.
Na página Plug-in Marketplace, pesquise por
frontend-graye clique no cartão do plug-infrontend-gray.-
Na página exibida, clique na aba Plug-in Configuration, selecione Domain-level plug-in rules na seção Rule Levels e clique em Add Rule. No painel Add Rule, configure a seguinte regra. Para detalhes de configuração, consulte Configurar regras.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAtive a chave Enable. Na lista suspensa Target, selecione
*(todos os domínios). Clique em OK.
Etapa 3: Verifique o resultado
-
Faça login no console do Container Service for Kubernetes (ACK). No painel de navegação à esquerda, clique em Clusters. Na página Clusters, clique no seu cluster. Na página de detalhes do cluster, acesse Network > Routes para encontrar o endpoint público.
Na lista de rotas, dois Ingresses baseados no gateway MSE estarão visíveis: frontend-base-ingress (regra:
/→ frontend-base-svc) e frontend-gray-ingress (regra:/→ frontend-gray-svc). Copie o endereço do endpoint na coluna Endpoint do frontend-base-ingress para verificação posterior. -
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a contaadmin/icepara acessar a versão base. O ID do usuário é 00000001. -
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a conta de usuário padrãouser/icepara acessar a versão canária. O ID do usuário é 00000002.
Implemente uma liberação canária em aplicações frontend usando clusters ACK
Etapa 1: Implante aplicações no cluster ACK
Para mais informações sobre como implantar uma aplicação, consulte Criar uma aplicação stateless usando um Deployment.
Etapa 2: Configure o plug-in frontend-gray no console MSE
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 Plug-in Marketplace.
Na página Plug-in Marketplace, pesquise por
frontend-graye clique no cartão do plug-infrontend-gray.-
Na página exibida, clique na aba Plug-in Configuration, selecione Domain-level plug-in rules na seção Rule Levels e clique em Add Rule. No painel Add Rule, configure a seguinte regra. Para detalhes de configuração, consulte Configurar regras.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAtive a chave Enable. Na lista suspensa Target, selecione
*(todos os domínios). Clique em OK.
Etapa 3: Adicione uma origem de serviço para o gateway
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 Routes. Em seguida, clique na aba Source.
-
Clique em Add Source. No painel Add Source, defina Source Type como Container Service. Para ACK/ASK/ACS Cluster, selecione o cluster ACK criado e clique em OK.
Ative a chave Listen to K8s Ingress. Por padrão, o gateway escuta recursos de Ingress em todos os namespaces. Para alterar isso, clique em Custom. Na seção Security Group Authorization, confirme o grupo de segurança e o intervalo de portas, cujo padrão é
1/65535.
Etapa 4: Adicione um serviço
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 Routes. Em seguida, clique na aba Services.
-
Clique em Add Service. No painel Add Service, configure os parâmetros do serviço e clique em OK.
Defina Service Source como Container Service. Para Namespace, selecione default. Na lista de serviços, marque as caixas de seleção de frontend-base-svc e frontend-gray-svc.
Etapa 5: Adicione uma rota 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 Routes. Na aba Routes, clique em Add Route.
-
Na página Add Route, configure os parâmetros e clique em Save and Advertise.
Defina Route Name como
base-route. Para Path, selecione Prefix is e insira/. Para Destination, selecione Single Service. Em Service Name, selecionefrontend-base-svc. Defina Service Protocol comoHTTP, Service Port como80e Timeout como60segundos.
Etapa 6: Adicione uma rota canária
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 Routes. Na aba Routes, clique em Add Route.
-
Na página Add Route, configure os parâmetros e clique em Save and Advertise.
Defina Route Name como
gray-routee Domain como*. Para Path, selecione correspondência de prefixo e insira/. Na seção Request Header, adicione uma nova entrada: defina Header Name comox-higress-tag, Condition como Prefix is e Value comogray. Para Destination, selecione Single Service e escolhafrontend-gray-svccomo Service Name. Defina o protocolo do serviço como HTTP e a porta como 80.NotaO valor
grayrepresenta a versão canária e corresponde à configuraçãograyDeployments.versionna configuração do plug-infrontend-gray.
Etapa 7: Verifique o resultado
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.
-
Na página Overview, clique na aba Endpoint para visualizar o endpoint público.
Confirme se um endereço de endpoint foi gerado para a instância NLB e se o Association Status está como Associated.
-
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a contaadmin/icepara acessar a versão base. O ID do usuário é 00000001. -
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a conta de usuário padrãouser/icepara acessar a versão canária. O ID do usuário é 00000002.
Implemente uma liberação canária em aplicações frontend usando instâncias ECS
Etapa 1: Implante duas versões da aplicação frontend em uma instância ECS
Endpoint da aplicação base:
120.***.137.243:80Endpoint da aplicação canária:
120.***.137.243:8081
Etapa 2: Adicione um serviço
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 Routes. Em seguida, clique na aba Services.
-
Clique em Add Service. No painel Add Service, defina Fixed Address como Fixed Address, configure os parâmetros do serviço e clique em OK.
Defina Service Name como
frontend-base-svc. Para Service Address, insira o endereço IP e a porta do servidor no formatoip:port. Use uma nova linha para cada endereço. Se utilizar um endereço IP público, configure um gateway NAT na VPC. Defina TLS Mode como Disable e clique em OK.
Etapa 3: Adicione uma rota 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 Routes. Na aba Routes, clique em Add Route.
-
Na página Add Route, configure os parâmetros e clique em Save and Advertise.
Defina Route Name como
base-route. Para Path, selecione Prefix is e insira/. Para Destination, selecione Single Service. Em Service Name, selecionefrontend-base-svc. Defina Service Protocol comoHTTP, Service Port como80e Timeout como60segundos.
Esta seção descreve os parâmetros para o serviço canário. Defina Service Name como frontend-gray-svc. Para Service Address, insira o endereço IP e a porta do serviço de destino no formato ip:port. Use uma nova linha para cada endereço. Se utilizar um endereço IP público, configure um gateway NAT na VPC. Defina TLS Mode como Disable.
Etapa 4: Adicione uma rota canária
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 Routes. Na aba Routes, clique em Add Route.
-
Na página Add Route, configure os parâmetros e clique em Save and Advertise.
NotaO valor
grayrepresenta a versão canária e corresponde à configuraçãograyDeployments.versionna configuração do plug-infrontend-gray.Defina Route Name como
gray-routee Domain como*. Para Path, selecione correspondência de prefixo e insira/. Na seção Request Header, adicione uma nova entrada: defina Header Name comox-higress-tag, Condition como Prefix is e Value comogray. Para Destination, selecione Single Service e escolhafrontend-gray-svccomo Service Name. Defina o protocolo do serviço como HTTP e a porta como 80.
Etapa 5: Configure o plug-in frontend-gray no console MSE
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 Plug-in Marketplace.
Na página Plug-in Marketplace, pesquise por
frontend-graye clique no cartão do plug-infrontend-gray.-
Na página exibida, clique na aba Plug-in Configuration, selecione Domain-level plug-in rules na seção Rule Levels e clique em Add Rule. No painel Add Rule, configure a seguinte regra. Para detalhes de configuração, consulte Configurar regras.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" baseDeployment: version: base grayDeployments: - name: beta-user version: gray enabled: trueAtive a chave Enable. Na lista suspensa Target, selecione
*(todos os domínios). Clique em OK.
Etapa 6: Verifique o resultado
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.
-
Na página Overview, clique na aba Endpoint para visualizar o endpoint público.
Confirme se um endereço de endpoint foi gerado para a instância NLB e se o Association Status está como Associated.
-
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a contaadmin/icepara acessar a versão base. O ID do usuário é 00000001. -
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a conta de usuário padrãouser/icepara acessar a versão canária. O ID do usuário é 00000002.
Implemente uma liberação canária em aplicações frontend usando CDN ou OSS
Etapa 1: Prepare um arquivo no OSS
Etapa 2: Adicione um serviço
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 Routes. Em seguida, clique na aba Services.
-
Clique em Add Service. No painel Add Service, defina DNS Domain Name como DNS Domain Name, insira o endereço do OSS na lista de domínios e clique em OK.
Defina Service Name como
static-oss, Service Port como80e TLS Mode como Disable.ImportanteSe o OSS e o gateway estiverem implantados na mesma região, recomendamos inserir os endpoints internos do OSS. Caso contrário, insira os endpoints públicos.
Etapa 3: Adicione uma rota
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 Routes. Na aba Routes, clique em Add Route.
-
Na página Add Route, configure os parâmetros e clique em Save and Advertise.
Exemplo de parâmetros: Defina Route Name como
project-a-app-1. Defina Domain como *. Para Path, selecione Prefix is, insira/app1e marque a caixa de seleção Case-sensitive. Para Destination, selecione Single Service. Na seção backend service, selecione static-oss como Service Name, HTTP como Service Protocol e 80 como Service Port. Defina Timeout como 60 segundos.
Etapa 4: Configure o plug-in frontend-gray no console MSE
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 Plug-in Marketplace.
Na página Plug-in Marketplace, pesquise por
frontend-graye clique no cartão do plug-infrontend-gray.-
Na página exibida, clique na aba Plug-in Configuration, selecione Domain-level plug-in rules na seção Rule Levels e clique em Add Rule. No painel Add Rule, configure a seguinte regra. Para detalhes de configuração, consulte Configurar regras.
grayKey: userid rules: - name: beta-user grayKeyValue: - "00000002" - "00000003" rewrite: host: xx.oss-cn-shanghai.aliyuncs.com ## OSS endpoint indexRouting: "/app1": "/project-a/app1/{version}/index.html" # Path rewrite of the HTML home page fileRouting: "/app1": "/project-a/app1/{version}" # Path rewrite of resources such as CSS properties, JavaScript scripts, and images baseDeployment: version: dev grayDeployments: - name: beta-user version: 0.0.1 enabled: true
Etapa 5: Verifique o resultado
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.
-
Na página Overview, clique na aba Endpoint para visualizar o endpoint público.
Confirme se um endereço de endpoint foi gerado para a instância NLB e se o Association Status está como Associated.
-
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a contaadmin/icepara acessar a versão base. O ID do usuário é 00000001. -
Acesse o endpoint público
nlb-qv04p*******cn-hangzhou.nlb.aliyuncsslb.com. Faça login com a conta de usuário padrãouser/icepara acessar a versão canária. O ID do usuário é 00000002.
Perguntas frequentes
Posso configurar políticas de reescrita e liberações canárias em aplicações frontend simultaneamente?
Se a origem do serviço não for CDN ou OSS, é possível configurar liberações canárias de aplicações frontend e políticas de reescrita ao mesmo tempo, fazendo com que ambas entrem em vigor.
Caso a origem do serviço seja CDN ou OSS, não é possível configurar liberações canárias de aplicações frontend e políticas de reescrita simultaneamente. Isso ocorre porque as políticas de reescrita relevantes já estão implementadas no plug-in frontend-gray. Configurar uma política de reescrita adicional pode causar conflitos, resultando em erros como o código de status 403.
Posso injetar variáveis globais na página inicial HTML?
Injete scripts JavaScript globais na tag <head> (geralmente propriedades como estilos CSS) da página HTML, ou nas primeiras e últimas posições da tag <body> da página HTML.
Utilize injection para inserir código na página inicial HTML. É possível injetar código na tag <head>, ou nas posições first (primeira) e last (última) da tag <body>.
grayKey: userid
rules:
- name: inner-user
grayKeyValue:
- '00000001'
- '00000005'
baseDeployment:
version: base
grayDeployments:
- name: beta-user
version: gray
enabled: true
weight: 80
injection:
head:
- <script>console.log('Header')</script>
body:
first:
- <script>console.log('hello world before')</script>
- <script>console.log('hello world before1')</script>
last:
- <script>console.log('hello world after')</script>
- <script>console.log('hello world after2')</script>
Quando uma versão canária entra em vigor?
Suponha que um usuário esteja na versão 0.0.1 de uma aplicação frontend. Se você lançar a versão 0.0.2 e o usuário corresponder à regra canária, a nova versão entrará em vigor imediatamente?
Isso se deve aos seguintes motivos:
Para que a versão canária entre em vigor em tempo real, o backend precisa controlar a versão dinamicamente. O lançamento frontend não pode ser desacoplado do lançamento backend. A aceleração via CDN não pode ser realizada, pois a estabilidade da página depende fortemente da interface.
Se a versão canária entrar em vigor em tempo real, quando os clientes estiverem usando um recurso específico, um botão em uso pode ficar indisponível a qualquer momento. Isso resulta em uma experiência de usuário ruim.
Quando posso atualizar uma página?
Na maioria dos casos, é necessário fazer login novamente no site após o tempo limite da sessão.
É possível fazer login na aplicação através da página de login.
Portanto, a página deve ser atualizada durante o processo de login para obter as informações mais recentes da liberação canária. O exemplo a seguir mostra o código de login frontend:
async function handleLogin(values: LoginParams) {
try {
const result = await login(values);
if (result.success) {
message.success ('Logon succeeded. ');
await updateUserInfo();
const urlParams = new URL(window.location.href).searchParams;
window.location.href = `${urlParams.get('redirect') || '/'}`;
return;
}
console.log(result);
// Configure an error message that is returned for logon failures. The following code shows a sample error message.
setLoginResult(result);
} catch (error) {
message.error('Logon failed. Try again. ');
console.log(error);
}
}