O que é deploy com zero downtime?
O deploy com zero downtime é a prática de lançar uma nova versão de um serviço sem qualquer interrupção para os usuários - sem janela de manutenção, sem erros, sem requisições descartadas.
Os usuários esperam que o software esteja disponível 24 horas por dia, então derrubar o sistema para fazer deploy é cada vez mais inaceitável. O deploy com zero downtime alcança lançamentos contínuos ao manter sempre uma versão saudável atendendo o tráfego enquanto a nova é introduzida e verificada.
O que ele exige
O requisito essencial é que exista sempre uma versão funcional tratando as requisições. Em vez de parar a versão antiga e iniciar a nova, você sobe a nova versão ao lado da antiga, confirma que está saudável e só então direciona o tráfego para ela - assim os usuários nunca encontram uma lacuna.
Técnicas que o viabilizam
- Rolling deployments que substituem instâncias em pequenos lotes de cada vez.
- Blue-green deployments que alternam entre dois ambientes completos.
- Canary releases que deslocam o tráfego gradualmente.
- Load balancers que drenam as conexões antes de remover uma instância.
Health checks e drenagem de conexões
O zero downtime depende de saber quando uma nova instância está realmente pronta e de deixar uma antiga finalizar de forma graciosa. Os health checks bloqueiam o tráfego até que a nova versão consiga atendê-lo, e a drenagem de conexões permite que as requisições em andamento sejam concluídas antes que uma instância antiga seja removida, de modo que nenhuma requisição seja cortada.
A parte difícil: estado e schemas
Serviços stateless são fáceis de fazer deploy com zero downtime; bancos de dados e schemas são o desafio. As mudanças de schema precisam ser retrocompatíveis para que as versões antiga e nova possam coexistir durante o rollout. Técnicas como as migrações expand-and-contract permitem evoluir o schema sem nunca exigir um cutover sincronizado.
Por que isso importa
Além da satisfação dos usuários, o deploy com zero downtime é o que torna viável lançar com frequência. Se cada deploy significasse downtime, as equipes acumulariam mudanças e fariam deploy raramente. Deploys contínuos removem essa penalidade, viabilizando os lançamentos pequenos e frequentes dos quais uma boa entrega depende.
Principais conclusões
- O deploy com zero downtime lança novas versões sem interrupção para os usuários.
- Ele mantém uma versão saudável atendendo enquanto a nova é introduzida e verificada.
- A parte difícil é evoluir estado e schemas de forma retrocompatível.