Обновлено: 25 марта 2026 г. в 04:52

Distributed File System (GFS/HDFS)

medium

Классическая задача: master/data nodes, block replication, metadata management, recovery и high throughput I/O.

Распределенная файловая система - это задача про большие файлы, metadata scale и throughput внутри кластера, а не просто про разложить куски по машинам.

Глава помогает увидеть, как namespace service, chunk placement, replication, append and read path и recovery после node failure работают как один storage fabric.

В интервью и архитектурных обсуждениях кейс полезен тем, что тренирует разделение control plane и data plane и разговор о locality, repair и skew.

Durability

Проектируйте replication и recovery так, чтобы выдерживать node/rack/zone отказы.

Metadata Control

Разделение metadata/data и placement-политики определяют управляемость кластера.

Hotspot Risk

Нужны стратегии против skew: shard rebalancing, compaction и locality-aware routing.

Operational Cost

Сравнивайте storage tiers, network egress и цену отказоустойчивости.

Paper

The Google File System

Классическая работа Google о проектировании distributed file system для больших данных.

Открыть публикацию

Distributed File System - базовый строительный блок для data-платформ. Идея GFS/HDFS: разделять крупные файлы на большие блоки, реплицировать их по кластеру и держать metadata отдельно от data path. Это упрощает горизонтальное масштабирование и делает систему устойчивой к постоянным hardware-сбоям.

Требования

Функциональные

Хранение очень больших файлов (гигабайты/терабайты) поверх кластера commodity-серверов.

Последовательные append/read операции для batch и аналитических workload'ов.

Репликация блоков между узлами и автоматическое восстановление после сбоев.

Метаданные файловой системы: namespace, mapping файл -> блоки -> реплики.

Background процессы: ребалансировка, re-replication, garbage collection orphan-блоков.

Нефункциональные

Durability: 11+ nines (практически)

Потеря отдельных дисков/нод не должна приводить к потере данных.

Throughput: Высокий aggregate I/O

Оптимизация под большие sequential read/write, а не под мелкие random IO.

Scalability: Линейное горизонтальное

Добавление DataNode должно увеличивать и capacity, и bandwidth.

Availability: Работа при частичных сбоях

Система деградирует, но остаётся доступной для majority сценариев.

High-Level Architecture

Architecture Map

DFS high-level structure (GFS/HDFS style)

Control Plane

Master
namespace + block map
Metadata Journal
edits + checkpoints
Replication Manager
repair replicas
Cluster Balancer
hotspot rebalance

Data Plane

Client
append/read API
DataNode A
block replicas
DataNode B
block replicas
DataNode C
block replicas
Общий контур DFS: metadata plane отдельно от data plane, плюс фоновые control-процессы.
Metadata and data paths are separated
Direct client-to-DataNode I/O
Background repair and balancing

Ключевой паттерн: metadata plane и data plane разделены. Master управляет размещением и namespace, но сами байты текут напрямую между client и data nodes.

Read/Write Flow

Read/Write Path Explorer

Переключай path и прогоняй шаги, как это сделано в object-storage flow.

1
Client
request block allocation
2
Master
placement + lease
3
Primary DataNode
stream chunk
4
Replica Pipeline
DN2 -> DN3 + ack chain
5
Journal Commit
metadata + version
Write path: стартуйте Play, чтобы увидеть pipeline записи блока и commit метаданных.

Write Path: operational notes

  • Клиент запрашивает у master выделение нового блока и список целевых DataNode.
  • Master выбирает узлы по placement policy (rack-aware, free space, load).
  • Клиент стримит chunk в pipeline DataNode1 -> DataNode2 -> DataNode3.
  • ACK возвращается цепочкой назад; блок помечается committed после успешной записи всех реплик.
  • Метаданные о блоке и версии фиксируются в journal/snapshot контуре master.

Read Path: operational notes

  • Клиент получает у master карту блоков и список доступных реплик.
  • Для каждого блока выбирается ближайшая реплика (rack/locality aware).
  • Чтение идёт напрямую с DataNode, без проксирования payload через master.
  • При checksum mismatch клиент переключается на другую реплику.
  • Master участвует только в metadata plane, что уменьшает bottleneck.

Failure Handling

  • DataNode timeout: master помечает ноду dead и планирует re-replication её блоков.
  • Corrupted block: детектируется по checksum; запускается repair из здоровой реплики.
  • Master crash: восстановление из journal + checkpoint, затем replay edits.
  • Network partition: quorum/HA-механика для active/standby master (в современных реализациях).
  • Hot file/block: read replicas и cache tiers уменьшают hotspots на популярных данных.

GFS vs HDFS (коротко)

АспектGFSHDFS
Основной use-caseBig data processing внутри Google экосистемыHadoop analytics экосистема в enterprise
Block sizeБольшие chunks (классически 64MB)Большие blocks (обычно 128MB+)
Consistency modelRelaxed, append-heavy semanticsWrite-once-read-many (классически)
Master HAВнутренние HA-стратегии GoogleNameNode HA (active/standby + journal quorum)

Что обсудить на интервью

  • Почему large block size уменьшает metadata overhead и повышает throughput.
  • Как placement policy балансирует locality, fault domains и network cost.
  • Почему single-master исторически проще, и как эволюционировать к HA.
  • Как проверять целостность: checksums, scrubbing, background repair.
  • Где граница DFS vs Object Storage и как они сочетаются в data platform.

Reference

HDFS Architecture Guide

Официальное описание дизайна HDFS: NameNode, DataNode, replication и отказоустойчивость.

Открыть документацию

Связанные главы

  • Object Storage (S3) - помогает сравнить DFS и object storage по модели доступа, консистентности и эксплуатационным компромиссам.
  • Big Data - добавляет контекст data-платформ, где GFS/HDFS выступают базовым storage-слоем для batch и analytics.
  • DDIA - укрепляет фундамент по репликации, partitioning и отказоустойчивости в распределённых хранилищах.
  • Database Internals - углубляет внутреннюю механику storage engines и работу metadata/data path для систем хранения.

Чтобы отмечать прохождение, включи трекинг в Настройки