Sobes.tech
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:

  1. Implantação do grupo canário: A nova versão da aplicação é implantada num pequeno subconjunto de servidores ou utilizadores.
  2. Monitorização: É realizada uma monitorização cuidadosa de métricas (erros, desempenho, comportamento do utilizador) para o grupo canário.
  3. 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.