Google File System 논문 풀어보기: 간단한 분석

발행: (2025년 12월 16일 오전 03:31 GMT+9)
9 min read
원문: Dev.to

Source: Dev.to

Core Philosophy: Keep It Simple, Scale Big

GFS는 엄격한 일관성보다 단순성, 높은 처리량, 장애 허용성을 우선시합니다. 핵심 아이디어:

  • 완화된 일관성 – 엄격한 데이터 보장을 포기하고 성능을 얻습니다.
  • 단일 마스터 – 메타데이터 관리를 단순화하지만 병목 위험이 있습니다(설계상 최소화).
  • 워크로드 초점 – 작은 파일이 아닌 큰 파일과 순차 접근에 최적화되었습니다.

GFS Architecture: Masters, Chunkservers, Clients

GFS는 세 가지 주요 구성 요소로 이루어집니다:

  • Master – 메타데이터(파일 구조, 청크 위치)를 메모리에 저장해 빠르게 접근합니다.
  • Chunkservers – 64 MB 데이터 청크를 저장하며, 보통 3배 복제하여 로컬 디스크에 보관합니다.
  • Clients – 마스터로부터 메타데이터를 받고, 청크서버로부터 직접 데이터를 가져오는 애플리케이션입니다.

단일 마스터는 메타데이터 작업만 담당함으로써 설계를 단순하고 가볍게 유지합니다.

Design Choice #1: Big 64 MB Chunks

GFS는 대부분의 파일 시스템에서 사용하는 일반적인 4 KB 블록 대신 64 MB 청크를 사용합니다.

Why?

  • 마스터 쿼리 감소 – 큰 청크 덕분에 메타데이터 통신 오버헤드가 줄어듭니다.
  • 안정적인 연결 – 청크서버와의 장기 TCP 연결을 유지해 네트워크 오버헤드가 감소합니다.
  • 작은 메타데이터 footprint – 청크 수가 적어 마스터의 메모리 사용량이 낮아집니다.

Downsides

  • 작은 파일의 공간 낭비 – 아주 작은 파일도 전체 64 MB 청크 하나를 차지합니다.
  • 핫스팟 – 인기가 많은 작은 파일이 특정 청크서버에 과부하를 일으킬 수 있습니다(추가 복제로 완화).

Design Choice #2: Split Control and Data Planes

GFS는 메타데이터 관리(master)와 데이터 저장(chunkservers)을 분리합니다.

How It Works

  • 마스터는 파일 네임스페이스와 청크‑위치 매핑을 담당합니다.
  • 클라이언트는 실제 데이터 전송을 위해 청크서버와 직접 통신합니다.

Benefits

  • 가벼운 마스터 – 데이터를 다루지 않아 마스터가 빠르고 응답성이 좋습니다.
  • 높은 처리량 – 클라이언트‑청크서버 직접 통신으로 대역폭을 최대화합니다.
  • 단순한 설계 – 관심사의 명확한 분리로 GFS 관리가 쉬워집니다.

이 아키텍처는 수천 개의 동시 클라이언트를 병목 없이 지원합니다.

How Reads Work

GFS에서 읽기는 다음과 같은 간단한 흐름을 따릅니다:

  1. 클라이언트는 파일 이름과 바이트 오프셋을 청크 인덱스로 변환합니다(오프셋 ÷ 64 MB).
  2. 클라이언트는 마스터에 청크 핸들 및 청크서버 위치를 요청합니다.
  3. 마스터는 메타데이터를 반환하고, 클라이언트는 이를 캐시합니다.
  4. 클라이언트는 해당 청크서버에 직접 데이터를 요청합니다.
  5. 청크서버는 요청된 바이트 범위를 반환합니다.

Design Choice #3: Two Write Patterns

GFS는 작업 유형에 따라 쓰기 방식을 다르게 처리합니다.

Concurrent Writes

  • 마스터는 각 청크에 대해 primary 복제본을 지정합니다.
  • 클라이언트는 primary에 쓰기를 보내고, primary가 secondary 복제본과 조율합니다.
  • primary는 모든 복제본이 동일한 순서로 쓰기를 적용하도록 보장합니다.

Concurrent Appends

  • 여전히 primary 복제본을 사용해 조율 및 순서를 관리합니다.
  • GFS( primary를 통해) 는 클라이언트가 조율할 필요 없이 자동으로 append 오프셋을 선택합니다.
  • 클라이언트는 실제 데이터가 기록된 오프셋을 받습니다.

Benefits

  • 락‑프리 – 여러 클라이언트가 동시에 append 할 수 있어 별도 조율이 필요 없습니다.
  • Atomic Append 보장 – 각 append 작업은 원자적으로 완료됨이 보장됩니다.

Design Choice #4: Relaxed Consistency Model

GFS는 의도적으로 엄격한 일관성 보장을 피합니다.

Why?

  • 전체 시스템 설계를 단순화하고 성능을 향상시킵니다.
  • 구글의 append‑중심, read‑중심 애플리케이션 패턴에 맞춥니다.

Implications

  • 일관된 메타데이터 – 파일 생성·삭제 작업은 강한 일관성을 가집니다.
  • 완화된 데이터 일관성 – 동시 쓰기로 인해 데이터가 뒤섞일 수 있으며, 클라이언트가 유효한 데이터 영역을 식별해야 합니다.

이 트레이드‑오프는 구글의 특정 사용 사례에 잘 맞지만, 애플리케이션 차원의 인식이 필요합니다.

Fault Tolerance Mechanisms

GFS는 여러 기법을 통해 높은 가용성을 보장합니다:

  • Write‑Ahead Logging (WAL) – 마스터 작업을 디스크에 기록한 뒤 응답을 보내 메타데이터 내구성을 확보합니다.
  • Shadow masters – 백업 마스터 서버가 읽기 전용 접근과 장애 복구 기능을 제공합니다.
  • 단순화된 복구 – 네임스페이스와 파일‑청크 매핑만 영구 저장하고, 청크 위치는 시작 시 청크서버에 질의해 재발견합니다.

Data Integrity: Checksums

GFS는 체크섬을 사용해 데이터 손상을 감지합니다(수천 개의 저가형 디스크 환경에서 필수):

  • 청크서버는 읽기와 쓰기 모두에서 데이터 무결성을 검증합니다.
  • 이는 신뢰성을 유지하는 데 핵심입니다.

Challenges and Limitations

  • 단일 마스터 병목 – 설계가 가볍고 읽기용 shadow 복제본이 있어 드물게 발생합니다.
  • 작은 파일 비효율 – 64 MB 청크는 작은 파일에 최적이 아닙니다.
  • 일관성 복잡성 – 클라이언트가 잠재적으로 일관되지 않은 데이터 영역을 처리해야 합니다.

Conclusion

GFS는 신중한 트레이드‑오프를 통해 대규모 확장 가능한 시스템을 구축하는 방법을 보여주며 분산 스토리지를 혁신했습니다. 큰 청크 크기, 제어/데이터 플레인 분리, 완화된 일관성 모델은 특정 워크로드에 대해 뛰어난 성능과 장애 허용성을 제공합니다.

Back to Blog

관련 글

더 보기 »