Encurtador de URL
Um encurtador de URL e um sistema que:
- Recebe uma URL longa
- Gera uma URL curta unica
- Redireciona usuarios da URL curta para a original
Estrutura de raciocinio
Seção intitulada “Estrutura de raciocinio”Um framework util para entrevistas de system design e o FENCAFA:
- Funcional
- Escala
- Nao-funcional
- Componentes
- Arquitetura
- Fluxo
- Ajustes
Requisitos do sistema
Seção intitulada “Requisitos do sistema”Funcionais
Seção intitulada “Funcionais”- Criar URL curta
- Redirecionar URL
- Metricas de acesso
Nao-funcionais
Seção intitulada “Nao-funcionais”- Alta disponibilidade
- Baixa latencia
- Escalabilidade massiva
- Consistencia eventual aceitavel
Estimativa de escala
Seção intitulada “Estimativa de escala”Voce deve pensar em:
- Numero de URLs criadas por dia
- Numero de redirecionamentos
- Volume de armazenamento
Esse e um sistema read-heavy.
Modelo basico
Seção intitulada “Modelo basico”- Usuario envia URL longa
- Sistema gera codigo curto
- Salva o mapping
short_code -> original_url - O redirecionamento consulta esse mapping
Geracao da URL curta
Seção intitulada “Geracao da URL curta”Estrategias
Seção intitulada “Estrategias”Auto-increment + Base62
Simples e deterministico, mas previsivel.
Hash da URL
Pode colidir e dificulta controle.
ID distribuido
Escalavel e evita gargalo central.
Escala e otimizacoes
Seção intitulada “Escala e otimizacoes”Como a leitura domina o sistema, o gargalo principal costuma estar no redirecionamento.
Otimizacoes
Seção intitulada “Otimizacoes”- Cache para reduzir latencia
- CDN para distribuicao geografica
- Banco distribuido 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 --> DBProblemas avancados
Seção intitulada “Problemas avancados”- Cache invalidation
- Hot keys
- Consistencia eventual
- Abuso e seguranca
- Analytics em sistema separado
Trade-offs
Seção intitulada “Trade-offs”| Decisao | Trade-off |
|---|---|
| Cache agressivo | Consistencia |
| ID sequencial | Seguranca |
| Hash | Colisao |
| Banco unico | Escala |
| Banco distribuido | Complexidade |
- Sistema simples conceitualmente, dificil na escala
- Leitura domina o sistema
- Cache e essencial
- Geracao de ID e critica