Pular para o conteúdo
use-cases / snapshot-before-migration / hero
CASO DE USO / SNAPSHOT ANTES DA MIGRAÇÃO

Tire um snapshot do contêiner logo antes da migração noturna

Adicione uma entrada hoody-cron que dispara cinco minutos antes do job de migração das 03:00. Ela dá curl na URL de snapshots e marca o artefato como o ponto de rollback. Se a migração falhar, você restaura em 30 segundos com um único PATCH.

use-cases / snapshot-before-migration / mechanism

Duas URLs, um hábito de antes de dormir

O serviço de cron agenda um curl. O serviço de snapshots faz o congelamento. Nenhum dos dois sabe do job de migração que roda cinco minutos depois, e essa é toda a graça.

POST cron/entries
scheduler
# registra o job recorrente de snapshot (configuração única)
curl -X POST \
  cron.containers.hoody.com/users/root/entries \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "55 2 * * *",
    "command": "curl -X POST $SNAP_URL -d '{\"alias\":\"rollback-point\"}'",
    "comment": "pre-migration snapshot"
  }'
DISPARA
POST containers/[id]/snapshots
freezer
# o que a entrada de cron faz curl toda noite às 02:55 UTC
curl -X POST \
  api.hoody.com/api/v1/containers/$ID/snapshots \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"alias": "rollback-point", "expiry": 7}'

# resposta do serviço de snapshots
200 OK · snap-2026-05-04 created in 8s

A entrada de cron é uma linha em uma tabela Postgres em algum lugar dentro da Hoody. A URL de snapshots grava um blob endereçado por conteúdo no backend de armazenamento do contêiner. Os dois são duráveis, os dois são versionados, e nenhum exige um processo de longa duração no seu laptop.

use-cases / snapshot-before-migration / anatomy

Anatomia da última noite

Quatro momentos, quatro URLs e um intervalo de cinco minutos entre a rede de segurança e a mudança. A migração termina antes do primeiro despertador da maioria das pessoas engenheiras.

0102:55:00ZCron disparaschedule: 55 2 * * *
0202:55:08ZSnapshot pousaalias rollback-point
0303:00:00ZMigração rodaALTER TABLE invoices
0403:01:42ZAuditoria fechasnapshot retido por 7d

Se o passo 03 falhar, o rollback é `PATCH /snapshots/snap-2026-05-04` e você está de volta às 02:55:08Z. A linha do tempo de auditoria acima são os mesmos dados, servidos como JSON.

use-cases / snapshot-before-migration / powers

O que esse formato destrava

Não o snapshot em si. O formato: um backup que existe antes da mudança, endereçado por uma URL, com um nome que inclui a data de hoje.

01 / SEGURANÇA

O backup precede a mudança, em exatos cinco minutos

A maior parte dos post-mortems de incidente começa com "esquecemos de tirar um backup". Quando o backup é uma entrada de cron, você não consegue esquecer. O snapshot das 02:55 é a primeira frase do runbook, escrita com antecedência.

02 / VELOCIDADE

Rollback é um PATCH, não um runbook de 40 passos

Restaurar snap-2026-05-04 é uma única chamada HTTP contra api.hoody.com. O contêiner reverte para o estado de 02:55:08Z em menos de 30 segundos. Sem ticket, sem escalonamento de plantão, sem "quem tem o console da AWS".

03 / CUSTO OCIOSO

Se a migração der certo, o snapshot custa nada

Snapshots são endereçados por conteúdo e armazenados como deltas. Um delta de 412 MB sobre um disco-base inalterado é o que você paga, e só pela janela de retenção de 7 dias. Migrações bem-sucedidas deixam quase nenhum rastro.

use-cases / snapshot-before-migration / rollback

O rollback, antes vs. depois

Como o runbook era antes, e em que ele se reduz quando o snapshot tem nome com a data de hoje e é endereçável como uma URL.

RUNBOOK ANTIGO9 passos manuais, 20-40 minutos, 1-2 humanos
  • 01
    Acionar a DBA de plantão, confirmar que a migração quebrou produçãomediana: 4 minutos para reconhecer
  • 02
    Encontrar o backup mais recente no console da AWStorcer pra ter menos de 24 horas
  • 03
    Subir uma instância de restore, esperar ela ficar online8-15 minutos numa db.r6g.xlarge
  • 04
    Reverter o ALTER TABLE manualmente com um script DOWN feito à mãose o script DOWN existir, o que normalmente não acontece
  • 05
    Reiniciar servidores de aplicação, limpar caches, observar taxas de erroe escrever o post-mortem
Tempo médio de rollback, ops@acme em incidentes 2024: 27 minutos
RUNBOOK NOVO1 chamada HTTP, ~30 segundos, 0 humanos
# rollback da migração da noite passadacurl -X PATCH api.hoody.com/api/v1/containers/$ID/snapshots/snap-2026-05-04# resposta200 OK · contêiner revertido para snap-2026-05-04 em 28s
PATCH é idempotente e reversível

A nova coluna à direita não é uma ferramenta. É uma frase em um runbook. A frase não começa com "primeiro, tire um backup" porque o backup já existe.

use-cases / snapshot-before-migration / punchline

O plano de rollback é uma URL que você agendou para existir.

ANTES: uma página do Notion que ninguém lêDEPOIS: uma linha no cron e um blob no storage de objetos
ANTESprimeiro, tire um backupa primeira frase do runbook, executada manualmente às 03:02 por um humano cansado
DEPOISo backup já existe, com nome da data de hoje, tirado cinco minutos antes da mudançaa primeira frase do runbook, escrita com antecedência por uma entrada de cron
use-cases / snapshot-before-migration / replaces

O que isso substitui

O culto cargo em torno de backups pré-migração. Agende o snapshot e durma com a janela de migração rodando.

  • Snapshots manuais pré-migraçãoAcordar às 02:54 pra clicar no botão de backup
  • Itens de checklist do runbookPasso 1 de 14 na página que ninguém acha
  • Plantão em standby para rollbackPagar uma pessoa engenheira pra esperar nada
  • pg_dump ad-hoc antes de deploysTorcer pra ter lembrado, torcer pra ter terminado
  • Releases "vamos só ter cuidado"O otimismo que envia incidentes
  • Snapshots automáticos do AWS RDSJanela fixa de 5 minutos, paga por GB-dia
use-cases / snapshot-before-migration / cta

O plano de rollback é uma URL que você agendou para existir.

use-cases / snapshot-before-migration / related

Leia os outros