Post

Evolução de Banco de Dados: Flyway e o Zero Downtime Deploy

Evolução de Banco de Dados: Flyway e o Zero Downtime Deploy

Você mudou o nome de uma coluna no seu código local, mas esqueceu de avisar o time de DevOps. O deploy acontece, o app tenta ler a coluna nova, ela não existe e… BUM! O sistema cai. Gerenciar migrações de banco de dados manualmente é um erro fatal. Conheça o Flyway.

Versionamento de Banco

Trate o seu banco de dados como o seu código. Ele precisa de histórico, versões e automação. O Flyway (ou Liquibase) faz exatamente isso.

Como o Flyway funciona?

Ele guarda uma tabela chamada flyway_schema_history no seu banco. Sempre que sua aplicação sobe, o Flyway olha a pasta de scripts (src/main/resources/db/migration), vê quais scripts ainda não foram executados e os aplica em ordem.

Exemplo de Arquivo: V1__create_accounts_table.sql Exemplo de Arquivo: V2__add_status_to_accounts.sql

O Desafio: Zero Downtime Migrations

Em sistemas de alta disponibilidade, você não pode desligar o banco para fazer uma migração. Algumas migrações são perigosas (como o ALTER TABLE em tabelas com milhões de linhas).

Regras

  1. Nunca delete ou renomeie colunas de imediato: Use o padrão Expand and Contract. Primeiro adicione a nova, depois migre os dados, e só no próximo deploy remova a antiga.
  2. Evite Default Values pesados: Adicionar uma coluna com DEFAULT 'ACTIVE' em uma tabela de 100 milhões de linhas pode travar o banco por minutos.
  3. Cuidado com Locks: Algumas operações bloqueiam a tabela para escritas. Verifique se o seu banco (MySQL 8, por exemplo) suporta Instant DDL ou use ferramentas como o gh-ost ou pt-online-schema-change.

Flyway no Spring Boot / Micronaut

Basta adicionar a dependência no pom.xml e colocar os scripts na pasta certa. O framework se encarrega de rodar a migração no momento do startup da aplicação.

1
2
3
4
<dependency>
    <groupId>org.flywaydb</groupId>
    <artifactId>flyway-core</artifactId>
</dependency>

Olhando para o futuro

À medida que avançamos para arquiteturas cada vez mais efêmeras e baseadas em nuvem, a tendência é que as migrações de banco se tornem ainda mais integradas aos pipelines de GitOps. No futuro próximo, ferramentas como o Flyway não apenas aplicarão scripts, mas também analisarão o impacto de performance de cada ALTER TABLE em tempo real, sugerindo otimizações ou bloqueando mudanças que possam comprometer a estabilidade do sistema em produção. Automatizar hoje é estar pronto para o amanhã.

This post is licensed under CC BY 4.0 by the author.