Blue-green Deployment: o que é e como implementar sem risco

Entregar novas versões de software sem derrubar a aplicação deixou de ser diferencial e virou requisito. Equipes de engenharia precisam implantar mudanças várias vezes por dia, reduzir o risco de cada liberação e garantir que um rollback seja questão de segundos. É nesse cenário que o blue-green deployment ganhou espaço como uma das estratégias mais confiáveis para reduzir downtime.

A ideia é simples: manter dois ambientes de produção praticamente idênticos, chamados de azul e verde. Enquanto um serve o tráfego real, o outro recebe a nova versão e é validado em isolamento. Quando tudo está pronto, um switch no load balancer direciona os usuários para o ambiente atualizado. Se algo der errado, o rollback é imediato.

Este guia detalha o que é blue-green deployment, como a técnica funciona na prática, suas vantagens, desafios, como implementar em Kubernetes e AWS, e por que monitorar a versão green antes do switch é o passo que mais diferencia equipes maduras no universo de Site Reliability Engineering.

O que é blue-green deployment

Blue-green deployment é uma estratégia de release em que duas infraestruturas de produção rodam em paralelo. O ambiente blue é o que está servindo o tráfego real. O ambiente green recebe a nova versão do software. Um componente de roteamento (load balancer, proxy reverso ou DNS) decide para qual dos dois os usuários serão direcionados.

O termo foi popularizado por Martin Fowler e Jez Humble no livro Continuous Delivery. A premissa é inverter a lógica tradicional do deploy in-place: em vez de atualizar servidores vivos e rezar para nada quebrar, você valida a nova versão em um ambiente espelhado e só depois transfere a carga.

Quando a versão green é promovida a produção, ela vira o novo blue. O ambiente antigo fica em standby por algumas horas ou dias, pronto para receber tráfego de volta em caso de falha. No deploy seguinte, o papel se inverte: o green antigo agora é blue e um novo green é preparado com a próxima versão.

Como funciona o blue-green deployment passo a passo

O fluxo básico tem quatro etapas bem definidas, independentemente da plataforma:
1. Provisionamento do ambiente green. Um conjunto idêntico de infraestrutura (máquinas, containers, banco replicado ou compartilhado) é preparado com a nova versão da aplicação. Código novo, dependências atualizadas, schema alinhado.

2. Validação em isolamento. A versão green roda com tráfego sintético: smoke tests, integração, verificações end-to-end e métricas básicas de saúde. Nenhum usuário real toca o green ainda.

3. Switch do roteador. Quando a green passa em todos os checks, o load balancer (ALB na AWS, Ingress no Kubernetes, nginx ou HAProxy) tem a regra alterada para enviar o tráfego para o novo ambiente. Do ponto de vista do usuário, a transição é instantânea.

4. Retenção do blue antigo. O ambiente antigo não é destruído imediatamente. Ele fica em standby por um período definido pela equipe (minutos, horas ou dias), caso seja necessário reverter o tráfego.

Esse fluxo reproduz, em escala de release, o que o failover faz em escala de falha de infraestrutura: trocar um ambiente por outro sem interrupção.

Blue-green deployment vs canary, rolling e recreate

Blue-green não é a única estratégia de deploy sem downtime. Entender quando usar cada abordagem evita escolher a mais custosa quando uma mais simples resolveria.

EstratégiaComo funcionaDowntimeRollbackCusto de infraQuando usar
Blue-greenDois ambientes completos com switch atômicoZeroInstantâneoAlto (2x)Releases críticos com rollback rápido obrigatório
CanaryNova versão recebe 5%, 25% e 100% do tráfego gradualmenteZeroGradual (reduzir tráfego)MédioValidar em produção com risco controlado
RollingNós ou pods substituídos um a umPróximo de zeroLento (rolling reverso)BaixoMudanças backward-compatible em apps stateless
RecreateDerruba tudo e sobe tudoAltoLentoMuito baixoDev, homologação ou apps não críticas

 
A diferença principal entre blue-green e canary está no controle do tráfego: blue-green faz um corte atômico, enquanto canary libera a nova versão de forma progressiva. Canary é mais seguro para detectar bugs que só aparecem em escala. Blue-green é mais seguro para bugs que exigem rollback imediato total.

