OLAP资源隔离机制详解
OLAP系统中如何实现多租户的资源隔离?请说明StarRocks/ClickHouse/Doris各自的资源隔离机制(资源组/用户配额/Query Queue),以及如何保证查询稳定性——避免大查询打满集群影响小查询。
回答
我还是少年
1. 资源隔离目标
核心:
- 大查询不阻塞小查询
- 在线服务(SLA≤100ms)与离线ETL不互相影响
- 合理分配CPU/内存/IO资源
2. StarRocks资源隔离
资源组(Resource Group)
-- 创建资源组
CREATE RESOURCE GROUP olap_online
PROPERTIES (
'type' = 'normal',
'cpu_core_limit' = '20',
'mem_limit' = '50%',
'concurrency_limit' = '20'
);
CREATE RESOURCE GROUP etl_offline
PROPERTIES (
'type' = 'normal',
'cpu_core_limit' = '30',
'mem_limit' = '30%',
'concurrency_limit' = '5'
);
-- 绑定用户
ALTER USER 'bi_user' SET RESOURCE GROUP 'olap_online';
ALTER USER 'etl_user' SET RESOURCE GROUP 'etl_offline';
查询队列
-- StarRocks 3.0+ 查询排队
ADMIN SET FRONTEND CONFIG ('query_queue_concurrency_limit' = '20');
3. ClickHouse资源隔离
User Quota(用户限额)
<!-- users.xml -->
<quotas>
<online_quota>
<interval>
<duration>3600</duration>
<queries>10000</queries>
<errors>100</errors>
<result_rows>10000000</result_rows>
<read_rows>1000000000</read_rows>
<execution_time>3600</execution_time>
</interval>
</online_quota>
</quotas>
Workload Groups(ClickHouse 22.8+)
CREATE WORKLOAD GROUP wg_online
('max_memory_usage' = '50000000000', -- 50GB
'max_execution_time' = '60',
'priority' = 'high');
4. Doris资源隔离
资源标签(Resource Tag)
-- 为BE节点打标签
ALTER SYSTEM MODIFY BACKEND "be1:9050" SET ("tag.location" = "group_online");
-- 绑定用户
SET PROPERTY FOR 'bi_user' 'resource_tags.location' = 'group_online';
Workload Group
CREATE WORKLOAD GROUP wg_report
PROPERTIES (
'cpu_share' = '20',
'memory_limit' = '30%',
'max_concurrency' = '10'
);
5. 查询熔断与降级
策略:
1. 预估扫描数据量,超过阈值拒绝
2. 运行时内存超限自动Kill
3. 大查询自动排队,小查询优先
4. 慢查询日志报警
5. 动态调整并发度