Encurtador de URL
Um encurtador de URL é um sistema que:
- Recebe uma URL longa
- Gera uma URL curta única
- Redireciona usuários da URL curta para a original
Estrutura de raciocínio
Seção intitulada “Estrutura de raciocínio”Um framework útil para entrevistas de system design é o FENCAFA:
- Funcional
- Escala
- Não-funcional
- Componentes
- Arquitetura
- Fluxo
- Ajustes
Requisitos do sistema
Seção intitulada “Requisitos do sistema”Funcionais
Seção intitulada “Funcionais”- Criar URL curta
- Redirecionar URL
- Métricas de acesso
Não-funcionais
Seção intitulada “Não-funcionais”- Alta disponibilidade
- Baixa latência
- Escalabilidade massiva
- Consistência eventual aceitável
Estimativa de escala
Seção intitulada “Estimativa de escala”Você deve pensar em:
- Número de URLs criadas por dia
- Número de redirecionamentos
- Volume de armazenamento
Esse é um sistema read-heavy.
Modelo básico
Seção intitulada “Modelo básico”- Usuário envia URL longa
- Sistema gera código curto
- Salva o mapping
short_code -> original_url - O redirecionamento consulta esse mapping
Geração da URL curta
Seção intitulada “Geração da URL curta”Estratégias
Seção intitulada “Estratégias”Auto-increment + Base62
Simples e determinístico, mas previsível.
Hash da URL
Pode colidir e dificulta controle.
ID distribuído
Escalável e evita gargalo central.
Escala e otimizações
Seção intitulada “Escala e otimizações”Como a leitura domina o sistema, o gargalo principal costuma estar no redirecionamento.
Otimizações
Seção intitulada “Otimizações”- Cache para reduzir latência
- CDN para distribuição geográfica
- Banco distribuído com sharding por chave
Arquitetura proposta
Seção intitulada “Arquitetura proposta”Componentes principais:
- API Service
- Banco de dados
- Cache
- Load Balancer
- Pipeline de analytics
Fluxo de leitura
Seção intitulada “Fluxo de leitura”- Recebe short URL
- Busca no cache
- Se der miss, consulta o banco
- Retorna redirect HTTP 301 ou 302
Fluxo de escrita
Seção intitulada “Fluxo de escrita”- Gera ID
- Salva mapping
- Atualiza cache
flowchart LR
User[User]
APIGW[API Gateway]
Shortener[Shortener Service]
DB[(Database)]
User -->|http://link-longo.com| APIGW
APIGW --> Shortener
Shortener --> DB
Problemas avançados
Seção intitulada “Problemas avançados”- Cache invalidation
- Hot keys
- Consistência eventual
- Abuso e segurança
- Analytics em sistema separado
Trade-offs
Seção intitulada “Trade-offs”| Decisão | Trade-off |
|---|---|
| Cache agressivo | Consistência |
| ID sequencial | Segurança |
| Hash | Colisão |
| Banco único | Escala |
| Banco distribuído | Complexidade |
- Sistema simples conceitualmente, difícil na escala
- Leitura domina o sistema
- Cache é essencial
- Geração de ID é crítica