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

Capa do artigo Google File System: Entenda os Fundamentos desse Sistema de Arquivos

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

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.

Para comentários:

Se quiser comentar, sugerir (acréscimos, retificações etc), criticar, elogiar, informar, sobre algum trecho deste artigo, peço a gentileza de utilizar a área de comentários do abaixo informada, no Youtube.

Já existe uma mensagem por lá dedicada a comentários sobre temas publicados neste portal.

Essa também é uma forma de contribuir com o trabalho e estimular sua continuidade e aprimoramento.

Peço a gentileza de comentar, curtir e compartilhar o conteúdo, além de se inscrever no canal do Youtube e ativar o sino de notificações para receber notícias de novos conteúdos.

Agradeço desde já!

Destinado para esses comentários em geral:

https://www.youtube.com/@roberto_csantos/community