← Voltar ao blog
DevOps

Blue-Green Deployment: Como o BizBiz Eliminou Downtime

12 de maio de 202612 min min de leitura

Case real: como implementamos Blue-Green Deployment no BizBiz com Docker e nginx. De 5 minutos para 0 segundos de downtime por deploy.

O que é Blue-Green Deployment e por que o BizBiz migrou para esse modelo?

Se você já passou pela tensão de fazer deploy em produção na sexta-feira tarde, sabe que atualizações de software podem ser arriscadas. Uma falha no deploy pode derrubar o sistema, afetar vendas e comprometer a experiência dos usuários. Foi exatamente para eliminar esse risco que implementamos Blue-Green Deployment no BizBiz, nosso marketplace B2B para pequenas empresas brasileiras.

Blue-Green Deployment é uma estratégia de deploy que mantém dois ambientes de produção idênticos — um "azul" (blue) ativo atendendo usuários, e um "verde" (green) onde você testa as novas versões. Quando a nova versão está pronta, você simplesmente troca o tráfego do ambiente azul para o verde. Se algo der errado, volta para o azul em segundos.

Por que o BizBiz precisava de deploys sem downtime?

O BizBiz conecta fornecedores e pequenos varejistas brasileiros em uma plataforma onde cada minuto offline representa vendas perdidas. Com transações PIX que precisam ser processadas em tempo real e catálogos que são atualizados constantemente, qualquer interrupção impacta diretamente o faturamento dos nossos usuários.

Antes do blue-green, nossos deploys seguiam o modelo tradicional:

  • Parar o servidor de produção
  • Fazer backup do banco de dados
  • Atualizar o código
  • Reiniciar os serviços
  • Torcer para tudo funcionar

Esse processo gerava entre 2 a 5 minutos de downtime por deploy. Com 2-3 atualizações por semana, estávamos acumulando mais de 30 minutos mensais de indisponibilidade — inaceitável para um marketplace que precisa funcionar 24/7.

Arquitetura Blue-Green: como implementamos no BizBiz

Nossa solução combina Docker, nginx e um sistema automatizado de health checks. A arquitetura funciona assim:

1. Dois ambientes idênticos

Criamos dois stacks completos do BizBiz:

  • Blue (Azul): Produção ativa em bizbiz-blue
  • Green (Verde): Standby em bizbiz-green

Cada ambiente roda em containers Docker separados com suas próprias instâncias de React frontend, Node.js backend e PostgreSQL. O nginx atua como load balancer na frente, direcionando o tráfego para o ambiente ativo.

2. nginx como switcher inteligente

Configuramos o nginx com upstream dinâmico que monitora a saúde de ambos os ambientes:

upstream bizbiz_active {
    server bizbiz-blue:3000 max_fails=3 fail_timeout=30s;
}

upstream bizbiz_standby {
    server bizbiz-green:3000 max_fails=3 fail_timeout=30s;
}

server {
    location / {
        proxy_pass http://bizbiz_active;
        proxy_set_header Host $host;

        # Health check endpoint
        location /health {
            access_log off;
            return 200 "healthy\n";
        }
    }
}

3. Health checks automatizados

Criamos um sistema que verifica a saúde de cada ambiente a cada 10 segundos:

  • Conectividade com banco de dados
  • Tempo de resposta da API
  • Integridade dos serviços PIX
  • Cache Redis funcionando

Se algum check falha no ambiente ativo, o tráfego é automaticamente redirecionado para o standby.

Processo de deploy: zero downtime na prática

Com a infraestrutura pronta, nosso processo de deploy virou rotina:

Passo 1: Deploy no ambiente verde (standby)

# Script de deploy automatizado
./deploy.sh green v2.1.4

# O que acontece:
# 1. Pull da nova versão do código
# 2. Build da nova imagem Docker
# 3. Atualização do ambiente verde
# 4. Migração de banco (se necessário)
# 5. Testes automatizados

Passo 2: Testes de sanidade

Antes de trocar ambientes, executamos uma bateria de testes no ambiente verde:

  • Criação e login de usuários
  • Processo completo de compra
  • Integração PIX funcionando
  • Sincronização de catálogos
  • Performance dos endpoints críticos

Passo 3: Switch instantâneo

Quando tudo está funcionando, trocamos os ambientes editando uma única linha no nginx:

# Troca o upstream ativo
sed -i 's/bizbiz-blue/bizbiz-green/g' /etc/nginx/sites-enabled/bizbiz.conf
nginx -s reload

A troca leva menos de 2 segundos. Os usuários não percebem nada — suas sessões continuam ativas e as transações em andamento são preservadas.

Passo 4: Rollback instantâneo (se necessário)

Se descobrimos um bug após o deploy, o rollback é igualmente rápido:

# Volta para o ambiente anterior
sed -i 's/bizbiz-green/bizbiz-blue/g' /etc/nginx/sites-enabled/bizbiz.conf
nginx -s reload

Em 30 segundos, estamos de volta à versão anterior funcionando.

Resultados: de 5 minutos para 0 segundos de downtime

