
Sessenta contêineres em um servidor
Uma caixa bare-metal executa dezenas a centenas de contêineres Hoody. KSM e BTRFS dedup fazem o custo marginal próximo a zero.
Vinte agentes empurram suas métricas para uma URL de pipe com curl -T. Seu dashboard lê a mesma URL com ?progress e renderiza o stream SSE direto na página. Sem InfluxDB, sem Prometheus, sem intervalo de scrape. Só um fio.
sem Prometheus, sem InfluxDB, sem serviço de métricas — só SSE em um pipe
Cada agente faz curl da própria linha pro mesmo caminho de pipe. O navegador do dashboard abre um EventSource nesse caminho com ?progress. O servidor do Hoody Pipe não segura nada — bytes que chegam de um lado saem do outro.
#!/bin/sh
# Agent monitor loop — one line per second.
while true; do
cpu=$(top -bn1 | awk '/Cpu/ [print $2]')
mem=$(free | awk '/Mem:/ [printf "%.0f", $3/$2*100]')
line="cpu=$cpu mem=$mem qps=$(cat /tmp/qps) ts=$(date +%s)"
echo "$line" | curl -T - https://pipe.hoody.com/api/v1/pipe/metrics-$AGENT_ID
sleep 1
done// One <script> in one HTML file. No backend.
const tiles = document.querySelectorAll('[data-agent]');
tiles.forEach((tile) => [
const id = tile.dataset.agent;
// ?progress turns the pipe path into an SSE stream.
const sse = new EventSource(
`https://pipe.hoody.com/api/v1/pipe/metrics-$[id]?progress`,
);
sse.addEventListener('metric', (e) => [
const [ cpu, mem, qps ] = JSON.parse(e.data);
tile.querySelector('.cpu').textContent = `$[cpu]%`;
tile.querySelector('.mem').textContent = `$[mem]%`;
tile.querySelector('.qps').textContent = qps;
]);
]);Os agentes fazem curl. O navegador faz EventSource. O pipe encaminha. Não há nada no meio para escalar, reiniciar ou pagar. Feche o dashboard e os streams terminam. Abra de novo e você vê dados ao vivo dentro do segundo.
O que você abre mão deletando o backend, recebe de volta como algo mais simples.
Não há intervalo de scrape pra esperar. A última escrita do agente é o frame atual do dashboard. O pipe encaminha direto — sem flush intermediário.
Sem política de retenção porque não há armazenamento. Sem disco pra encher, sem janela de compactação, sem índice de séries temporais pra corromper. A métrica existe enquanto um leitor está olhando.
O dashboard é um arquivo HTML que você pode hospedar em qualquer lugar — ou abrir do disco. Não há agente pra instalar, daemon pra rodar, assento de DataDog pra provisionar. A URL do pipe é a stack inteira.
A stack padrão agente-pra-dashboard tem quatro peças móveis. O modelo do pipe tem zero. Mesmo fio, meia tela de curl.
Quando você pula o banco de dados, as coisas que você gerenciava deixam de existir. Não há política de retenção em um fio.
Um caminho de pipe é infraestrutura pequena, mas real. Os números vêm das garantias da API do Hoody Pipe, não de benchmarks inventados.
Até 256 dashboards ou tails de curl podem se inscrever no mesmo caminho com ?n. O leitor mais lento aplica backpressure mas nunca bloqueia os outros.
Até 50 viewers SSE de ?progress por caminho. Eles não consomem um slot de receiver — suas abas de dashboard e seu terminal podem assistir em paralelo.
O servidor não escreve em disco. Bytes que chegam pelo lado do remetente saem pelo lado do leitor. Não há janela de flush entre eles.
Limites pela API do Hoody Pipe: contagem de receivers 1–256, espectadores de progress limitados a 50 por caminho, TTL de conexão de progress de 30 minutos, linger de 30 segundos pós-transferência.
O dashboard não consultou um banco de dados. Os bytes simplesmente chegaram.
As ferramentas padrão pra quando você quer um dashboard de métricas. Cada uma te cobra por um banco e um daemon. O pipe não te cobra nenhum dos dois.
Pare de fazer scrape. Pare de armazenar. Olhe pro fio — e quando você parar de olhar, o fio fica vazio.