Pular para o conteúdo

Conceitos

Single-master chunked storage

Intuição

Imagine uma biblioteca gigante com milhões de livros espalhados em vários depósitos. Em vez de perguntar a cada depósito onde está um livro, você tem um único fichário central que sabe exatamente em qual depósito (e em qual prateleira) cada livro está guardado. Você consulta o fichário só para descobrir o endereço, e depois vai direto ao depósito pegar o livro — o fichário nunca carrega o livro em si, ele só aponta pra onde ele está.

Como funciona

GFS organiza um cluster em um único processo master e muitos chunkservers. Cada arquivo é dividido em chunks de tamanho fixo grande (64 MB), e cada chunk é replicado (por padrão em três chunkservers) e guardado como um arquivo comum no disco local de cada um. O master fica deliberadamente fora do caminho dos dados: ele guarda só metadados — o namespace, o mapeamento de cada arquivo para sua lista ordenada de chunks, e a localização atual das réplicas de cada chunk. Um cliente que quer ler ou escrever primeiro consulta o master para descobrir quais chunkservers têm o chunk desejado, guarda essa resposta em cache por um tempo, e depois fala diretamente com os chunkservers — os bytes do chunk nunca passam pelo master. Escolher um chunk grande e de tamanho fixo é um trade-off deliberado: mantém os metadados por chunk pequenos o bastante para caber na memória do master mesmo para arquivos enormes, e permite que um cliente faça várias operações sequenciais no mesmo chunk com uma única requisição inicial ao master, o que casa com o padrão de acesso sequencial e dominado por appends que o sistema foi feito para suportar.

Na prática

Esse padrão master/worker com blocos grandes de dados virou um template recorrente em armazenamento distribuído em lote: o HDFS espelha essa separação diretamente no par NameNode/DataNode, inspirado explicitamente no GFS. Você escolhe esse desenho quando precisa armazenar arquivos enormes, escritos majoritariamente por append e lidos sequencialmente por muitas máquinas em paralelo, e quando pode tolerar que um único processo centralize metadados desde que ele nunca vire gargalo para o tráfego de dados em si — o próprio Google depois evoluiu para o Colossus para remover o teto de escalabilidade de ter só um master.

Use em um desenho

Pratique na escola de System Design os casos que dependem deste conceito.