Os números falam por si:

  • Downtime por deploy: 5 minutos → 0 segundos
  • Tempo total de deploy: 20 minutos → 8 minutos
  • Deploys por semana: 2-3 → 5-8 (maior confiança)
  • Rollbacks necessários: 2 em 6 meses (sem impacto nos usuários)
  • Uptime mensal: 99.7% → 99.98%

Benefícios além do uptime

O blue-green não melhorou apenas a disponibilidade:

  • Deploys na segunda-feira: Sem mais "sexta-feira é day de deploy não"
  • Mais features rapidamente: Equipe confiante para lançar melhorias
  • Testing em produção: Ambiente verde espelha exatamente a produção
  • Menos stress: Equipe dorme melhor sabendo que rollback é instantâneo

Desafios e lições aprendidas

Sincronização de banco de dados

O maior desafio foi lidar com migrações de banco durante o deploy. Nossa solução:

  • Backward compatibility: Sempre escrever migrações compatíveis com a versão anterior
  • Estratégia de duas fases: Primeiro deploy com estruturas novas (mas não usadas), segundo deploy começa a usar
  • Read replicas: Ambiente verde sempre lê de uma replica atualizada

Gerenciamento de assets estáticos

CSS e JavaScript precisam ser versionados corretamente para evitar incompatibilidades:

  • Hash nos nomes dos arquivos (webpack automatiza isso)
  • CDN configurado para cache-busting automático
  • Assets compartilhados via volume Docker persistente

Monitoramento e alertas

Implementamos alertas em tempo real que notificam a equipe sobre:

  • Falhas nos health checks
  • Switches automáticos de ambiente
  • Aumentos súbitos no tempo de resposta
  • Erros 5xx acima do threshold

Quando vale a pena implementar blue-green?

Blue-green deployment não é bala de prata. Vale a pena quando:

✅ Faz sentido implementar:

  • Alta disponibilidade é crítica: E-commerce, SaaS, APIs de pagamento
  • Deploys frequentes: +3 deploys por semana
  • Rollbacks são comuns: Bugs chegam em produção ocasionalmente
  • Equipe pequena: Não dá para fazer manutenção em horários "mortos"
  • Infraestrutura dockerizada: Containers facilitam muito a implementação

❌ Pode não valer a pena:

  • Aplicações simples: Sites institucionais, blogs, landing pages
  • Deploys raros: Menos de 1 deploy por mês
  • Recursos limitados: Dobra o uso de servidor (temporariamente)
  • Migrações complexas: Mudanças de schema muito frequentes

Implementação prática: do zero ao blue-green

Se você quer implementar blue-green na sua aplicação, o caminho é:

1. Dockerize sua aplicação

Sem containers, blue-green fica muito mais complexo. Docker simplifica a criação de ambientes idênticos.

2. Externalize configurações

Bancos de dados, Redis, variáveis de ambiente — tudo deve ser configurável via environment variables.

3. Implemente health checks

Crie endpoints que validem a saúde real da aplicação, não apenas se o servidor responde.

4. Configure load balancer

nginx, HAProxy ou ALB da AWS — qualquer um serve. O importante é poder trocar upstreams rapidamente.

5. Automatize o processo

Scripts de deploy, health checks e switch de ambientes devem ser automáticos. Manual = erro humano.

Custos: vale o investimento?

Para o BizBiz, o ROI foi evidente:

  • Implementação inicial: ~40 horas de desenvolvimento
  • Custo adicional de servidor: +30% durante deploys (temporário)
  • Economia em downtime: R$ 15.000/mês em vendas não perdidas
  • Produtividade da equipe: +25% (menos tempo debugando problemas de deploy)

O payback foi de 2 meses. Considerando que permite deploys mais frequentes e seguros, o benefício a longo prazo é ainda maior.

Quer implementar blue-green na sua aplicação?

Implementamos blue-green deployment para diversas empresas brasileiras. Podemos avaliar sua arquitetura atual e criar uma estratégia de migração sem riscos.

Quer deploys sem downtime? Podemos ajudar. Fale conosco pelo WhatsApp.

Perguntas frequentes

O que é Blue-Green Deployment?

Blue-Green Deployment é uma estratégia que mantém dois ambientes de produção idênticos. Um ambiente (blue) atende os usuários enquanto o outro (green) recebe atualizações. Quando a nova versão está pronta, você troca o tráfego instantaneamente, eliminando downtime.

Qual a diferença entre Blue-Green e Rolling Deployment?

Blue-Green troca ambientes completamente (instantâneo, zero downtime), enquanto Rolling atualiza servidores gradualmente (pode ter instabilidade temporária). Blue-Green é melhor para aplicações críticas, Rolling para clusters grandes.

Blue-Green Deployment é caro de implementar?

O custo adicional é temporário durante deploys (+30-50% de recursos). Para aplicações críticas, o ROI é positivo rapidamente considerando vendas não perdidas por downtime e maior produtividade da equipe.

Preciso de Kubernetes para Blue-Green?

Não. Pode ser implementado com Docker Compose + nginx (como no BizBiz), AWS ALB, ou qualquer load balancer que permita trocar upstreams. Kubernetes facilita, mas não é obrigatório.

Precisa de ajuda com seu projeto?

Fale conosco e descubra como podemos ajudar