Pular para o conteúdo
use-cases / rolling-24h-snapshots / hero
CRON · SNAPSHOTS · ROLLING 24

Mantenha as últimas 24 horas como 24 snapshots

Uma entrada de cron gerenciada dispara @hourly. Faz POST de um snapshot chamado auto-h$(date +%H). Os nomes ciclam: auto-h00 até auto-h23. Depois de um dia, cada novo snapshot sobrescreve o de ontem na mesma hora — e você sempre tem as últimas 24 horas de estado, retidas com granularidade horária.

use-cases / rolling-24h-snapshots / mechanism

Uma linha de cron, uma convenção de nomes

Uma entrada gerenciada @hourly faz curl na URL de snapshots com o alias auto-h$(date +%H). O alias colide de propósito: amanhã às 13h, o auto-h13 de hoje é substituído. Vinte e quatro slots nomeados, rotacionados automaticamente.

entrada de cron · @hourly
POST · cron/entries
# Hoody Cron — agenda um snapshot horário.
curl -X POST \
  cron.containers.hoody.com/users/root/entries \
  -H "Content-Type: application/json" \
  -d '{
    "schedule": "@hourly",
    "command": "curl -X POST $SNAP_URL -d '{\"alias\":\"auto-h$(date +%H)\"}'",
    "comment": "rolling 24h snapshot"
  }'
o nome da hora é a chave de rotação
URL do snapshot · o que o cron realmente acessa
POST · containers/[id]/snapshots
# Às 13:00 o cron roda — esta é a requisição que ele envia:
curl -X POST \
  api.hoody.com/api/v1/containers/$ID/snapshots \
  -H "Authorization: Bearer $TOKEN" \
  -d '{"alias": "auto-h13"}'

# Resposta:
200 OK · hourly-2026-05-04-13 created in 6s

Não há política de retenção e não há janitor — o alias auto-h13 é reusado a cada 24 horas, e é isso que faz a janela rolar. A Hoody Snapshots API suporta um campo alias opcional em POST /api/v1/containers/[id]/snapshots; reusá-lo é o mecanismo inteiro.

use-cases / rolling-24h-snapshots / anatomy

Anatomia de uma hora rolante

Quatro passos, todos dentro de um único curl. Do tick do cron ao snapshot em segundos.

0113:00:00Tick do cron dispara@hourly · entrada gerenciada
0213:00:04Snapshot postadoalias auto-h13
0313:00:06Andar materializadohourly-2026-05-04-13
04+24hO mesmo alias o sobrescrevenenhum janitor necessário

Cada tick leva segundos. O alias é a primitiva de rotação — ao reusar o mesmo nome 24 horas depois, o snapshot naquele andar é substituído no lugar.

use-cases / rolling-24h-snapshots / powers

Três poderes de uma máquina do tempo de 24 andares

O que você abre mão ao deletar o runbook de backup, você ganha de volta como algo mais barato e mais honesto.

ECONOMIA

Snapshots ociosos custam quase nada

Snapshots são stateless em disco; não queimam CPU ou RAM enquanto estão lá. Você está pagando armazenamento por 24 cópias do diff do contêiner, não por um serviço de backup que roda o tempo todo.

GRANULARIDADE

Uma hora é a unidade do arrependimento

Quando algo dá errado às 14:14, você restaura o auto-h13 e está de volta às 13:00 — um minuto antes do problema começar. Horária é fina o suficiente para rollback de produção e grossa o suficiente para não afogar o ledger.

OPERAÇÕES

Sem regras de retenção, sem auditoria

Não há política de ciclo de vida para escrever, sem bucket S3 para provisionar, sem revisão anual de runbook. A convenção de nomes é a regra de retenção. O conjunto fixo de aliases é a auditoria.

use-cases / rolling-24h-snapshots / economics

Quanto custa a janela rolante

Vinte e quatro snapshots de um contêiner típico, retidos com granularidade horária. Os números vêm da Hoody Snapshots API e de um diff representativo de 1,2 GB por hora.

  1. ANDARES RETIDOS24

    Cada hora é um slot nomeado. Depois do primeiro dia, todo novo snapshot sobrescreve o de ontem na mesma hora — a contagem nunca cresce.

  2. DE CRONTAB1 linha

    Uma entrada gerenciada, schedule @hourly, command faz curl na URL de snapshots com alias auto-h$(date +%H). É a rotação inteira.

  3. JANITORS0

    Sem job de prune, sem política de expires_at, sem config de ciclo de vida. A colisão de alias rotaciona a janela no lugar; nada acumula.

Conforme a Hoody Container Snapshots API: POST /api/v1/containers/[id]/snapshots aceita um alias opcional (máx. 100 chars) e uma expiração opcional em dias. Esta página assume o preço padrão de snapshots dos contêineres e um diff representativo de ~1,2 GB por captura horária; seus tamanhos vão variar conforme a workload.

use-cases / rolling-24h-snapshots / punchline

Sua máquina do tempo tem 24 andares e o elevador é um curl.

antes · software de backupdepois · uma linha de cron
COMO ERA ANTESSnapshots RDS + política de ciclo de vida + bucket S3 + auditoria anualquatro peças móveis · cobrança por GB-dia · página de runbook
COMO É AGORA@hourly curl POST snapshots -d '["alias":"auto-h$(date +%H)"]'uma linha de cron · uma convenção de nomes · 24 andares
use-cases / rolling-24h-snapshots / replaces

O que isto substitui

As ferramentas padrão para quando você quer recuperação point-in-time horária. Cada uma te cobra um serviço ou uma política de retenção. O modelo cron + alias não cobra nenhum dos dois.

  • snapshots AWS RDSCobrança por GB-dia para uma janela que você mesmo pode rotacionar
  • jobs cron pgBackRestUma ferramenta de backup, um arquivo de config e um daemon para o que é um curl
  • scripts customizados de dump-e-rotaçãoBash frágil que lista, ordena e poda por mtime
  • jobs de backup S3 disparados por cronPolíticas de ciclo de vida, versionamento de bucket e um papel IAM para manter
  • tooling de snapshots BTRFSSnapshots em nível de filesystem que precisam de um host que você controla
  • Restic + cronUm binário, um repo, um arquivo de senha e uma política de retenção
use-cases / rolling-24h-snapshots / cta

Delete o runbook de backup. Agende o @hourly. As últimas 24 horas do seu contêiner existem como 24 andares nomeados — e o elevador é um único curl.

use-cases / rolling-24h-snapshots / related

Leia os outros