火山引擎 Prometheus 面向大模型场景的优化实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 火山引擎 Prometheus 的优化实践 郭刚平 面向大模型场景
2. 目录 01 大模型场景指标观测需求和挑战 02 火山引擎 Prometheus 优化思路 03 火山引擎 Prometheus 优化实践 04 总结与展望
3.
4. 01 大模型场景指标观测 需求和挑战
5. 大模型场景 Prometheus AI应用 (MaaS) AI平台 (PaaS) 全栈监控 推理服务API MCP 、Agent 开发 模型开发 模型训练 Ray/ TensorFlow/Argo Workflow/ veRL... 模型推理 SGLang/vLLM/xLLM... Promethe us Workload 调度管理 贯穿各层 集成度高 依赖度深 容器平台 AI基础设施 (IAAS) cAdvisor CPU 服务器 kube state metrics GPU 服务器 网络 RDMA 分布式存储
6. 大模型场景指标观测需求和挑战 高扩展 支撑的指标规模上限要高, 能够水平扩容 高基数问题 高性能 高可用 低门槛 查询速度快、 能够容忍一定程度的不合理指标打点 服务可用性、租户间隔离、 请求间隔离 接入简单、托管运维、 查询方便、告警开箱即用 租户QoS保障 HPA可靠性
7. 案例一:火山方舟平台在线推理服务 特点 1:面向ToD/ToC 的推理API服务 指标规模随用户数线性增长 高基数、重查询问题,影响其他小租户 特点 2 :SLO 、成本效率要求高 重度依赖基于自定义指标的HPA 可用性要求高 典型推理服务架构 网关 多租户/多AZ容灾存储集群 API Gateway App 推理引擎 vLLM/xLLM/dynamo/sglang... Prefill Pods App Pod 弹性扩缩 HPA/KEDA 分布式缓存 镜像加速/模型缓存/KV Cache 重查 询 轻查 询 模型 Qwen/Deepseek Decode Pods Prometheus Adapter OSS Promethe us 查询网关 超时/失 败 存储集群 租户 B 租户 A 写入网关 CPU 高 反压
8. 案例二:自动驾驶云平台 特点:大量短生命周期的任务 高基数问题 自动驾驶云 Workflow Workflow Workflow Prometheus 容器集群 每天下午开始RecordingRule 执行失败
9. 02 火山引擎 Prometheus 优化思路
10. 火山引擎 Prometheus 接入中心 监控看板 告警中心 数据消费 RecordingRule 多租户/多AZ容灾存储集群 查询网关 存储集群 ... 写入网关 集群管理(租户元数据、组件弹性扩缩) 存储集群 网关 监控平台架构
11. 火山引擎 Prometheus 优化思路 全层次视角 2 从集群 - > 租户 - > 请求粒度 逐层分析看 可慢不可瘫 3 1 宁可查询请求慢一点,也要尽量避免整个服务 挂掉影响更多用户 4 端到端视角 优、治结合 从sdk - > agent - > 网关 - > 存储引擎 整个链 路看 从水平、垂直视角,合理优化提升系统上限 思路与原则 辅以治理解决方案,帮助用户发现、治理不合 理使用姿势
12. 火山引擎 Prometheus 优化思路 具体解法 问题 整体方向 端到端视角 全层次视角 集群粒度:识别大流量租户 并拆分独立集群 高可用: 租户QoS 保障 高性能/高扩展: 高基数问题 优、治结合 慢查询分析 计算节点: 查询封禁 加强隔离, 网关:识别大流量租 租户粒度:查询请求shuffle Never 设置兜底 户并拆分独立集群 sharding,降低故障域 OOM 设计 子用户限流 请求粒度:设置自我保护性 资源限制 高可用: HPA 可靠性 可慢不可瘫 预测能力 治理为主, 降低基数 细化Qos 限流项 HPA :增加预测能力, 集群粒度:多AZ 容灾 降低延迟 打点SDK :不活跃时 序自动过期删除 集群粒度:数据跨集群分流, 统一聚合查询,提升扩展性 引擎:小时粒度索引, 减少无效扫描 打点姿势最佳实践 采集Agent :Agent 侧写入预聚合, 降低指标维度
13. 03 火山引擎 Prometheus 优化实践
14. 租户 QoS 保障 1 2 大流量租户 故障域隔离 识别& 独立拆分 3 Never OOM 设计 4 5 精细、高效的 限流 慢查询 分析& 治理
15. 租户 QoS 保障 1. 大流量租户自动识别& 独立拆分 实现形式: 创建独立集群是一个k8s CRD ,由一个专用的 controller 负责状态更新 共享存储集群 共享网关 路由 网关 CR 的状态分为:Auditing、Creating、Created 、 Routed 租户元信息管理 独立存储集群 人工确认 创建独立集群 独立网关 逻辑步骤: 定义大租户规则(活跃时序超5亿或写入速率超15M samples/s) 持续监控指标跟踪 创建独立集群CR ,通过告警触发通知人工确认 人工确认,创建独立集群组件 大租户识别规则 大流量识别& 独立集群创建 独立集群ready后,更新路由关系
16. 租户 QoS 保障 2. 故障域隔离 mod hash 查询路由 租户A 租户B shuffle sharding 查询路由 查询节点 Shuffle Sharding 路由, 查询节点 降低租户间故障 域重合度 网关 查询节点 租户B 查询节点 租户C 查询节点 租户A 网关 查询节点 租户C 查询节点 查询节点
17. 租户 QoS 保障 2. 故障域隔离 代码实现 shuffle sharding 查询路由 func SimpleShuffle(seed int, identifier []byte, endpointsPerCell int) (endpoints []string) { 查询节点 租户A r := rand.New(seed * hash(identifier)) 查询节点 eps := GetAllEndpoints() r.Shuffle(len(eps), func(x, y int) { 租户B eps[x], eps[y] = eps[y], eps[x] 网关 查询节点 }) 租户C 查询节点 return eps[:endpointsPerCell] }
18. 租户 QoS 保障 3. Never OOM 设计 查询节点 网关 1 主动设限:实例 & 请求 粒度 单请求计算内存限制 2 排队请求 40% 用前检查:申请内存前应该判断是否有余量 3 用后清理:及时清理非活跃内存 4 溢出磁盘:超出容量设计部分,考虑溢出磁盘 基于排 队论的 自适应 限流 计算数据量过大? 各个缓存 20% 磁盘 Runtime 5 过载保护:使用自适应限流,避免服务过载 6 监控优化:持续监控各组件内存用量,不断优化 溢出 自监控
19. 租户 QoS 保障 4. 精细、高效限流 限流项 示例 实现方式 限流效果 限流项 示例 限流效果 写入速率 10M samples/s 分布式限流 返回429 单次查询内存占用 1GB 返回422 查询 QPS 100 count/s 分布式限流 返回429 单次查询扫描时序数 10w 返回422 查询扫描时序速率 20000 series/s 分布式限流 窗口内查询熔断 单次查询扫描点数 10亿 查询扫描数据速率 2亿 samples/s 分布式限流 窗口内查询熔断 单实例并发请求数 500 租户级别,SLA 预算 实例级别,兜底保护 返回422 返回503
20. 租户 QoS 保障 4. 精细、高效限流 如何实现高效的分布式限流? 本地均摊限流 本地限流 通过? NO YES Redis Ready? YES Redis Ready? 近3m 有 实例发生 reject ? 计算应请求token 数 max(qps/step, n) 减少对 Redis 压力: YES 1. 优先本地均摊 NO NO NO 返回 本地限流结果 Redis 动态步长令牌桶限流 2. 动态均摊实例 QPS 滑动窗 口计数器 3. Redis 令牌桶根据QPS 动态请求令牌 Instance Counter 请求redis Throttle Recorder Redis 执行本地token扣减
21. 租户 QoS 保障 5. 慢查询分析& 治理 用户在会在不同的场景使用到 对于识别到的慢查询,我们希望用 对于用户识别到的一些问题子 对于一些比较重的查询,比如查询 Promethues的指标,比如业务 户能够感知到并且持续去治理优 用户或者慢查询语句,需要给 超时、或者被兜底限流阈值限流的 HPA、告警、大盘,为不同的 化,因此我们会对用户近7天的重 到用户一种能力去封禁 查询,如果不进行封禁,会导致持 使用场景分配不同的子账号, 并且配置不同的查询Qouta,就 很有必要 查询进行展示,便于用户去优化 实现原理:慢查询日志&统计 实现原理:查询PromQL正则匹 配 慢查询分析 实现原理:查询PromQL + 查询时 间范围匹配 实现原理:分布式限流 子用户限流 续的消耗资源 手动查询封禁 自动查询封禁
22. 高基数问题 P 2. 采集侧预聚合 1. 提供打点最佳实践 最佳实践文档和工具 写入前降低维度 A 高基数问题 D 3. 查询优化 4. 写入分片& 聚合查询 分治原则 特定场景优化 C
23. 高基数问题 1. 打点最佳实践 1 合理设计 去除非必要标签,详细信息考虑log或 trace http_request_total 维度 instances 100 path 10 response_code 10 response_size_level 10 基数 100*10*10*10=10w 指标拆分 2 3 根据使用场景,对指标标签进行合理划 指标拆分 分,避免所有标签都放到同一指标 活跃感知 及时删除不再活跃时序,提供sdk 实现 不活跃指标自动回收 http_reque st_total 维度 基数 http_requ 维度 est_size instances 100 instances 100 path 10 response_c ode 10 100*10*1 0=1w path 10 response_ 10 size_level 基数 100*10*1 0=1w
24. 高基数问题 2. 采集侧预聚合 优先推荐在 Agent 端配置预聚合 1. 预聚合的资源消耗分散,不易致服务端处理性 cpu_usage_sec onds_total 维度 基数 cluster 2 node 100 pod 预聚合 by node 2*100*10 00=20w cpu_usage_sec onds_total 维度 基数 cluster 2 node 100 1000 能成为瓶颈 2. 服务端不用做过重的窗口聚合,对整体稳定性 和端到端时延有帮助 Prometheus Agent Gateway Query Aggregation Aggrega tion Aggrega tion Storage 2*100=2 00
25. 高基数问题 3. 查询优化 增加小时粒度索引 倒排索引 写请求 是否构建 小时索引 1. 只保留近2小时,覆盖告警和大部 数据 租户新增序列统计 curr day last day 分查询场景 metadata data partion 2. 小时粒度索引构建是启发式的, 只对序列新增速率超过一定比例的 用户开启,一方面节省存储,另一 YES curr hour last hour 方面减少对写入吞吐的影响 data partion 查询范围是 否1小时内 读请求
26. 高基数问题 4. 分片写入& 聚合查询 根据业务集群、指标名等拆分,降低单集群规模和运维压力 聚合查询,查询算子下推,并行执行加速查询 histogram_quantile clusterA agent merge result storage 聚合查询 引擎 clusterB agent sum by(le) storage 算子下推 sum by(le) sum by(le) sum by(le) storage storage storage
27. HPA 可靠性 预测式 iHPA iHPA 为与内场 ByteBrain 团队合作,基于其提供的 时序预测模型 实现 iHPA 自身提供对于 Metric 的配置,Metric 配置完成 后,Controller 会将每一个 iHPA Metric 转换为两个 HPA Metric ,分别对应实时指标和预测指标。 1. 对于实时指标来说,其会直接透传到 HPA Metric ; 2. 对于预测指标来说,iHPA Controller 会进行转换: - 预测指标类型均为 External ,即由 Metric Adapter 提供;
28. 04 总结与展望
29. 总结与展望 总结 稳定支撑火山引擎方舟 数十亿级 时序的读写 高基数查询P99时延 降低 50%+ 读写可用性 99.99% 查询P99时延 600ms 重查询 拦截率 95%
30. 总结与展望 展望 面向 AI,主动洞察 增强主动数据分析能力, 内置主动异常检测、趋势 统一观测,跨层联动 夯实基础,稳字当先 与火山引擎应用观测 APMPlus 产品联动,统一 建设下一代更高性能、更 采集、统一观测,提升跨层 低成本的时序存储 数据联动质量 持续加强稳定性& 运维自 动化建设 预测等能力 加速AIOPS 产品化建设, 把字节跳动内部成熟能力 输出到云上
31.
32. THANKS 大模型正在重新定义软件 Large Language Model Is Redefining The Software

首页 - Wiki
Copyright © 2011-2025 iteam. Current version is 2.147.1. UTC+08:00, 2025-11-03 15:44
浙ICP备14020137号-1 $访客地图$