시스템 모델과 장애 감지
- 4.1 통신 링크 모델
- 4.2 노드 행동 모델
- 4.3 타이밍 모델
- 4.4 Ping과 Heartbeat
- 4.5 타임아웃 딜레마
분산 시스템 알고리즘을 논하려면 먼저 세상에 대한 가정을 명확히 해야 해. 뭐가 잘못될 수 있는지 정의하고, 그 다음에 잘못된 걸 어떻게 감지하는지를 다루는 거야. 이 장은 그 두 단계 — 시스템 모델을 세우고, 그 모델 위에서 장애를 감지하는 이야기지.
통신 링크에 대한 모델이 세 가지 있어. 가장 약한 건 Fair-loss links — 메시지가 유실되거나 중복될 수 있지만, 계속 재전송하면 결국 도착해. 그 위에 수신자 측 중복 제거를 쌓으면 Reliable links — 메시지가 정확히 한 번 전달돼. 거기에 송신자 신원 검증까지 붙이면 Authenticated reliable links야. TCP가 IP 위에 신뢰성을 쌓은 것처럼, 약한 보장 위에 강한 보장을 레이어링하는 패턴이 또 나오지.
노드 행동 모델도 세 가지야. Crash-stop은 노드가 죽으면 영원히 안 돌아와 — 가장 단순한 모델이지. Crash-recovery는 죽었다가 나중에 재시작할 수 있어. 서버 프로세스가 죽었다가 재시작되는 현실의 대부분 시스템이 이거야. Byzantine은 노드가 임의로 행동할 수 있어 — 악의적이거나 버그가 있는 노드까지 감안하는 건데, 블록체인처럼 참여자를 신뢰할 수 없는 환경에서나 필요하고 비용이 훨씬 크거든.
마지막으로 타이밍 모델. Synchronous는 메시지 지연에 알려진 상한이 있어. Asynchronous는 상한이 없고. Partially synchronous는 그 중간인데, 알려지지 않은 GST(Global Stabilization Time) 이후에는 지연이 바운드돼. "보통은 빠르게 도착하지만 가끔 예측 불가능하게 느려질 수 있다" — 현실에 가장 가깝지. 이 책은 주로 fair-loss links + crash-recovery + partial synchrony 모델을 써. 이 가정 위에서 이후 장들의 알고리즘이 전부 돌아가.
좋아, 뭐가 잘못될 수 있는지 정의했으니 이제 잘못된 걸 어떻게 감지하냐는 문제야. 네트워크가 불안정하고 프로세스가 언제든 죽을 수 있는 세상에서, "저 노드 살아있어?" 판단하는 건 생각보다 어려워. 영원히 응답을 기다릴 수는 없잖아.
기본 메커니즘은 두 가지야. Ping은 능동적으로 "너 살아있어?" 물어보는 거고, Heartbeat는 반대 방향으로 프로세스가 주기적으로 "나 살아있어" 메시지를 보내는 거야. 하나는 능동적으로 묻고, 하나는 수동적으로 기다리는 차이지만 둘 다 핵심은 타임아웃이야.
근데 이 타임아웃을 어떻게 잡느냐가 딜레마거든. 너무 짧으면 건강한 노드를 죽은 걸로 오판하는 false positive가 많아져. 네트워크 지연이 잠깐 튀었을 뿐인데 장애로 착각하는 거지. 너무 길면 진짜 장애를 감지하는 데 시간이 오래 걸려서 그 사이에 장애가 다른 곳으로 퍼질 수 있어. 정답이 없는 트레이드오프야.
이 딜레마에 대한 영리한 해법이 Phi Accrual Failure Detector야. "살았다/죽었다" 이진 판단 대신 **연속적인 의심 수준(suspicion level)**을 내뱉어. 과거 하트비트 도착 간격의 분포를 기반으로 "이 노드가 죽었을 확률"을 계산하는 거지. phi 값이 높을수록 의심이 커. 핵심은 네트워크 상태에 따라 자동으로 적응한다는 거야 — 평소에 지연이 큰 환경이면 그에 맞게 기준이 조정돼. 고정 타임아웃의 한계를 깔끔하게 넘는 거지.
정리
4장 읽고 기억할 거 세 가지:
- 시스템 모델은 통신 링크, 노드 행동, 타이밍에 대한 가정의 묶음이야 — 현실은 대부분 crash-recovery + partially synchronous이고, 이 가정에 따라 알고리즘의 정확성이 달라져.
- 장애 감지의 기본은 Ping과 Heartbeat인데, 타임아웃을 짧게 잡으면 오탐이, 길게 잡으면 감지 지연이 생겨 — 정답 없는 트레이드오프야.
- Phi Accrual Failure Detector는 이진 판단 대신 연속적 확률을 써서 네트워크 상태에 자동 적응해 — 고정 타임아웃의 한계를 넘는 실전적 해법이지.