StarRocks 운영기: Resource Group으로 멀티테넌트 워크로드 격리하기
이유진 · 토스 · 토스 기술 블로그
소개
서비스 쿼리가 밀리기 시작했을 때, 우리가 선택한 격리 전략
AI 핵심 요약
서비스 조회와 배치·적재·대시보드 쿼리가 StarRocks 클러스터를 공유하면서 서비스 응답이 밀리자, 토스 DOP 팀은 워크로드를 분류하고 CPU 우선순위를 설계했습니다. 기본은 경합 시 CPU를 비율대로 나누는 cpu_weight로 두고, 서비스 SLA 보호나 과도한 적재 제한이 필요할 때 exclusive_cpu_cores를 적용했으며, 메모리·동시성·폭주 쿼리에는 별도 제한을 더했습니다. 운영 과정에서 Classifier의 매칭 우선순위, Docker의 cpuset과 bind_cpus 및 CPU borrowing 간 의존성, 이종 스펙 노드의 코어 상한을 확인하고 쿼리 이력으로 동작을 검증했습니다. Resource Group은 워크로드 간 간섭을 줄이는 수단이지 용량 증설을 대신하지 않으므로, 총부하가 클러스터 한계에 가까우면 물리적 분리나 증설이 필요하다는 점을 강조합니다.
- CPU 경합이 주된 문제라면 cpu_weight로 시작하고, SLA가 여전히 흔들릴 때 exclusive_cpu_cores를 검토하세요.
- Classifier는 매칭 점수에서 db 조건의 영향이 크므로, user 기반과 db 기반 규칙이 겹치지 않도록 설계하세요.
- concurrency_limit은 동시 쿼리를 큐에 넣고, big_query 제한은 노드별 기준을 넘긴 개별 쿼리를 종료합니다.
- Docker에서 CPU 바인딩과 코어 대여를 쓰려면 cpuset-cpus, enable_resource_group_bind_cpus, borrowing 설정의 의존 관계를 확인하세요.
- pendingTimeMs와 쿼리 이력의 상태·리소스 그룹 필드를 모니터링해 설정이 실제로 적용되는지 검증하세요.
비슷한 학습 자료
토스ㅣSLASH 24 - Kubernetes CPU 알뜰하게 사용하기
SLASH · YouTube
토스증권이 GPU-aware를 넘어 GPU-native 클러스터를 구축한 방법
장재영/김진웅 · 토스 기술 블로그
고객은 절대 기다려주지 않는다: 빠른 데이터 서빙으로 고객 만족도를 수직 상승 시키는 법
이세찬 · 토스 기술 블로그
GPU를 밀도 있게 쓰는 방법 - 토스증권의 GPU 가상화(MIG) 도입기
김진웅 · 토스 기술 블로그
고성능 GPU 클러스터 도입기 #2: 이주하는 데이터
김진웅 · 토스 기술 블로그
SSR 서버 최적화로 비용 아끼기
정진우/문현경 · 토스 기술 블로그