rollfuse
← Voltar ao blog

Feature Flags vs. Blue-Green Deployment: Contratos de Reversão Diferentes

Os dois padrões existem pra tornar a reversão barata e rápida. Eles chegam lá mantendo coisas diferentes "aquecidas" e prontas pra virar de novo, e essa diferença decide no que cada um é realmente bom.

O que o blue-green mantém aquecido

Dois ambientes completos rodam em paralelo: "blue" (atualmente no ar) e "green" (a versão nova, totalmente implantada mas ainda sem receber tráfego). O cutover é uma mudança de roteador ou DNS que manda todo o tráfego pro green de uma vez. Reverter é a mesma chave, invertida, instantânea, porque o blue nunca parou de rodar. A unidade de reversão é o ambiente inteiro: tudo sobre o deploy novo, de uma vez.

O que as feature flags mantêm aquecido

Um único ambiente roda o código novo, mas uma flag decide, por requisição, qual ramo executa. Reverter é uma mudança de Configuration: a flag passa a avaliar uma variação diferente, e os processos que já estão rodando pegam isso no próximo refresh de cache local, tipicamente segundos, sem redeploy nem mudança de roteador envolvida. A unidade de reversão é o que quer que aquela flag proteja: uma feature, um caminho de código, independente de tudo o mais que foi enviado no mesmo deploy.

Onde a diferença realmente importa

  • Reversão parcial. Blue-green é tudo-ou-nada: se um deploy junta cinco mudanças e uma está quebrada, reverter desfaz as cinco. Uma flag protege exatamente a quebrada; as outras quatro continuam rodando no build novo.
  • Custo de infraestrutura. Blue-green precisa do dobro da capacidade rodando durante a janela de cutover, dois ambientes completos, mesmo que brevemente. Uma flag não precisa de nenhuma capacidade extra: um ambiente, um build, um booleano decidindo qual ramo roda.
  • Exposição gradual. O cutover do blue-green é binário, 0% ou 100% no green, sem nada granular no meio a menos que o próprio roteador suporte divisão de tráfego ponderada (o que começa a parecer um canary, veja Canary vs. Feature Flags). Uma flag consegue escalonar 5% → 25% → 50% → 100% nativamente, com um guardrail anexado pra abortar automaticamente se uma métrica for violada no meio do estágio.
  • O que quebra e como você descobre. Blue-green pega qualquer coisa que quebra no nível de ambiente, crash loops, health checks falhando, configuração de infraestrutura errada, porque o ambiente inteiro sobe saudável ou não sobe. Uma flag pega qualquer coisa que quebra no nível de feature, o que exige uma métrica ou guardrail de verdade observando aquele comportamento específico, já que o ambiente ao redor não mudou e reporta saudável de qualquer forma.

Combinando os dois

Blue-green protege contra um deploy ruim: algo estruturalmente errado com o ambiente novo em si. Feature flags protegem contra uma feature ruim: algo comportamentalmente errado num caminho de código específico, estruturalmente ok fora isso. Um time que usa os dois normalmente faz blue-green na mudança de infraestrutura e protege com flag o comportamento de produto que veio dentro dela, então uma falha de nível de infra recebe a reversão instantânea e completa que o blue-green foi feito pra dar, e uma falha de nível de feature recebe a reversão granular e sem redeploy que uma flag foi feita pra dar, sem pagar o custo de dobrar a capacidade pra fazer blue-green de cada toggle de feature individualmente.