Hinted Handoff는 분산 데이터베이스에서 쓰기 대상 노드가 일시적으로 장애일 때, 다른 노드가 임시로 쓰기를 대신 저장했다가 대상 노드 복구 후 전달하는 메커니즘이다. Cassandra, DynamoDB에서 고가용성 쓰기를 보장하는 핵심 기능이다.
동작 원리
정상 상태:
클라이언트 쓰기 → Coordinator → 복제본 A, B, C
복제본 C 장애 상태:
클라이언트 쓰기 → Coordinator → 복제본 A, B (성공)
→ 복제본 D (힌트 저장)
"C가 복구되면 이 데이터를 전달해"
복제본 C 복구:
복제본 D → 복제본 C: 저장해 뒀던 힌트 전달
Coordinator가 Gossip으로 C 복구 감지
Cassandra 구현
힌트 저장 위치:
- 각 노드의 system.hints 테이블 또는 hints 디렉토리
- 디스크 공간 제한 (max_hint_window_in_ms 기본 3시간)
힌트 전송 트리거:
1. Gossip으로 대상 노드 복구 감지
2. HintedHandoffManager가 힌트 전송 시작
3. 성공적으로 전달된 힌트 삭제
한계와 주의사항
힌트 저장 시간 초과:
max_hint_window_in_ms 이후 힌트 폐기 → 복구 후 Anti-Entropy 필요
디스크 공간:
힌트 데이터가 쌓이면 코디네이터 노드 디스크 부하
힌트 != 완전한 일관성:
힌트 전달 전 읽기 → 오래된 데이터 반환 가능 (최종 일관성)
쿼럼과의 관계
쓰기 일관성 수준:
- ONE: 복제본 1개 성공 → 힌트 사용 가능
- QUORUM: 과반수 성공 필요 → 힌트로 일부 보완
- ALL: 모든 복제본 성공 → 장애 노드 있으면 쓰기 실패
Hinted Handoff는 ONE/QUORUM 수준에서 가용성 향상
관련 개념