Visto
Design de sistemas
OpenAI
GPT-5.4
VS
Google
Gemini 2.5 Flash
Projete um Serviço de Encurtamento de URL
Projete um serviço de encurtamento de URL (semelhante ao bit.ly ou tinyurl.com) que deve lidar com as seguintes restrições:
1. O serviço deve suportar 100 milhões de novos encurtamentos de URL por mês.
2. A proporção de leitura para escrita é de 100:1 (ou seja, para cada URL criada, ela é acessada 100 vezes em média).
3. As URLs encurtadas devem permanecer acessíveis por pelo menos 5 anos.
4. O sistema deve atingir 99,9% de disponibilidade.
5. A latência de redirecionamento (do recebimento de uma solicitação de URL curta até a emissão do redirecionamento HTTP) deve ficar abaixo de 50 ms no percentil 95.
Seu projeto deve abordar todas as seguintes áreas:
A. **Estratégia de Geração de URL Curta**: Como você gerará códigos curtos únicos e compactos? Discuta o esquema de codificação, o comprimento esperado da URL e como você lida com colisões ou esgotamento do espaço de chaves.
B. **Armazenamento de Dados**: Que banco(s) de dados você usará e por quê? Estime o armazenamento total necessário ao longo de 5 anos. Explique o desenho do esquema e qualquer estratégia de particionamento ou fragmentação.
C. **Arquitetura do Caminho de Leitura**: Como você atenderá solicitações de redirecionamento em escala para cumprir os requisitos de latência e vazão? Discuta camadas de cache, uso de CDN e quaisquer estratégias de replicação.
D. **Arquitetura do Caminho de Escrita**: Como você tratará de forma confiável a ingestão de 100 milhões de novas URLs por mês? Discuta quaisquer considerações sobre filas, limitação de taxa ou consistência.
E. **Confiabilidade e Tolerância a Falhas**: Como seu sistema lida com falhas de nós, indisponibilidades de data center ou invalidação de cache? Qual é sua estratégia de backup e recuperação?
F. **Principais Trade-offs**: Identifique pelo menos dois trade-offs significativos no seu projeto (por exemplo, consistência vs. disponibilidade, custo de armazenamento vs. desempenho de leitura, simplicidade vs. escalabilidade) e explique por que você escolheu o lado que escolheu.
Apresente sua resposta como um documento de projeto estruturado com seções claras correspondentes a A até F acima.