HOL 블로킹을 해결하고 워커 효율을 극대화한 논리적 파티셔닝과 코디네이터 설계 전략
이 아티클은 채널톡의 벌크액션 서버가 직면한 대규모 트래픽 병목 현상을 논리적 파티셔닝을 통해 해결한 과정을 다룹니다. 물리적 서버 증설 없이 Redis 키스페이스 분리와 지능형 코디네이터 도입만으로 처리 성능을 84% 개선한 구체적인 아키텍처와 구현 노하우를 제공합니다.
Redis 기반 작업 큐를 운영하며 대용량 작업에 의한 서비스 지연을 겪고 있거나, 인프라 비용 효율적인 스케일링 전략을 고민하는 백엔드 엔지니어에게 추천합니다.
기존 벌크액션 서버는 단일 Ready Queue 구조로 인해 대규모 작업이 큐를 점유하여 다른 요청이 지연되는 HOL Blocking 현상을 겪고 있었으며, 인스턴스 단위 스케일링으로 인한 불필요한 자원 낭비가 발생하고 있었습니다.
Redis 키스페이스를 접두사(Prefix)로 분리하는 논리적 파티셔닝을 도입하고, Coordinator가 각 파티션의 부하를 독립적으로 관찰하여 워커(Worker) 수를 미세하게 조절하는 구조를 설계했습니다.
10만 건 기준 처리 시간을 25분에서 4분으로 84% 단축했으며, 파티션 간 격리를 통해 특정 대규모 요청이 전체 시스템의 지연을 유발하던 문제를 근본적으로 해결했습니다.
Trade-off
파티션 수가 설정 시점에 고정되어 동적 변경 시 재배포가 필요하며, 해시 기반 분산 전략으로 인해 특정 파티션에 부하가 집중될 수 있는 Hot Partition 가능성이 여전히 존재합니다.
물리적인 데이터베이스 클러스터를 구축하는 대신, 동일한 DB 내에서 키의 네이밍 규칙(Prefix)을 통해 데이터를 논리적으로 격리하는 방식입니다.
대기열의 맨 앞에 있는 무거운 작업이 통로를 점유하여 뒤에 있는 가벼운 작업들의 처리가 모두 지연되는 병목 현상입니다.
분산된 여러 컴포넌트의 상태를 중앙에서 관찰하고, 부하 상황에 맞춰 최적의 자원 할당이나 작업 조율 명령을 내리는 관리 패턴입니다.



