Distributed Systems Reliability

분산 시스템에서 조용한 장애, 리소스 고갈, 동시성 충돌을 방지하고 가시성을 확보하는 패턴


핵심 개념

분산 데이터 시스템은 단일 노드 장애 외에도 “조용한 실패(silent failure)” — 오류 없이 데이터가 유실되거나 처리가 지연되는 상황 — 이 특히 위험하다. 복잡한 파이프라인에서 이를 방지하려면 사전적 모니터링, 리소스 쿼터 관리, 명확한 장애 경계 설계가 필요하다.

ClickHouse의 조용한 데이터 손실

분산 삽입(Distributed table insert)의 비동기 플러시 파이프라인은 3가지 방식으로 조용하게 실패할 수 있다:

실패 모드 1: Keeper/ZooKeeper 다운타임

  • ZooKeeper(또는 ClickHouse Keeper) 장애 시 테이블이 읽기 전용으로 전환
  • 새 삽입이 분산 큐 파일에 누적되다가 플러시 실패

실패 모드 2: 과도한 삽입 블록 크기

  • 너무 큰 삽입 블록이 실행 타임아웃을 초과
  • 에러 로그 없이 조용히 실패할 수 있음

실패 모드 3: 동시성 슬롯 고갈

  • 사용자 동시성 한도에 도달 시 백그라운드 INSERT 워커가 기아(starvation) 상태
  • 분산 큐 파일이 무한히 성장하면서 데이터 누락

핵심 대응: 분산 큐 파일(/var/lib/clickhouse/data/{db}/{table}/)을 지속적으로 모니터링

LinkedIn의 잡 수집 시스템 — 설정 기반 신뢰성

20TB/일, 수천 글로벌 소스를 처리하는 시스템의 장애 경계 설계:

  • 추출 로직을 코드에서 Sitemap 설정 파일로 분리 → 소스별 독립적 장애 경계
  • 트랜잭션 상태 머신: 병렬 마이닝 태스크 간 정확한 장애 경계를 시행
  • AI 도구가 엔지니어링 배포 없이 소스 온보딩 → 빠른 복구

Pinterest의 통합 쿼터 관리 (Piqama)

리소스 고갈을 사전에 방지하는 쿼터 거버넌스 플랫폼:

  • 이력 데이터 기반 동적 한도: Apache Iceberg에 저장된 이력 소비 데이터로 한도 산출
  • 크로스-서비스 적용: 배치 스케줄러와 온라인 서비스 양쪽에 동일 쿼터 정책 시행
  • 재무 연계: 리소스 소비를 비용과 직접 연결하여 팀별 책임성 강화

ClickHouse — 분산 커넥션 풀 동작

분산 테이블 쿼리 시 TCP 커넥션 풀의 stale 연결 재사용 패턴:

  • 서버의 idle_connection_timeout(1시간)으로 닫힌 연결을 클라이언트가 감지하지 못함
  • 버스트 → 유휴 → 버스트 패턴에서 stale 연결 재사용 시 Broken Pipe 경고 발생
  • connections_with_failover_max_tries=7로 자동 재시도하여 쿼리 실패 없음
  • 버그가 아닌 설계된 동작 — 온프레미스 환경에서는 “괜찮아 보인다”와 “괜찮다고 안다”의 차이가 중요

Uber uForwarder — Kafka 컨슈머 프록시

1,000+ 서비스를 위한 gRPC 기반 Push 방식 Kafka 컨슈머 프록시:

  • 파티션 관리 복잡성을 서비스에서 분리
  • DLQ + 순서 무관 커밋으로 Head-of-Line Blocking 해결
  • 컨텍스트 인식 라우팅으로 환경 격리(prod/non-prod)와 존 격리

Netflix — 고처리량 그래프 추상화

전용 그래프 DB 대신 기존 KV/TimeSeries/캐싱 인프라 위에 그래프 추상화 계층을 구축:

  • Forward/Reverse 이중 에지 인덱스로 양방향 O(1) 트래버설
  • Namespace 기반 멀티테넌시로 데이터 격리와 독립적 스케일링
  • Tombstone-and-Sweep으로 분산 락 없이 노드 삭제
  • 초당 1,000만+ 연산, 650TB 데이터, p99 한 자릿수 ms 레이턴시

신뢰성 설계 원칙

  1. 조용한 실패 방지: 에러 로그가 없어도 큐 깊이, 파일 크기 같은 지표로 이상 감지
  2. 명확한 장애 경계: 병렬 워커 간 실패가 다른 워커에 전파되지 않도록 격리
  3. 사전적 쿼터 관리: 리소스 한도에 도달하기 전에 동적으로 조정
  4. 가시성 우선: 모든 실패가 관찰 가능하고 감사 가능한 형태로 기록

연관 개념


Source: Pranav Mehta - Silent Data Loss in ClickHouse, Pinterest - Piqama Pinterest Quota Management Ecosystem, LinkedIn - Engineering LinkedIn’s Job Ingestion System at Scale, ClickHouse Distributed Connection Pooling, uForwarder - Kafka Consumer Proxy at Uber, High-Throughput Graph Abstraction at Netflix - Part I