Design clássico · Pleno
App de atividades físicas (Strava)
Projeto de entrevista clássico. Pontos centrais: indexação geoespacial e rankings e leaderboards.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: indexação geoespacial e rankings e leaderboards. O exercício pede um aplicativo de acompanhamento de atividades físicas como o Strava: o usuário registra suas atividades e as compartilha com a sua rede. A fonte limita o foco a corrida e ciclismo.
01 · CONTEXTO
Registrar, compartilhar e ver
O exercício pede um aplicativo de acompanhamento de atividades físicas como o Strava: o usuário registra suas atividades e as compartilha com a sua rede. A fonte limita o foco a corrida e ciclismo.
Os requisitos funcionais centrais são três: iniciar, pausar, parar e salvar uma corrida ou pedalada; ver rota, distância e tempo enquanto a atividade acontece; e ver os detalhes das próprias atividades concluídas e das atividades dos amigos.
Ficam fora do escopo a gestão de amigos e a autenticação e autorização. Isso delimita o desenho: o caso trata de registrar, guardar e ler atividades, não de contas nem de relações entre usuários.
02 · REQUISITOS
Quatro exigências não funcionais
Os requisitos não funcionais são quatro: alta disponibilidade; funcionamento em áreas remotas, sem conexão de rede; estatísticas locais precisas e atualizadas durante a corrida ou pedalada; e escala para dez milhões de atividades simultâneas.
03 · DESENHO
Do aparelho ao armazenamento
O diagrama abaixo é um desenho ilustrativo do autor, montado a partir dos requisitos. Ele mostra o caminho de gravação de uma atividade e o lugar do ranking.
O app do atleta é onde o atleta vê rota, distância e tempo, e onde as estatísticas locais precisam estar disponíveis durante a atividade.
Ao salvar a atividade, o app a envia pela entrada da API ao serviço de atividades.
O serviço grava a atividade concluída num armazenamento particionado, a resposta de partida para a exigência de escala.
No desenho ilustrativo, o serviço também publica um evento na fila, para que o trabalho de ranking não fique dentro do salvamento.
O consumidor atualiza o placar de ranking, que fica em memória para ser lido rapidamente.
Uma atividade pode ser modelada como um conjunto de pontos de localização e tempo, mais resumos como distância e duração. Separar o resumo da série de pontos é uma decisão de modelagem de dados a discutir, e a série de pontos leva a pensar em dados de séries temporais.
04 · APROFUNDAMENTOS
As quatro perguntas da fonte
A fonte lista quatro aprofundamentos: como registrar atividades offline, como escalar para a carga de atividades simultâneas, como compartilhar atividades com amigos em tempo real e como expor um ranking dos melhores atletas.
Para o uso offline, o desenho precisa responder: onde a atividade fica guardada no aparelho; como um reenvio é reconhecido como a mesma atividade; e o que o servidor faz ao receber a mesma atividade duas vezes.
O amigo abre o app e pede as atividades concluídas de quem ele acompanha; a requisição passa pelo balanceador até o serviço de leitura.
O serviço de leitura tenta o cache de atividades recentes e, se a atividade não estiver lá, consulta o armazenamento particionado.
As posições do ranking vêm do placar já calculado, sem recalcular a cada leitura.
Para o ranking, as perguntas são: qual o recorte (global, por amigos ou por trecho de rota) e qual a janela de tempo. Se o recorte for por trecho de rota, entra a indexação geoespacial, para reconhecer que uma atividade passou pelo trecho; a escolha da forma de particionar os dados é outra decisão a discutir.
05 · LIMITES
O que este caso não cobre
Perguntas frequentes
O que é App de atividades físicas (Strava)?
Projeto de entrevista clássico. Pontos centrais: indexação geoespacial e rankings e leaderboards.
O que o design de App de atividades físicas (Strava) cobre?
Ele está organizado nestas seções: Registrar, compartilhar e ver, Quatro exigências não funcionais, Do aparelho ao armazenamento, As quatro perguntas da fonte e O que este caso não cobre.
Quanto tempo leva App de atividades físicas (Strava) 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.