급증하는 트래픽 안정적으로 처리하기: 개선편(2) 논리적 파티셔닝
백엔드
급증하는 트래픽 안정적으로 처리하기: 개선편(2) 논리적 파티셔닝
두줄요약
단일 Queue의 HOL Blocking과 인스턴스 단위 스케일링 비효율을 논리적 파티셔닝으로 개선했습니다. Partition별 독립 스케일링으로 10만 건 처리 시간을 25분에서 4분으로 줄였습니다.
문제 상황
- 단일 Ready Queue 구조에서 대규모 TaskGroup이 큐를 점유하며 다른 요청을 지연시키는 HOL Blocking 발생
- 인스턴스 단위 스케일링으로 필요한 Worker 수보다 과도한 Worker가 한꺼번에 늘어나는 비효율
원인 분석
- 하나의 Redis Sorted Set을 여러 TaskGroup이 공유하는 구조
- 작업량이 큰 요청이 큐 전체 처리 흐름을 압박하는 설계
해결 방법
- 같은 Redis 안에서 keyspace를 partition별 prefix로 나누는 논리적 파티셔닝 적용
- taskGroupID 해시 기반 라우팅과 Partition별 독립 Consumer/Worker 구성
- Coordinator가 Partition별 부하를 관찰해 Worker 수를 독립적으로 조절
성능/운영 포인트
- 10만 건 처리 시간을 25분에서 4분으로 단축
- Partition 간 격리로 HOL Blocking 완화
- Worker 수 checkpoint 저장과 재시작 복구로 운영 안정성 확보
