Design clássico · Júnior
Pastebin
Projeto de entrevista clássico. Pontos centrais: expiração por TTL e geração de IDs únicos.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: expiração por TTL e geração de IDs únicos. Um pastebin deixa alguém colar um bloco de texto e receber um link para compartilhá-lo; quem abre o link vê o texto. O desenho é parente do encurtador de URL, com uma diferença central: aqui o sistema guarda o conteúdo do texto, não apenas o endereço…
01 · CONTEXTO E REQUISITOS
O que um pastebin precisa fazer
Um pastebin deixa alguém colar um bloco de texto e receber um link para compartilhá-lo; quem abre o link vê o texto. O desenho é parente do encurtador de URL, com uma diferença central: aqui o sistema guarda o conteúdo do texto, não apenas o endereço original.
No escopo e nos requisitos do livro-guia entram quatro coisas: criar o paste e receber o link, abrir o link e ver o conteúdo, apagar os pastes expirados e acompanhar estatísticas de visita. O paste não expira por padrão, mas a pessoa pode definir um prazo. O usuário é anônimo, e escolher o próprio alias fica de fora.
Entre as premissas que moldam o desenho: abrir um link deve ser rápido, o tráfego é desigual, o serviço deve ficar quase sempre no ar e o conteúdo é só texto. A análise de visitas pode ser mensal e não precisa ser em tempo real, o que a tira do caminho crítico.
02 · ESTIMATIVA DE ESCALA
Contas de guardanapo
O livro-guia assume dez milhões de escritas e cem milhões de leituras por mês, uma razão de dez leituras para cada escrita. Como um mês tem cerca de dois milhões e meio de segundos, isso dá cerca de quatro escritas e quarenta leituras por segundo, em média.
O armazenamento vem do tamanho do paste. Com 1 KB de conteúdo por paste, o livro-guia chega a cerca de 12,7 GB de conteúdo novo por mês e a 360 milhões de links curtos em três anos. São valores de uma premissa de exemplo; o que vale é o método de partir do volume mensal e chegar à taxa por segundo.
| Grandeza | Premissa | Resultado |
|---|---|---|
| Escritas | 10 milhões por mês | cerca de 4 por segundo |
| Leituras | 100 milhões por mês | cerca de 40 por segundo |
| Conteúdo novo | 1 KB por paste | cerca de 12,7 GB por mês |
03 · API E DADOS
Metadados no banco, texto no repositório de objetos
A API tem dois usos. Para criar, o cliente envia o conteúdo do paste e, opcionalmente, o prazo de expiração; a resposta devolve o link curto. Para ler, o cliente informa o link e recebe o conteúdo, a data de criação e o prazo.
No modelo de dados, cada linha da tabela de pastes guarda o link curto, que é a chave primária, o tempo de expiração, a data de criação e o caminho do conteúdo. A chave primária cria um índice que o banco usa para impor unicidade. O texto em si não fica na linha: fica fora, e a linha aponta para ele.
| Decisão | Opção do livro-guia | Alternativa |
|---|---|---|
| Metadados | Banco relacional como grande tabela hash | Armazém chave-valor NoSQL |
| Conteúdo | Repositório de objetos gerenciado | Servidor de arquivos próprio |
Separar metadados e conteúdo é uma escolha de seleção de banco: o banco responde rápido a consultas pequenas por chave, e o repositório de objetos é mais adequado a blobs de texto do que linhas de tabela.
O navegador envia o texto; o servidor web o encaminha à API de escrita.
A API de escrita gera o link único e confere no banco se ele já existe.
Com o link livre, grava a linha de metadados no banco e o texto no repositório de objetos, e devolve o link.
Depois, quem abre o link cai na API de leitura, passando pelo servidor web.
A API de leitura procura o link no banco; se achar, busca o texto no repositório de objetos; senão, devolve um erro.
04 · GERAR O LINK ÚNICO
Hash, base62 e a checagem de duplicata
O livro-guia gera o link em duas etapas. Primeiro aplica MD5, uma função de hash que produz 128 bits, ao IP do usuário somado ao horário; uma variante usa dados aleatórios no lugar. Depois codifica o resultado em base62 e fica com os sete primeiros caracteres.
Base62 usa letras e dígitos, o que funciona bem em URLs sem precisar de escape. Base64 é outra codificação popular, mas traz caracteres adicionais que atrapalham em URLs. Com sete caracteres há 62 elevado a 7 combinações, que o livro-guia considera suficientes para os 360 milhões de links em três anos. A codificação é determinística: a mesma entrada dá sempre o mesmo link.
Cortar o hash em poucos caracteres tem um preço: dois pastes distintos podem terminar com o mesmo link. Por isso a API de escrita não confia só no hash. Ela consulta o banco por duplicata e, se o link já existe, gera outro; a chave primária reforça a unicidade.
05 · EXPIRAÇÃO E ANÁLISE
TTL, limpeza e estatísticas
O TTL, tempo de vida do paste, vira duas colunas: a data de criação e o prazo em minutos. O vencimento é a soma das duas. O padrão é não expirar, e o prazo é opcional.
Para apagar o que venceu, o livro-guia propõe varrer o banco atrás das entradas cujo vencimento ficou para trás e então apagá-las ou marcá-las como expiradas.
A rotina consulta o banco por pastes cujo vencimento já passou.
As linhas vencidas são apagadas ou marcadas como expiradas.
Como extensão do desenho, o texto correspondente também sai do repositório de objetos.
Para as estatísticas, como a análise em tempo real não é requisito, basta processar em lote os logs do servidor web para gerar as contagens de acesso por período. Esse resultado pode ir para um data warehouse, longe do caminho de leitura.
06 · ESCALAR
Cache, réplicas e o que ainda fica no primário
O livro-guia parte do desenho básico e vai atrás dos gargalos. Para a leitura, o tráfego de conteúdo popular deve ser atendido por um cache em memória, que também ajuda com o tráfego desigual e com picos. As réplicas de leitura cuidam das falhas de cache, desde que a replicação das escritas não as sobrecarregue.
Para a escrita, a taxa média é viável para um único primário SQL com standby; se não bastar, entram outros padrões de escala SQL. O repositório de objetos aguenta com folga o volume mensal de conteúdo novo.
Um pedido de leitura chega à API de leitura.
Se o paste é popular, o cache em memória responde e o banco nem é consultado.
Se o cache falha, a API consulta uma réplica de leitura e busca o texto no repositório de objetos.
As escritas vão ao primário, que replica para as réplicas; escrita demais na replicação pode atrasá-las.
Perguntas frequentes
O que é Pastebin?
Projeto de entrevista clássico. Pontos centrais: expiração por TTL e geração de IDs únicos.
O que o design de Pastebin cobre?
Ele está organizado nestas seções: O que um pastebin precisa fazer, Contas de guardanapo, Metadados no banco, texto no repositório de objetos, Hash, base62 e a checagem de duplicata, TTL, limpeza e estatísticas e Cache, réplicas e o que ainda fica no primário.
Quanto tempo leva Pastebin e qual é o nível?
Leva cerca de 11 minutos para ler e tem nível Júnior.
Agora projete você mesmo
Rode este caso como uma entrevista na escola de System Design: você toma as decisões, o tutor as questiona e você vê a nota do seu desenho.