Design clássico · Sênior
Plataforma de vídeo (YouTube/Netflix)
Projeto de entrevista clássico. Pontos centrais: entrega de blobs e vídeo.
Resposta curta
Projeto de entrevista clássico. Pontos centrais: entrega de blobs e vídeo. O exercício clássico pede uma plataforma de compartilhamento de vídeo como o YouTube, e a mesma solução vale para Netflix ou Hulu. O escopo é estreito de propósito: enviar um vídeo e assistir a um vídeo, em apps móveis, navegadores e smart TVs.
01 · CONTEXTO
Subir e assistir: dois botões, dois problemas
O exercício clássico pede uma plataforma de compartilhamento de vídeo como o YouTube, e a mesma solução vale para Netflix ou Hulu. O escopo é estreito de propósito: enviar um vídeo e assistir a um vídeo, em apps móveis, navegadores e smart TVs. O resto do produto fica de fora do desenho.
Os objetivos que guiam o desenho são upload rápido, streaming fluido, troca de qualidade durante a reprodução e custo baixo de infraestrutura, tudo com alta disponibilidade e capacidade de crescer. Já o tamanho dos arquivos depende da fonte: uma delas fixa um teto de vídeos pequenos e médios, a outra exige suportar arquivos de dezenas de GB, o que muda a forma de enviá-los. Quanto à escala, uma fonte parte de milhões de usuários ativos por dia e a outra de cerca de um milhão de vídeos enviados e cem milhões assistidos por dia.
A conta de armazenamento mostra o tamanho do problema: com cinco milhões de usuários ativos por dia, dez por cento enviando um vídeo de 300 MB, são 150 TB novos por dia. Do outro lado, servir esses vídeos pela CDN custa caro, e esse custo vai pesar nas decisões do final do caso.
02 · UPLOAD
Blob storage, CDN e uma fila no meio
Montar blob storage e CDN do zero é complexo e caro, então o desenho usa serviços prontos de nuvem. O sistema fica com três peças: o cliente, a CDN, de onde o vídeo sai, e os servidores de API, por onde passa tudo que não é o streaming em si. Como os servidores de API não guardam estado, a camada escala na horizontal.
O cliente pede aos servidores de API uma URL pré-assinada. O balanceador reparte as requisições, e a API autoriza o destino exato onde aquele arquivo pode ser gravado.
Com a URL, o cliente envia o arquivo direto ao armazenamento original, sem passar pelos servidores de aplicação. Em paralelo, a API grava os metadados no banco e no cache.
Os servidores de transcodificação buscam o original e o convertem em vários formatos e resoluções.
Ao terminar, o resultado vai para o armazenamento transcodificado e, ao mesmo tempo, um evento de término entra na fila de conclusão.
O tratador de conclusão consome a fila e atualiza o banco e o cache de metadados, de modo que a API passa a saber que o vídeo está pronto.
Os arquivos transcodificados são distribuídos para a CDN, de onde serão transmitidos aos espectadores.
O envio se divide em dois processos paralelos: o arquivo vai para o armazenamento enquanto o cliente manda os metadados. Quando a transcodificação termina, uma fila de mensagens leva o evento até o tratador, que atualiza o banco de metadados, mantido particionado e replicado para dar desempenho e disponibilidade.
O cliente não manda o vídeo pela API: ele recebe uma URL pré-assinada e envia direto ao armazenamento de objetos. Isso evita que arquivos grandes atravessem os servidores de aplicação e, como a URL é emitida pela API, só quem está autorizado grava no lugar certo.
A fila também desacopla as etapas. Sem ela, o módulo de codificação ficaria esperando a saída do módulo de download; com ela, ele processa em paralelo os eventos que estiverem na fila.
03 · TRANSCODIFICAÇÃO
Do arquivo bruto aos formatos que cada tela entende
Transcodificar é indispensável por quatro motivos: o vídeo bruto ocupa muito espaço, muitos aparelhos e navegadores só aceitam certos formatos, quem tem banda larga deve receber qualidade maior que quem tem banda baixa, e a rede muda durante a reprodução, sobretudo no celular, o que exige trocar de qualidade no meio do caminho.
Um formato de vídeo tem duas partes. O container reúne vídeo, áudio e metadados, como uma cesta, e costuma ser reconhecido pela extensão do arquivo. O codec comprime e descomprime para reduzir o tamanho preservando a qualidade. Os protocolos de streaming, por sua vez, diferem nas codificações e nos players que suportam, e por isso é preciso escolher um que atenda ao seu caso de uso.
O trabalho é caro e demorado, e cada criador pode pedir etapas diferentes, como marca d'água ou miniatura própria. Para dar flexibilidade e paralelismo, o desenho adota um modelo de grafo acíclico dirigido, o DAG, que descreve quais tarefas existem e quais dependem de quais. A parte mais cara é a conversão dos trechos de vídeo, que consome CPU e deve rodar em muitas máquinas ao mesmo tempo, coordenadas por um orquestrador.
O pré-processador pega o vídeo original e o divide em trechos curtos, reproduzíveis de forma independente, além de gerar o DAG a partir da configuração do criador.
Os trechos e os metadados ficam num armazenamento temporário, para que uma falha não obrigue a recomeçar do zero.
O agendador de DAG quebra o grafo em estágios e coloca as tarefas na fila do gerenciador de recursos.
O gerenciador casa cada tarefa com o worker mais adequado, e os task workers rodam as tarefas em paralelo.
Se um worker cai no meio de uma tarefa, ela é repetida em outro worker, aproveitando os dados já guardados.
Concluídas as tarefas, os arquivos codificados são gravados como saída do pipeline.
| Componente | O que faz |
|---|---|
| Pré-processador | Divide o vídeo em trechos independentes, gera o DAG e guarda os trechos como cache para novas tentativas |
| Agendador de DAG | Divide o grafo em estágios de tarefas e as coloca na fila |
| Gerenciador de recursos | Mantém a fila de tarefas por prioridade e escolhe a melhor combinação de tarefa e worker |
| Task workers | Executam as tarefas definidas no DAG |
| Armazenamento temporário | Guarda dados intermediários e os libera quando o processamento do vídeo termina |
04 · STREAMING
Segmentos, manifesto e bitrate adaptativo
Assistir não é baixar. Baixar copia o vídeo inteiro para o aparelho; streaming recebe o vídeo continuamente, um pouco de cada vez, e começa a tocar de imediato. A diferença pesa: baixar um arquivo de 10 GB levaria mais de 13 minutos numa conexão de 100 Mbps, e uma queda de rede no meio perderia o progresso.
| Abordagem | Como funciona | Limite |
|---|---|---|
| Baixar o arquivo inteiro | O player só toca depois de copiar o vídeo todo | Espera longa e risco de perder o progresso numa queda de rede |
| Baixar segmentos | O player toca o primeiro trecho e carrega os seguintes em segundo plano | Mais complexo e exige o vídeo armazenado em segmentos; se a rede piora, uma única qualidade pode travar |
| Bitrate adaptativo | O player escolhe o formato de cada segmento a partir de um manifesto, conforme a rede | Mais complexo ainda: depende de segmentos em vários formatos e de manifestos criados no upload |
No bitrate adaptativo, um manifesto principal lista as versões disponíveis do vídeo e aponta para manifestos de cada versão. O cliente busca os metadados do vídeo, que apontam para o manifesto, escolhe um formato conforme a rede e as preferências do usuário e baixa o primeiro segmento. Se a rede piora ou melhora, ele muda o formato dos segmentos seguintes.
O player pede os metadados do vídeo à API, que responde com o endereço do manifesto, lendo do cache quando possível.
O player baixa o manifesto, que lista as versões do vídeo, e escolhe uma conforme a rede e as preferências.
Ele baixa o primeiro segmento, começa a tocar e segue carregando os próximos em segundo plano.
Se a rede piora, o player passa a pedir segmentos de uma versão mais leve, para não interromper a reprodução.
Quando a CDN não tem o segmento, em geral de um vídeo pouco popular, ele vem do armazenamento de alta capacidade.
Com manifestos e segmentos na CDN, o servidor de borda mais próximo entrega o vídeo e o streaming continua sem tocar o backend. Os metadados populares ficam num cache, o que poupa o banco.
05 · CUSTO E SEGURANÇA
Onde o dinheiro vai e como proteger o vídeo
O custo de CDN é o principal vilão, e a saída vem da distribuição de acessos: poucos vídeos são muito populares e muitos têm poucos espectadores ou nenhum. Dessa observação saem as alavancas de custo.
| Alavanca | Ideia |
|---|---|
| Só o popular na CDN | Os vídeos mais populares vão para a CDN e os demais saem de servidores de armazenamento de alta capacidade |
| Codificar sob demanda | Para conteúdo pouco popular, não guardar muitas versões codificadas; vídeos curtos podem ser codificados na hora |
| Distribuir por região | Vídeos populares só em certas regiões não precisam ser enviados às demais |
| CDN própria | Construir a própria CDN em parceria com provedores de internet é um projeto gigante, mas pode fazer sentido para grandes empresas de streaming |
Todas essas decisões dependem do padrão de acesso, por isso o histórico de visualização deve ser analisado antes de otimizar.
Para a velocidade do upload, o cliente divide o vídeo em trechos, o que permite retomar um envio que falhou, e centros de upload espalhados pelo mundo, feitos com a própria CDN, aproximam o envio do usuário. Para a segurança, as URLs pré-assinadas restringem quem grava. Para proteger o conteúdo, há três caminhos: sistemas de DRM, criptografia AES com política de autorização e marca d'água visual.
06 · FALHAS E EXTENSÕES
Quando algo quebra e o que vem depois
O tratamento de erros separa dois tipos. Em erros recuperáveis, como um segmento que falha ao transcodificar, a ideia geral é repetir a operação algumas vezes. Em erros não recuperáveis, como um formato malformado, o sistema interrompe as tarefas daquele vídeo e devolve um código de erro ao cliente. Se um task worker cai, a tarefa vai para outro, e se o primário do banco de metadados cai, uma réplica é promovida.
Para crescer, a camada de API escala na horizontal. Os metadados podem ir para um banco particionável, e a fila de tarefas serve de sinal para aumentar o número de workers. Há ainda dois temas para o fim da entrevista: live streaming, que exige latência menor e talvez outro protocolo, e a remoção de vídeos que violam direitos autorais ou são ilegais.
Perguntas frequentes
O que é Plataforma de vídeo (YouTube/Netflix)?
Projeto de entrevista clássico. Pontos centrais: entrega de blobs e vídeo.
O que o design de Plataforma de vídeo (YouTube/Netflix) cobre?
Ele está organizado nestas seções: Subir e assistir: dois botões, dois problemas, Blob storage, CDN e uma fila no meio, Do arquivo bruto aos formatos que cada tela entende, Segmentos, manifesto e bitrate adaptativo, Onde o dinheiro vai e como proteger o vídeo e Quando algo quebra e o que vem depois.
Quanto tempo leva Plataforma de vídeo (YouTube/Netflix) e qual é o nível?
Leva cerca de 16 minutos para ler e tem nível Sê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.