Middle+
O que são implantações canário?
sobes.tech IA
Resposta da IA
A implantação canária é uma estratégia de lançamento de novas funcionalidades, na qual a atualização é implementada gradualmente a uma pequena parte dos utilizadores e, na ausência de problemas, é estendida a toda a audiência.
Fases principais:
- Implantação do grupo canário: A nova versão da aplicação é implantada num pequeno subconjunto de servidores ou utilizadores.
- Monitorização: É realizada uma monitorização cuidadosa de métricas (erros, desempenho, comportamento do utilizador) para o grupo canário.
- Expansão ou reversão:
- Se a monitorização indicar sucesso, a implantação é gradualmente expandida para um grupo maior de utilizadores.
- Em caso de problemas, a implantação é revertida para o grupo canário, protegendo a maioria dos utilizadores.
Vantagens:
- Minimização de riscos: Problemas afetam um pequeno subconjunto de utilizadores.
- Reversão rápida: É fácil reverter para a versão anterior.
- Testes em condições reais: Avaliação do comportamento da nova funcionalidade sob carga real.
Desvantagens:
- Complexidade de infraestrutura: Requer suporte para várias versões da aplicação simultaneamente.
- Gestão de tráfego: São necessários mecanismos para encaminhar o tráfego para diferentes versões.
- Análise de dados: Requer uma recolha e análise eficazes de métricas.
Exemplo de implementação no Kubernetes:
// Deployment para v1
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-v1
spec:
replicas: 10 // Quantidade principal
selector:
matchLabels:
app: my-app
version: v1
template:
metadata:
labels:
app: my-app
version: v1
spec:
containers:
- name: my-app
image: my-registry/my-app:v1
---
// Deployment para canário v2
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-v2-canary
spec:
replicas: 1 // Grupo canário
selector:
matchLabels:
app: my-app
version: v2
template:
metadata:
labels:
app: my-app
version: v2
spec:
containers:
- name: my-app
image: my-registry/my-app:v2
---
// Serviço para encaminhar tráfego (usando seletores)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
Para gerir a distribuição de tráfego entre v1 e v2, são utilizados controladores Ingress (por exemplo, Nginx Ingress, Istio) com capacidade de distribuição ponderada de tráfego.