Vantagens do blue-green deployment

As equipes que adotam blue-green deployment relatam ganhos concretos nos principais indicadores de confiabilidade:

Rollback em segundos. Quando um bug crítico chega a produção, a reversão consiste em alterar uma única regra de roteamento. Não é preciso reimplantar código, restaurar backup ou aguardar pipeline reverso. O ambiente antigo continua quente e pronto.

Zero downtime real. A transição entre blue e green é atômica do ponto de vista do usuário. Sessões ativas podem continuar no ambiente antigo enquanto novas requisições vão para o novo, dependendo da configuração do balancer.

Validação em produção controlada. A versão green pode receber testes sintéticos, chamadas de APIs internas e smoke tests automatizados usando a mesma infraestrutura, rede e dependências do ambiente final. Problemas que só aparecem em produção são detectados antes de afetar clientes.

Teste de disaster recovery embutido. Manter dois ambientes sincronizados exercita os mesmos processos de replicação, provisionamento e automação que um plano de DR exige. A capacidade de switch entre ambientes é treinada a cada release.

Integração natural com GitOps. O modelo GitOps se beneficia do blue-green porque o estado desejado pode ser expresso em manifests versionados. Cada ambiente tem um selector de labels diferente e a promoção é feita por commit.

Desafios e desvantagens do blue-green deployment

O custo da estratégia é real. Entender os trade-offs evita surpresas na fatura e na operação:

Custo de infraestrutura duplicada. Manter dois ambientes completos implica em dobrar servidores, containers e, em muitos casos, licenças. Em cloud, isso pode ser mitigado com provisionamento on-demand do ambiente green pouco antes do deploy. Em on-premises, a duplicação costuma ser permanente.

Gestão de estado e sessões. Aplicações stateful com sessões em memória precisam de estratégia clara: cookies com afinidade, session store externo (Redis ou Memcached) ou drain graceful do ambiente antigo. Sem isso, usuários podem ser deslogados no switch.

Complexidade do banco de dados. Um único banco compartilhado pelos dois ambientes exige migrações backward e forward compatible. Bancos separados exigem replicação bidirecional ou sincronização pós-switch, o que raramente é trivial.

Overhead operacional. O pipeline de CI/CD precisa orquestrar provisionamento, validação e switch de forma confiável. Ferramentas como Argo Rollouts, AWS CodeDeploy, Spinnaker e Flagger existem justamente para reduzir esse overhead.

Nem toda app se beneficia. Aplicações com long-lived connections (WebSockets, gRPC streaming) exigem cuidado adicional para drenar conexões antes do switch definitivo.

Banco de dados em blue-green deployment

O banco de dados é o maior ponto de fricção da estratégia. Ao contrário do código da aplicação, dados não podem ser simplesmente clonados e trocados. Três abordagens predominam:

Banco compartilhado com schema compatível. Blue e green usam o mesmo cluster de banco. Toda migração precisa ser backward compatible: a versão antiga deve continuar funcionando com o novo schema e a nova com o antigo. Colunas são adicionadas antes e removidas depois da estabilização.

Expand-contract pattern. Migrações acontecem em duas fases. Primeiro expande (adiciona nova coluna, mantém a antiga, código de ambas as versões funciona). Depois contrai (remove a coluna antiga só após a nova versão estar 100% estabilizada).

Bancos separados com replicação. Cada ambiente tem seu banco, com replicação entre eles. Mais complexo operacionalmente, mas isola falhas. Raramente usado em apps transacionais sem cuidado extremo.

A regra de ouro: planeje migrações de schema como parte do release, não como um passo independente. Toda mudança de banco precisa ser compatível com pelo menos duas versões consecutivas da aplicação.

Monitoramento da versão green antes do switch

Esta é a etapa onde equipes maduras se diferenciam. Trocar o tráfego para um ambiente que não foi validado com métricas reais é apostar no otimismo. O switch precisa ser uma decisão baseada em sinais concretos.

Os pilares da observabilidade (métricas, logs e traces) precisam estar instrumentados no green desde o primeiro pod que sobe. Antes do switch, a equipe deve ter dashboards vivos mostrando:

Taxa de erro (R do método RED). Percentual de requisições com falha no green durante smoke tests e tráfego sintético. Qualquer valor acima do baseline do blue atual derruba a promoção.

