Pular para o conteúdo

Arquitetura real · Pleno

YouTube: escalando MySQL com Vitess

Arquitetura real em produção. Pontos centrais: Sharding de Banco de Dados e Seleção de Banco de Dados.

15 min de leitura · Fonte: YouTube · Conteúdo revisado em 23 de outubro de 2026

Resposta curta

Arquitetura real em produção. Pontos centrais: Sharding de Banco de Dados e Seleção de Banco de Dados. O YouTube guardava no MySQL metadados como usuários, tags e descrições. O Vitess foi criado em 2010 para resolver os problemas de escala do MySQL enfrentados pela equipe do YouTube, e este caso conta a trajetória que levou até ele.

01 · CONTEXTO

Um MySQL que precisava crescer

O YouTube guardava no MySQL metadados como usuários, tags e descrições. O Vitess foi criado em 2010 para resolver os problemas de escala do MySQL enfrentados pela equipe do YouTube, e este caso conta a trajetória que levou até ele.

A evolução seguiu um caminho comum: um servidor único, depois um primário com várias réplicas de leitura, depois particionamento e, por fim, sharding dos dados.

02 · RÉPLICAS

Primeiro, escalar a leitura

Para aliviar o banco, o YouTube criou um primário para as escritas e uma réplica para as leituras. Como a leitura continuou a sobrecarregar a réplica, acrescentou mais réplicas, o que serviu como solução temporária.

  1. O banco passa a ter um primário que recebe as escritas e réplicas que atendem as leituras.

    Diagrama da arquitetura: YouTube: primário e réplicas
    CPAplicação do site
    DBBanco primárioescritas
    DBRéplicas de leituraleituras
  2. Quando a leitura ainda sobrecarrega a réplica, o remédio é acrescentar mais réplicas.

    Diagrama da arquitetura: YouTube: primário e réplicas
    CPAplicação do site
    DBBanco primário
    DBRéplicas de leituramais réplicas
  3. Como a replicação é assíncrona e as réplicas rodam em máquinas mais fracas, elas podem ficar bem atrás do primário.

    Diagrama da arquitetura: YouTube: primário e réplicas
    CPAplicação do site
    DBBanco primário
    DBRéplicas de leituraatraso de replicação
  4. As escritas continuam todas no primário; quando passam do que ele aguenta, resta dividir os dados em shards.

    Diagrama da arquitetura: YouTube: primário e réplicas
    CPAplicação do site
    DBBanco primáriolimite de escrita
    DBRéplicas de leitura

Réplicas têm custo. Atualizações causam falhas de cache que vão ao disco, e o I/O lento deixa a replicação lenta; além disso, a fonte diz que, numa arquitetura de replicação, ganhos incrementais de escrita custam muito dinheiro.

Uma das soluções foi priorizar o tráfego dividindo os dados em dois clusters: um para assistir vídeos e outro geral.

03 · SHARDING NA APLICAÇÃO

Quando a escrita passa do limite

Por fim, a escrita passou do que o primário aguentava e o YouTube precisou fazer sharding dos dados. A camada de aplicação foi alterada para que, antes de qualquer operação no banco, o código identificasse o shard certo para a consulta.

  1. Antes de cada operação, o código da aplicação identifica o shard certo para a consulta.

    Diagrama da arquitetura: YouTube: sharding na aplicação
    CPAplicação com lógica de shardescolhe o shard
    DBShard de usuários A
    DBShard de usuários B
  2. A consulta segue direto ao shard escolhido, que guarda só a parte dos usuários atribuída a ele.

    Diagrama da arquitetura: YouTube: sharding na aplicação
    CPAplicação com lógica de shard
    DBShard de usuários Ausuários deste shard
    DBShard de usuários B
  3. Outro usuário pode estar no outro shard, e assim escritas e leituras se espalham entre os shards.

    Diagrama da arquitetura: YouTube: sharding na aplicação
    CPAplicação com lógica de shard
    DBShard de usuários A
    DBShard de usuários Boutros usuários

O High Scalability relata os efeitos do particionamento: melhor localidade de cache e menos I/O, uma redução de 30% do hardware e atraso de réplica reduzido a 0.

O custo desse desenho aparece na documentação do Vitess: o MySQL não tem sharding nativo, o que obriga a escrever o código de sharding e embuti-lo na aplicação.

04 · VITESS

Um proxy no meio do caminho

