Como o Dub entrega redirects rápidos e análise de cliques numa stack serverless
O Dub é uma plataforma open source de links curtos e atribuição, usada por times como Twilio, Vercel e Raycast. A stack é quase toda feita de serviços gerenciados: Next.js na Vercel para o app e os redirects, Redis como cache dos links, MySQL na PlanetScale para os dados principais e Tinybird para a análise de cliques.
Copiar stackdub.co Gestão e atribuição de links open source · Estados Unidos · fundada em 2022
O fundador Steven Tey contou que um dos motivos para criar o Dub foi mostrar o que as Edge Functions fazem: elas rodam lógica de servidor, como um redirect, bem perto do usuário, e um encurtador de links é o caso de uso ideal.
O código é público no GitHub, num modelo open core. A maior parte é open source e uma parte menor, na pasta /ee, tem licença comercial.
Os redirects rodam no Middleware do Next.js. Para aguentar muito tráfego, o Dub guarda os dados de cada link no Redis assim que o link é criado, e o redirect nunca precisa consultar o MySQL.
O MySQL, hospedado na PlanetScale, guarda os usuários e os dados dos links. Steven Tey atribui ao Upstash Redis os redirects abaixo de 200 ms.
No começo, os cliques ficavam em Sorted Sets do Redis. Filtrar por local ou origem era difícil, e algumas consultas passavam de 5 segundos quando os links dos clientes chegaram a centenas de milhares de cliques.
O time gostava da velocidade do ClickHouse, mas não queria manter um cluster, então foi para o Tinybird, um ClickHouse gerenciado. O app manda cada clique para a Events API do Tinybird e lê consultas SQL publicadas como endpoints. Segundo Steven Tey, a análise ficou cerca de 100 vezes mais rápida, e os mesmos dados de clique alimentam a cobrança por uso.
Trabalhos mais longos, como importações, exportações, webhooks e pagamentos a parceiros, passam pelo Upstash QStash, que chama as rotas de cron do próprio Dub.
O package.json do app web também traz o Vercel AI SDK com o provedor da Anthropic, o Axiom para logs e o Vitest e o Playwright para testes.