Design clássico · Pleno
Perguntas e respostas (Quora)
Projeto de entrevista clássico. Pontos centrais: ranking de respostas e fan-out de feed.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: ranking de respostas e fan-out de feed. O Quora é uma plataforma social de perguntas e respostas. O curso de origem o contrasta com os buscadores: enquanto estes priorizam a velocidade, o Quora prioriza a profundidade e a conversa.
01 · CONTEXTO
Profundidade em vez de velocidade
O Quora é uma plataforma social de perguntas e respostas. O curso de origem o contrasta com os buscadores: enquanto estes priorizam a velocidade, o Quora prioriza a profundidade e a conversa.
Onde um buscador pode chegar a um beco sem saída por falta de conteúdo, a comunidade pode gerar novas respostas sob demanda. Segundo o curso, a plataforma atende centenas de milhões de usuários ativos por mês, que geram milhares de perguntas por dia em centenas de milhares de tópicos.
O curso informa que o capítulo se inspira no blog de engenharia do Quora; este artigo descreve o desenho proposto pelo curso.
02 · REQUISITOS
O que o sistema precisa fazer
Os requisitos funcionais do curso são cinco: publicar perguntas e respostas com texto, imagens e vídeos; votar a favor, votar contra e comentar respostas; buscar perguntas existentes; receber um feed personalizado pelos interesses do usuário; e ver as respostas ordenadas por utilidade, com o conteúdo de maior qualidade primeiro.
| Requisito não funcional | O que o curso pede |
|---|---|
| Escalabilidade | Crescer em usuários e funcionalidades sem degradar o desempenho |
| Consistência | Conteúdo consistente entre as telas, aceitando que novas publicações e comentários propaguem com pequeno atraso (consistência eventual) |
| Disponibilidade | Permanecer disponível sob muitas requisições concorrentes |
| Desempenho | Baixa latência para uma experiência fluida |
A estimativa de recursos parte de um bilhão de usuários, dos quais 300 milhões ativos por dia. Considera-se que 15% das perguntas contêm uma imagem e 5% contêm um vídeo, com imagens de 250 KB e vídeos de 5 MB.
03 · DESENHO INICIAL
Camadas web e de aplicação, dois armazéns
No desenho inicial, os servidores web aceitam as requisições HTTP e as repassam aos servidores de aplicação. Eles rodam processos gerentes que delegam o trabalho a processos trabalhadores, por meio de uma camada de roteamento; essa camada administra filas de tarefas, nas quais os gerentes enfileiram e os trabalhadores retiram tarefas para executar.
O usuário envia uma requisição HTTP; os servidores web a aceitam e a repassam aos servidores de aplicação.
Um processo gerente, nos servidores web, enfileira a tarefa na camada de roteamento.
Os processos trabalhadores, nos servidores de aplicação, retiram as tarefas da fila para executá-las.
Perguntas, respostas, comentários e votos são dados críticos que exigem alta consistência e ficam no MySQL.
Contagem de visualizações, pontuações de ranking e atributos para recomendação são dados de alta vazão e ficam no HBase.
| Armazém | Tipo | O que guarda |
|---|---|---|
| MySQL | Banco relacional | Dados críticos que exigem alta consistência: perguntas, respostas, comentários e votos |
| HBase | NoSQL | Dados de alta vazão: contagem de visualizações, pontuações de ranking e atributos extraídos para recomendação |
O requisito de ranking tem duas pontas no material: o requisito (respostas ordenadas por utilidade) e o dado (pontuações de ranking no HBase). Como a pontuação é calculada não é detalhado neste artigo.
04 · LIMITES
Onde o desenho inicial falha
O próprio curso aponta limites do desenho inicial. Primeiro, para processar uma requisição, cargas de dados trafegam entre servidores web e de aplicação, o que acrescenta latência de E/S de rede.
Segundo, as filas de prioridade em memória são um ponto único de falha: se uma fila cai ou seu processo termina de forma inesperada, as tarefas enfileiradas podem ser descartadas e exigir reprocessamento manual. Replicar essas filas aumenta o uso de memória.
Para processar uma requisição, cargas de dados trafegam entre servidores web e de aplicação, o que acrescenta latência de E/S de rede.
As filas de prioridade em memória são um ponto único de falha.
Se uma fila cai ou seu processo termina de forma inesperada, as tarefas enfileiradas podem ser descartadas e exigir reprocessamento manual.
Replicar as filas em memória aumenta o uso de memória.
05 · DESENHO FINAL
As correções propostas pelo curso
A resposta do curso combina três mudanças: a fragmentação vertical do MySQL, a troca do HBase, tratado como de alta latência, pelo MyRocks e o uso do Kafka no processamento assíncrono de tarefas.
As requisições chegam a hosts de serviço potentes e homogêneos, que cuidam de cache em memória, filas e roteamento.
O MySQL passa a usar fragmentação vertical, que distribui a carga entre servidores MySQL.
O MyRocks entra no lugar do HBase, descrito como de alta latência, para os dados de alta vazão.
O Kafka passa a ser o meio do processamento assíncrono de tarefas.
| Peça | Desenho inicial | Desenho final |
|---|---|---|
| Tarefas em segundo plano | Filas de prioridade em memória | Kafka |
| Dados de alta vazão | HBase | MyRocks |
| Dados críticos | MySQL | MySQL com fragmentação vertical |
06 · AVALIAÇÃO
Escala, consistência e recuperação
Na avaliação, o curso descreve o uso de instâncias Amazon EC2 com 32 núcleos, cache compartilhado de 20 MB e alta vazão de rede. Esses hosts potentes cuidam de cache em memória, filas e roteamento, e a uniformidade deles simplifica a escala horizontal. Para o banco, a fragmentação vertical distribui a carga entre servidores MySQL.
A avaliação também trata de modelos de consistência variados, que atendem a necessidades de dados específicas, e de recuperação de desastres, com backups remotos e estratégias de restauração para garantir a durabilidade do sistema.
Perguntas frequentes
O que é Perguntas e respostas (Quora)?
Projeto de entrevista clássico. Pontos centrais: ranking de respostas e fan-out de feed.
O que o design de Perguntas e respostas (Quora) cobre?
Ele está organizado nestas seções: Profundidade em vez de velocidade, O que o sistema precisa fazer, Camadas web e de aplicação, dois armazéns, Onde o desenho inicial falha, As correções propostas pelo curso e Escala, consistência e recuperação.
Quanto tempo leva Perguntas e respostas (Quora) e qual é o nível?
Leva cerca de 14 minutos para ler e tem nível Pleno.
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.