Latência P95 e P99. Tempo de resposta sob carga controlada. Regressão de latência acima de 10% frente ao baseline do blue é critério objetivo para abortar.

Saturação de recursos. CPU, memória, conexões de banco e file descriptors. Vazamentos só aparecem com carga sustentada. Não pule a janela de soak test.

Sucesso de smoke tests end-to-end. Suites automatizadas que exercitam os caminhos críticos de negócio (login, checkout, busca). 100% de sucesso é critério eliminatório.

Logs de erro agregados. Picos de exceções novas, stack traces inéditas ou erros de integração com dependências externas sinalizam que a nova versão tem gaps.

Equipes que operam observabilidade como disciplina definem um go/no-go checklist com SLIs objetivos. Se todos os indicadores ficam dentro dos limites aceitos por um período mínimo (tipicamente 10 a 30 minutos de carga real ou sintética), o switch é aprovado. Caso contrário, rollback automático.

Como implementar blue-green deployment em Kubernetes e AWS

A implementação varia por plataforma, mas a mecânica é sempre a mesma: dois conjuntos de recursos paralelos mais um ponto único de roteamento.

No ecossistema Kubernetes, o padrão mais simples usa dois Deployments com labels diferentes e um Service que aponta para o label ativo. Trocar o selector do Service faz o switch de forma atômica:




service.yaml
# Service que roteia para o ambiente ativo
apiVersion: v1
kind: Service
metadata:
  name: app-production
spec:
  selector:
    app: webapp
    version: blue
  ports:
    - port: 80
      targetPort: 8080

 
Para automatizar análise de métricas, pausa para validação e rollback, use ferramentas como projeto Argo Rollouts ou Flagger. Ambas acompanham SLOs em tempo real e decidem se promovem ou revertem.

Em AWS, a abordagem mais comum usa dois Target Groups associados a um Application Load Balancer (ALB). O switch acontece por alteração de weight na listener rule: 100% para blue ou 100% para green. Route 53 com weighted routing policy oferece alternativa em nível DNS, útil para arquiteturas multi-região. O whitepaper de referência da AWS detalha variações por serviço (ECS, Lambda, Elastic Beanstalk).

Ferramentas como AWS CodeDeploy, CodePipeline e Spinnaker orquestram o fluxo completo: provisionar green, rodar testes, validar métricas, executar switch e manter blue por rollback. Para fluxos mais simples, um GitHub Actions com kubectl patch no selector resolve.

Boas práticas de blue-green deployment

Equipes que operam blue-green em escala consolidam um conjunto de práticas que reduzem o custo e aumentam a confiabilidade:

Automatize o pipeline inteiro. Provisionamento, deploy, testes, switch e rollback devem ser scripted. Switch manual em produção é receita para erro humano.

Use feature flags para desacoplar deploy e release. O código da nova versão pode chegar ao green desativado por feature flag. O switch libera a infraestrutura e as flags liberam as funcionalidades em cadências diferentes.

Defina SLOs e critérios objetivos para o switch. Não dependa de julgamento subjetivo para promover uma versão. Taxa de erro, latência P95 e saturação devem ter limites acordados entre SRE e engenharia.

Pratique rollback regularmente. Simule falhas controladas para garantir que o rollback funciona e que a equipe sabe executá-lo. Um rollback não ensaiado é tão arriscado quanto nenhum rollback.

Monitore o custo com atenção. Provisionamento on-demand do green reduz custo de infra ociosa. Em cloud, desligar o blue antigo após o período de segurança economiza significativamente ao longo do ano.

Documente dependências externas. APIs de terceiros, filas e caches compartilhados precisam suportar requisições de ambas as versões durante a janela de switch. Referências como a documentação oficial do Kubernetes ajudam a mapear contratos entre serviços.

SRE & Confiabilidade

Transformamos operações reativas em engenharia de confiabilidade (SRE).

Implementamos SLIs, SLOs e Error Budgets para reduzir o MTTR e eliminar a fadiga de alertas das suas equipes de operação.

Fale com um Especialista →

Conclusão

Blue-green deployment é uma das estratégias mais eficazes para reduzir o risco operacional de releases em aplicações críticas. O custo da infraestrutura duplicada é compensado pela possibilidade de rollback em segundos e pela redução direta de MTTR em incidentes gerados por deploy.

