Arquitetura de software · Estudos de caso · 8 min de leitura
Estudo de caso: projetando um encurtador de URL
Um clássico de entrevistas de design de sistemas: gerar códigos curtos, redirecionar rápido e aguentar muito mais leituras que escritas.
Arraste para o lado para ver o diagrama inteiro.
Requisitos
- Criar um código curto para uma URL longa; redirecionar com HTTP 301/302.
- Leituras muito mais frequentes que escritas (por exemplo, 100 para 1).
- Baixa latência e alta disponibilidade no redirecionamento.
Gerando o código
Converter um número único para base62 (a–z, A–Z, 0–9): com 7 caracteres há 62⁷ ≈ 3,5 trilhões de combinações. O número pode vir de um contador distribuído (blocos de IDs por servidor) ou de um hash da URL com tratamento de colisões. Códigos sequenciais são previsíveis; se isso importar, embaralhe.
Escala
- Banco chave-valor (código → URL) particionado pelo código.
- Cache para os links populares — poucos links concentram a maioria dos acessos.
- Contagem de cliques por fila, agregada depois, para não atrasar o redirecionamento.
- Rate limiting na criação para evitar abuso e verificação de URLs maliciosas.
Em resumo
- Base62 com 7 caracteres ≈ 3,5 trilhões de códigos.
- Leitura domina: cache no caminho quente.
- Cliques contados de forma assíncrona.
- Rate limiting e checagem de URLs contra abuso.