워크로드 기반 쿼리 격리
워크로드 기반 쿼리 격리 (Workload Query Isolation)
Pinot에서 워크로드 클래스별로 쿼리 리소스를 격리하는 방법을 안내해요.
출처: 문서
본문
개요 (Overview)
여러 팀이나 여러 애플리케이션이 같은 Pinot 클러스터를 공유하면, 한 워크로드(예: 무거운 분석 쿼리)가 다른 워크로드(예: 대시보드 쿼리)의 성능을 떨어뜨릴 수 있어요. 워크로드 기반 쿼리 격리는 쿼리를 워크로드 클래스로 분류하고, 각 클래스에 서버 스레드, 초당 쿼리 수(QPS) 같은 리소스 상한을 적용해 특정 워크로드가 다른 워크로드의 리소스를 잠식하지 못하게 해요.
워크로드 클래스 (Workload classes)
브로커는 쿼리 옵션(SET workload='...')이나 기타 분류 기준으로 쿼리를 워크로드 클래스에 매핑해요. 테이블 구성의 workloadConfig에서 클래스별 리소스 상한을 정의할 수 있어요.
구성 예시 (Configuration example)
테이블 구성에서 워크로드 클래스별 리소스 상한을 정의해요:
{
"workloadConfig": {
"workloads": {
"free_tier": {
"maxQueriesPerSecond": 10,
"maxServerThreads": 2
},
"enterprise": {
"maxQueriesPerSecond": 100,
"maxServerThreads": 8
}
}
}
}
- maxQueriesPerSecond — 이 워크로드의 초당 최대 쿼리 수.
- maxServerThreads — 이 워크로드가 사용할 수 있는 서버 스레드 상한.
애플리케이션은 쿼리에서 SET workload = 'free_tier';처럼 워크로드 클래스를 지정해요.
리소스 제한 (Resource limits)
격리는 서버 스레드 풀을 워크로드 클래스별로 분리하거나 제한해 실행 중인 쿼리 수를 제어해요. 한 워크로드의 과도한 쿼리가 다른 워크로드의 스레드를 고갈시키지 않도록 보장해요. 브로커 수준에서도 QPS 제한을 적용할 수 있어요.
모범 사례 (Best practices)
- 서로 다른 SLA를 가진 트래픽을 별도 워크로드 클래스로 분리하세요.
- 무거운 테넌트/워크로드에는 더 큰 리소스 상한을 주고, 저비용(free tier)에는 낮은 상한을 적용하세요.
- 클래스별 사용량을 모니터링하고 부족하거나 남는 상한을 조정하세요.