
백엔드
Raft 알고리즘을 이용해 고가용 프로그램을 만들어보자!!
두줄요약
Raft와 sofa-jraft로 3노드 고가용 우선순위 큐를 구현한 사례를 소개했습니다. 리더 선출과 로그 복제로 장애 상황에서도 일관성을 유지하는 흐름을 설명했습니다.
문제 상황
- 분산 시스템에서 노드 장애와 네트워크 파티션 속에서도 데이터 일관성과 고가용성 유지 필요
- 우선순위 큐를 여러 노드에서 동일하게 유지하는 합의 구조 요구
원인 분석
- 클라이언트 요청과 상태 변경이 여러 노드에 흩어지면 일관성 보장 어려움
- 과반수 합의 없이 상태를 바꾸면 장애 시 데이터 불일치 위험
해결 방법
- Raft 알고리즘으로 리더 선출, 로그 복제, 안전성 확보
- sofa-jraft를 활용해 3노드 Raft 클러스터와 PriorityQueueStateMachine 구성
- 리더로 enqueue, dequeue, peek 요청을 보내고 커밋 후 모든 노드에 동일 적용
성능/운영 포인트
- 리더 장애 시 200~300ms 수준의 짧은 서비스 지연 후 재선출
- 팔로워 장애와 네트워크 파티션에서도 과반수 클러스터가 지속 동작
- 모니터링, 스냅샷 백업, 로그 압축, 클러스터 확장 고려 필요
