ArchitectureScalingNode.js
Como criamos um serviço de captura de tela escalável
5 min read
Introdução
Construir um serviço de captura de tela confiável é mais difícil do que parece. Quando começamos o SiteSnapshot, pensamos que seria tão simples quanto iniciar algumas instâncias do Puppeteer. Estávamos errados.
O Desafio
Renderizar páginas web modernas consome muitos recursos.
- Vazamentos de memória em navegadores headless.
- Lidando com timeouts e processos zumbis.
- Escalonamento horizontal em várias regiões.
Neste post, vamos mergulhar em como resolvemos esses problemas.
Nossa Arquitetura
Mudamos de um sistema monolítico baseado em Cron para um Modelo de Worker Distribuído.
// Exemplo de consumo da nossa fila de workers
async function processQueue(jobId) {
const browser = await getBrowserInstance();
try {
const page = await browser.newPage();
await page.goto(job.url);
await page.screenshot({ path: job.path });
} finally {
await browser.close();
}
}Componentes Chave
- Queue Manager (Gerenciador de Fila): Distribui trabalhos de forma justa.
- Worker Nodes (Nós de Trabalho): Contêineres stateless que executam as verificações.
- Storage Layer (Camada de Armazenamento): Supabase para metadados, S3 para imagens.
Conclusão
Ao desacoplar o agendador da camada de execução, alcançamos 99,9% de confiabilidade.
Quer monitorar seu site visualmente? Comece grátis hoje.