Pular para o conteúdo

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.

Usuário → BalanceadorBalanceador → ServiçoServiço → Gerador de IDs: novo códigoServiço → Cache: leituraleituraServiço → Banco: falta no cachefalta no cacheServiço → Fila de cliques: conta cliqueconta cliqueUsuárioUsuárioBalanceadorBalanceadorServiço — criar / redirecionarServiçocriar / redirecionarGerador de IDs — base62Gerador de IDsbase62Cache — código → URLCachecódigo → URLBanco — chave-valorBancochave-valorFila de cliquesFila de cliques

Arraste para o lado para ver o diagrama inteiro.

O caminho quente é o redirecionamento: cache primeiro, banco só na falta, e a contagem de cliques sai do caminho da requisição.

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

Referências

Continue aprendendo

Todos os temas de arquitetura de software →