Google File System: Entenda os Fundamentos desse Sistema de Arquivos
18/01/2025
Google File System,GFS, o sistema de arquivos distribuído do Google. Criado p/lidar c/ grandes volumes de dados e otimizado p/ leitura e escrita sequencial. Id: 45

Resumo do Google File System (GFS)
Fonte: artigo The Google File System, disponível em: The Google File System (https://research.google.com/archive/gfs-sosp2003.pdf)
Introdução
O Google File System (GFS) foi desenvolvido para atender às crescentes demandas de processamento de dados do Google. Ele compartilha objetivos com outros sistemas de arquivos distribuídos, como desempenho, escalabilidade, confiabilidade e disponibilidade. No entanto, o design do GFS foi impulsionado por observações chave das cargas de trabalho de aplicativos e do ambiente tecnológico do Google, levando a uma reavaliação das escolhas tradicionais e à exploração de pontos de design radicalmente diferentes.
As principais características que diferenciam o GFS são:
- Tolerância a falhas: O GFS é projetado para lidar com falhas frequentes de componentes, utilizando hardware commodity de baixo custo e implementando monitoramento constante, detecção de erros, tolerância a falhas e recuperação automática.
- Arquivos grandes: O GFS é otimizado para gerenciar arquivos com vários GBs de tamanho, comuns no ambiente do Google, com bilhões de objetos em conjuntos de dados de TBs.
- Padrões de acesso: As cargas de trabalho do GFS consistem principalmente em leituras sequenciais de grande volume e leituras aleatórias pequenas, além de muitas gravações sequenciais grandes que anexam dados a arquivos. O design do GFS reflete esse padrão de acesso.
- Anexação simultânea: O GFS implementa uma operação de anexação atômica que permite que vários clientes anexem dados ao mesmo arquivo simultaneamente, sem sincronização adicional entre eles.
- Co-design de aplicativos e API: O GFS foi projetado em conjunto com as aplicações do Google, permitindo otimizações como um modelo de consistência relaxado e a operação de anexação atômica.
Design Geral
Suposições:
- O sistema é construído com componentes de baixo custo que falham com frequência.
- O sistema armazena um número modesto de arquivos grandes.
- As cargas de trabalho consistem principalmente em leituras sequenciais grandes e pequenas leituras aleatórias.
- As cargas de trabalho também têm muitas gravações sequenciais grandes que anexam dados a arquivos.
- O sistema deve implementar semânticas bem definidas para vários clientes que anexam simultaneamente ao mesmo arquivo.
Interface:
O GFS oferece uma interface de sistema de arquivos familiar com algumas extensões importantes, como:
- Snapshot: cria uma cópia de um arquivo ou árvore de diretórios a baixo custo.
- Anexação de registro: permite que vários clientes anexem dados ao mesmo arquivo simultaneamente, garantindo a atomicidade da anexação de cada cliente.
Arquitetura:
Um cluster GFS consiste em um único master e vários chunkservers, acessados por vários clientes.
- Os arquivos são divididos em chunks de tamanho fixo (64 MB), cada um identificado por um identificador único de 64 bits atribuído pelo master.
- Os chunkservers armazenam chunks em discos locais como arquivos Linux e leem ou gravam dados de chunk especificados por um identificador de chunk e intervalo de bytes.
- O master mantém todos os metadados do sistema de arquivos, incluindo namespace, informações de controle de acesso, mapeamento de arquivos para chunks e locais atuais dos chunks.
- O cliente interage com o master para operações de metadados, mas toda a comunicação de dados é feita diretamente com os chunkservers.
Figura 1:
Arquitetura GFS

Tamanho do Chunk:
O grande tamanho do chunk (64 MB) oferece várias vantagens:
- Reduz a necessidade de interação do cliente com o master.
- Permite conexões TCP persistentes entre cliente e chunkserver.
- Reduz o tamanho dos metadados armazenados no master.
Metadados:
O master armazena três tipos principais de metadados em memória:
- Namespaces de arquivo e chunk.
- Mapeamento de arquivos para chunks.
- Locais das réplicas de cada chunk.
Consistência
O GFS possui um modelo de consistência relaxado:
- Mutações de namespace são atômicas.
- O estado de uma região de arquivo após uma mutação de dados depende do tipo de mutação, se ela é bem-sucedida ou falha e se há mutações simultâneas.
- As aplicações podem lidar com a consistência relaxada utilizando técnicas como anexação em vez de sobrescrever, checkpointing e gravação de registros autovalidáveis e autoidentificáveis.
Interações do Sistema
Leases e Ordem de Mutação
Mutação: operação que altera o conteúdo ou metadados de um chunk (gravação ou anexação).
O master concede um lease de chunk para uma das réplicas (primária), que define uma ordem serial para todas as mutações no chunk.
A ordem global de mutação é definida pela ordem de concessão de lease escolhida pelo master e, dentro de um lease, pelos números seriais atribuídos pela réplica primária.
Fluxo de Dados
O fluxo de dados é desacoplado do fluxo de controle:
- O controle flui do cliente para a réplica primária e depois para todas as réplicas secundárias.
- Os dados são enviados linearmente ao longo de uma cadeia de chunkservers em um pipeline, otimizando a utilização da largura de banda da rede.
Anexação Atômica de Registros
O cliente especifica apenas os dados. O GFS anexa os dados ao arquivo pelo menos uma vez atomicamente em um deslocamento de sua escolha e retorna esse deslocamento ao cliente.
Assegura a atomicidade da saída de cada gravador em aplicações distribuídas onde vários clientes anexam ao mesmo arquivo simultaneamente.
Simplifica o desenvolvimento, evitando a necessidade de sincronização complexa entre clientes.
Snapshot
Cria uma cópia de um arquivo ou árvore de diretórios quase instantaneamente, utilizando a técnica copy-on-write.
O master revoga os leases existentes nos chunks, cria uma cópia dos metadados e redireciona as gravações para novos chunks quando necessário.
Permite a criação rápida de ramificações de conjuntos de dados e o checkpoint do estado atual antes de experimentar alterações.
Operação do Master
Gerenciamento de Namespace e Bloqueio
O GFS não possui uma estrutura de dados por diretório.
O namespace é representado como uma tabela de pesquisa que mapeia nomes de caminho completos para metadados.
Bloqueios sobre regiões do namespace garantem a serialização adequada das operações.
Posicionamento de Réplica
O GFS distribui réplicas de chunk entre racks para maximizar a confiabilidade, disponibilidade e utilização da largura de banda da rede.
O master considera a utilização do espaço em disco, o número de criações recentes e a distribuição entre racks ao posicionar réplicas.
Criação, Replicação e Rebalanceamento
As réplicas de chunk são criadas para criação de chunk, replicação e rebalanceamento.
O master replica chunks quando o número de réplicas disponíveis cai abaixo de um limite definido pelo usuário.
O rebalanceamento move chunks entre chunkservers para balancear a carga e o espaço em disco.
Coleta de Lixo
O GFS não recupera o armazenamento físico disponível imediatamente após a exclusão de um arquivo.
Os arquivos excluídos são renomeados para um nome oculto e removidos após um período de tempo configurável.
Os chunks órfãos são identificados e excluídos durante uma verificação regular do namespace do chunk.
Detecção de Réplica Obsoleta
O master mantém um número de versão de chunk para distinguir entre réplicas atualizadas e obsoletas.
O número da versão é incrementado sempre que o master concede um novo lease em um chunk.
Réplicas obsoletas são detectadas quando um chunkserver reinicia e relata seus chunks e números de versão.
Tolerância a Falhas e Diagnóstico
Alta Disponibilidade
O GFS mantém alta disponibilidade por meio de recuperação rápida e replicação.
O master e os chunkservers são projetados para reiniciar rapidamente após falhas.
A replicação de chunks garante que os dados estejam disponíveis mesmo se um chunkserver falhar.
A replicação do master garante que o sistema de arquivos permaneça disponível mesmo se o master falhar.
Verificação de Soma de Verificação
Os chunkservers verificam a integridade dos seus dados usando somas de verificação para cada bloco de 64 KB.
Somas de verificação são verificadas em leituras para evitar a propagação de dados corrompidos.
Os chunkservers digitalizam e verificam chunks inativos para detectar corrupção em chunks raramente lidos.
Ferramentas de Diagnóstico
Logs de diagnóstico detalhados são usados para isolamento de problemas, depuração e análise de desempenho.
Os logs de RPC registram solicitações e respostas, incluindo informações de tempo, para ajudar a entender as interações entre as máquinas.
Medições
Micro-benchmarks
As medições mostram que o GFS atinge um alto rendimento agregado para leituras e gravações, limitado pela largura de banda da rede.
O desempenho de gravação é menor do que o ideal devido a interações com a pilha de rede, mas não afeta significativamente a largura de banda de gravação agregada.
Clusters do Mundo Real
As medições de dois clusters do Google mostram o uso de armazenamento, tamanho de metadados e tempos de inicialização.
Os clusters têm centenas de chunkservers, suportam muitos TBs de espaço em disco e são usados para processamento de dados de pesquisa e produção.
Experiências
O desenvolvimento e implantação do GFS trouxeram diversos desafios operacionais e técnicos.
Problemas relacionados a discos e ao Linux foram encontrados, levando ao uso de somas de verificação para detecção de corrupção de dados.
A disponibilidade do código Linux foi crucial para explorar e entender o comportamento do sistema e melhorar o kernel.
Trabalhos Relacionados
O GFS é comparado com outros sistemas de arquivos distribuídos, como AFS, xFS, Swift, NASD, Lustre, River e Minnesota s GFS.
O GFS compartilha semelhanças com o AFS em termos de namespace independente de localização, mas difere na forma como distribui dados entre servidores de armazenamento.
O GFS se assemelha à arquitetura NASD, mas usa chunks de tamanho fixo e implementa recursos como rebalanceamento, replicação e recuperação.
As filas produtor-consumidor do GFS são comparadas às filas distribuídas no River, com diferentes compensações em termos de escalabilidade e tolerância a falhas.
Conclusões
O Google File System demonstra as qualidades essenciais para suportar cargas de trabalho de processamento de dados em grande escala em hardware commodity.
- A reavaliação das suposições tradicionais do sistema de arquivos levou a pontos de design radicalmente diferentes, otimizados para as necessidades específicas do Google.
- O GFS oferece tolerância a falhas, escalabilidade e alta disponibilidade por meio de replicação, recuperação rápida e um design centralizado do master.
- O sistema foi projetado em conjunto com as aplicações, resultando em um modelo de consistência relaxado e operações especializadas como anexação atômica de registros.
- O GFS atende com sucesso às necessidades de armazenamento do Google e é amplamente usado para pesquisa e desenvolvimento, bem como para processamento de dados de produção.