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 레이턴시
신뢰성 설계 원칙
- 조용한 실패 방지: 에러 로그가 없어도 큐 깊이, 파일 크기 같은 지표로 이상 감지
- 명확한 장애 경계: 병렬 워커 간 실패가 다른 워커에 전파되지 않도록 격리
- 사전적 쿼터 관리: 리소스 한도에 도달하기 전에 동적으로 조정
- 가시성 우선: 모든 실패가 관찰 가능하고 감사 가능한 형태로 기록
연관 개념
- Spark at Scale
- Real-Time Stream Processing
- Spot Instance Management — Spot 인터럽션도 신뢰성 장애 모드
- Transactional Outbox Pattern
- Data Quality and Validation — 조용한 장애 탐지를 위한 검증
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