O Vitess tirou essa lógica do código da aplicação: um proxy entre a aplicação e o banco passou a rotear e gerenciar as interações. Segundo a documentação, desde então o YouTube escalou sua base de usuários por um fator de mais de 50, e o Vitess serviu todo o tráfego de banco do YouTube por mais de cinco anos.

Em termos gerais, o Vitess é um sistema de cluster de banco de dados de código aberto para escalar MySQL horizontalmente; o VTGate é o proxy que aceita conexões do protocolo MySQL e roteia as consultas aos shards apropriados.

  1. A aplicação conecta ao VTGate como se ele fosse um servidor MySQL comum.

    Diagrama da arquitetura: YouTube: Vitess entre aplicação e MySQL
    CPAplicação
    CPVTGateproxy
    DBTopology Service
    CPVTTablet do shard A
    DBMySQL do shard A
    CPVTTablet do shard B
    DBMySQL do shard B
  2. O VTGate roteia cada consulta ao tablet certo, levando em conta o esquema de sharding, a latência e a disponibilidade.

    Diagrama da arquitetura: YouTube: Vitess entre aplicação e MySQL
    CPAplicação
    CPVTGateroteia
    DBTopology Service
    CPVTTablet do shard A
    DBMySQL do shard A
    CPVTTablet do shard B
    DBMySQL do shard B
  3. Cada VTTablet fica ao lado de uma instância MySQL e cuida das consultas, das conexões e da replicação dela.

    Diagrama da arquitetura: YouTube: Vitess entre aplicação e MySQL
    CPAplicação
    CPVTGate
    DBTopology Service
    CPVTTablet do shard Aagente
    DBMySQL do shard A
    CPVTTablet do shard Bagente
    DBMySQL do shard B
  4. O Topology Service mantém o estado do cluster e permite descobrir onde estão os tablets.

    Diagrama da arquitetura: YouTube: Vitess entre aplicação e MySQL
    CPAplicação
    CPVTGate
    DBTopology Serviceestado do cluster
    CPVTTablet do shard A
    DBMySQL do shard A
    CPVTTablet do shard B
    DBMySQL do shard B
  5. Em regime estável, nenhuma chamada ao serviço de topologia fica no caminho crítico de uma consulta.

    Diagrama da arquitetura: YouTube: Vitess entre aplicação e MySQL
    CPAplicação
    CPVTGate
    DBTopology Servicefora do caminho crítico
    CPVTTablet do shard A
    DBMySQL do shard A
    CPVTTablet do shard B
    DBMySQL do shard B

Para a aplicação, um keyspace aparece como um único banco, mesmo quando mapeia vários bancos MySQL. Um shard é um subconjunto do keyspace e costuma ter um primário MySQL e possivelmente várias réplicas.

O Vitess ainda protege e opera o banco: reescreve consultas que podem prejudicar o desempenho e ajuda a gerenciar o ciclo de vida dos servidores, incluindo a detecção e a recuperação de falha do primário.

05 · TRADE-OFFS

O que muda com shards

CritérioLógica de shard no códigoCom um proxy como o Vitess
Quem escolhe o shardO código da aplicação identifica o shard antes de cada operaçãoUm proxy entre a aplicação e o banco roteia as consultas
Visão da aplicaçãoPrecisa identificar o shard que recebe cada consultaUm keyspace aparece como um único banco
Código de shardingO MySQL não tem sharding nativo, então esse código vai na aplicaçãoHá vários esquemas de sharding disponíveis

Sharding traz custos de consistência, segundo a documentação do Vitess: leituras entre shards podem não ser consistentes entre si, e transações em um único shard continuam ACID. No modo de melhor esforço, transações entre shards podem falhar no meio e deixar commits parciais; o modo 2PC aumenta o custo de escrita em cerca de 50%.

Leituras que toleram dados um pouco atrasados devem ir a réplicas. O VTGate pode ser configurado para não servir dados de instâncias com atraso acima de um limite.

Perguntas frequentes

O que é YouTube: escalando MySQL com Vitess?

Arquitetura real em produção. Pontos centrais: Sharding de Banco de Dados e Seleção de Banco de Dados.

O que o design de YouTube: escalando MySQL com Vitess cobre?

Ele está organizado nestas seções: Um MySQL que precisava crescer, Primeiro, escalar a leitura, Quando a escrita passa do limite, Um proxy no meio do caminho e O que muda com shards.

Quanto tempo leva YouTube: escalando MySQL com Vitess e qual é o nível?

Leva cerca de 15 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.