Silent Failures and Data Integrity
에러 로그 없이 데이터가 유실되거나 손상되는 “조용한 장애”를 탐지하고 방지하는 패턴
핵심 개념
Silent failure는 시스템이 에러를 보고하지 않으면서 데이터가 유실·손상되는 장애 유형이다. 분산 시스템에서 특히 위험하며, 발견까지 수일~수주가 걸릴 수 있다. 검증(validation)과 구별되는 핵심 차이는 시스템이 정상으로 보고하는 상태에서 발생한다는 점이다.
대표적 조용한 장애 패턴
ClickHouse 비동기 플러시 실패
분산 테이블 INSERT의 3가지 조용한 실패 모드:
- Keeper 다운타임: 테이블이 읽기 전용으로 전환, 삽입이 큐에 누적 후 유실
- 과도한 블록 크기: 실행 타임아웃 초과 시 에러 로그 없이 실패
- 동시성 슬롯 고갈: 백그라운드 INSERT 워커 기아 → 큐 파일 무한 성장
핵심 대응: /var/lib/clickhouse/data/{db}/{table}/ 분산 큐 파일 크기를 지속 모니터링
Kafka 리밸런스 문제 (KIP-848 이전)
기존 프로토콜의 조용한 데이터 처리 중단:
- 단일 오동작 멤버가 전체 그룹 리밸런스 방해
- Fake rebalance로 메트릭 해석 혼동
- KIP-848의 서버 사이드 점진적 할당으로 해결
Stale 커넥션 재사용
분산 테이블 쿼리 시 TCP 풀의 stale 연결 재사용:
- 서버의
idle_connection_timeout만료 후 클라이언트 미감지 - Broken Pipe 경고 발생 — 설계된 동작이지만, “괜찮아 보인다”와 “괜찮다고 안다”의 차이가 중요
탐지 전략
행동 메트릭 우선 (Netflix Data Canary)
기술적 메트릭(에러율, 레이턴시)보다 고객 영향 지표가 데이터 손상을 먼저 탐지:
- SPS(Starts Per Second) 같은 행동 메트릭으로 2.5~4분 내 탐지
- Baseline/Canary 클러스터 분리로 비교 검증
단조 증가 카운터
파이프라인 각 단계에서 처리 건수를 단조 증가 카운터로 추적:
- 소스 ↔ Lake 카운트 일관성 검증 (Halodoc Layer 1)
- 시간 바운드 비교로 불일치 즉시 감지
리소스 쿼터 사전 관리 (Pinterest Piqama)
리소스 고갈이 조용한 장애의 근본 원인이 되기 전에 차단:
- 이력 데이터 기반 동적 한도 산출
- 크로스-서비스 쿼터 적용으로 배치/온라인 양쪽 보호
Exactly-Once 보장
Transactional Outbox Pattern
DB 트랜잭션과 메시지 발행의 원자성을 보장하여 메시지 유실 방지:
- SQLite 샤딩으로 확장
- 에페머럴 상태와 영구 상태를 명확히 분리
Kafka KIP-848 에포크 기반 수렴
3중 에포크(Group/Assignment/Member)로 점진적 할당 수렴 — 글로벌 동기화 장벽 제거
연관 개념
- Distributed Systems Reliability
- Data Quality and Validation — 명시적 검증과 보완적 관계
- Real-Time Stream Processing — 스트리밍 파이프라인의 조용한 장애
- Transactional Outbox Pattern — 메시지 유실 방지
Source: Pranav Mehta - Silent Data Loss in ClickHouse, ClickHouse Distributed Connection Pooling, The Data Canary - Netflix Catalog Validation, Pinterest - Piqama Pinterest Quota Management Ecosystem, KIP-848 Next Generation Consumer Rebalance Protocol