피드로 돌아가기
Dev.toBackend
원문 읽기
5개 노드로 2개 장애 허용 — RAFT 기반 KV 시스템의 요청 처리 흐름과 장애 처리 방안
The Journey of a Request in a Raft-Based KV Store"
AI 요약
Context
기존 분산 시스템은 단일 장애점을 가지며 네트워크 파티션이나 노드 장애 시 서비스 중단 문제가 발생한다. Raft consensus protocol은 2f+1 노드 구성으로 f개 노드 장애를 허용하며 강한 일관성을 보장한다. MIT 6.584 lab 3, 4에서는 비신뢰성 네트워크, 네트워크 파티션, 서버 크래시/재시작 조건에서 동작하는 KV 서버를 구현한다.
Technical Solution
- RSM layer → apply channel 모니터링을 통해 Raft가 commit한 command를 Application layer로 전달
- Application layer → client의 Put/Get RPC 요청을 수신하여 RSM layer의 submit 함수 호출 후 응답 대기
- Raft layer → leader election과 log replication 담당, non-leader 서버의 요청은 거부
- RSM layer → 주기적으로 Raft layer와 통신하여 leadership 확인, ErrWrongLeader 발생 시 client에게 전달
- Client ID + request ID를 요청에 첨부하여 중복 요청 추적 및 cache 구현, latest request ID per client와 latest response per client 데이터 구조 유지
Impact
수치 기반 성능 변화 없음
Key Takeaway
Raft 자체보다 시스템의 장애 처리 방식에서 복잡성이 발생하며, client retry로 인한 command overwrite 방지 위해 idempotent request 처리 설계가 필수이다.
실천 포인트
비신뢰성 네트워크 환경에서 중복 요청이 발생하는 클라이언트에서 request deduplication을 client ID + request ID tracking과 cache 방식으로 적용 시 중복 실행 방지와 일관된 응답 보장