A técnica funciona melhor quando está integrada a um pipeline automatizado, a migrações de banco compatíveis e, principalmente, a um processo de observabilidade que valide a versão green com critérios objetivos antes do switch. Sem esse terceiro pilar, o blue-green vira apenas uma arquitetura cara com rollback fácil, não uma prática de confiabilidade.

Se a sua equipe está estruturando deploys de baixo risco e precisa de visibilidade completa da versão green antes do corte, fale com um especialista da OpServices para entender como apoiar a sua estratégia de release com monitoramento e observabilidade sob medida.


Perguntas Frequentes

O que é blue-green deployment?
Blue-green deployment é uma estratégia de release que mantém dois ambientes de produção espelhados, chamados de blue e green, para entregar novas versões de software sem downtime. Enquanto o ambiente blue serve o tráfego atual, o green recebe a nova versão e é validado em isolamento. Quando a equipe confirma que a nova versão está saudável, o roteador de tráfego (load balancer, Ingress ou DNS) aponta para o green. Caso algum problema apareça, o rollback consiste em apontar o tráfego de volta para o blue, em segundos. A técnica foi popularizada por Martin Fowler e Jez Humble no contexto de Continuous Delivery.
Qual a diferença entre blue-green deployment e canary deployment?
A diferença principal está no corte de tráfego. Blue-green deployment faz uma transição atômica: em um instante 100% do tráfego migra do ambiente antigo para o novo. Canary deployment libera a nova versão de forma progressiva, começando com uma fração pequena de usuários (5%, 10%, 25%) e aumentando gradualmente conforme a versão prova estabilidade. Blue-green é melhor quando rollback imediato total é obrigatório e a equipe tem infraestrutura para dois ambientes completos. Canary é melhor quando o risco precisa ser diluído ao longo do tempo e bugs só aparecem em escala real. Muitas equipes maduras combinam as duas estratégias, rodando canary dentro do green antes do switch.
Quais são as vantagens do blue-green deployment?
Os benefícios centrais do blue-green deployment são rollback instantâneo, zero downtime percebido pelo usuário, validação da nova versão em infraestrutura idêntica à produção e integração natural com práticas de GitOps e Continuous Delivery. O rollback consiste em alterar uma regra de roteamento, sem redeploy ou restore. A transição atômica evita janelas de degradação. Smoke tests e testes sintéticos podem exercitar a versão green com as mesmas dependências, rede e latências de produção. Além disso, manter dois ambientes sincronizados exercita continuamente os mesmos processos de provisionamento e replicação exigidos por um plano de disaster recovery, o que amplia a maturidade operacional da equipe.
Como fazer rollback em um blue-green deployment?
O rollback em blue-green deployment é feito revertendo a regra de roteamento que redireciona o tráfego para o ambiente anterior. Se a aplicação usa um load balancer, a listener rule é alterada para apontar de volta ao Target Group blue. Em Kubernetes, o selector do Service é revertido para as labels do Deployment antigo. Em DNS com weighted routing, o peso é invertido. O tempo total costuma ser de segundos. Para que o rollback funcione, o ambiente antigo deve permanecer em standby por um período de segurança (minutos a dias), e migrações de banco precisam ser backward compatible, garantindo que a versão antiga continue funcionando com o schema novo.
Como lidar com banco de dados em blue-green deployment?
Lidar com banco em blue-green deployment exige que toda migração de schema seja backward e forward compatible. A prática mais usada é o padrão expand-contract: primeiro a mudança é feita de forma aditiva (nova coluna, nova tabela), mantendo as estruturas antigas funcionando; depois, após o switch definitivo e período de estabilização, as estruturas antigas são removidas. Isso garante que blue e green possam ler e escrever no mesmo banco durante a janela de coexistência. Bancos separados com replicação são uma alternativa para isolamento, mas aumentam a complexidade operacional. A regra de ouro é tratar schema e código como release conjunto, nunca como passos desacoplados.

Trabalho há mais de 15 anos no mercado B2B de tecnologia e hoje atuo como Gerente de Marketing da OpServices e Líder em Projetos de Governança para Inteligência Artificial.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress