腾讯实时计算弹性伸缩的前沿探索与实践

如果无法正常显示,请先停止浏览器的去广告插件。
分享至:
1. 刘建刚 腾讯大数据实时平台 Flink 引擎负责人
2.
3. 基于 Apache Flink 打造 Oceanus 一站式实时计算解决方案,集实时应用的创建、调试、部署、运行、运维和监控为一 体,为实时应用提供全生命周期的服务,覆盖微信支付、腾讯视频、腾讯广告等集团所有业务。 整体规模 • 机器核数:百万级别 • 作业个数:上万级别 • 流量峰值:十亿级别 应用场景 整体架构 • 实时报表 • 特征生产 • 湖仓一体 • 数据同步
4. 目录
5. 从零断流到智能自治的一体化架构
6. Flink介绍:以流计算为内核的新一代计算引擎,提供基于数据流的有状态计算。 相比storm(流计算开创者),flink有以下优势: • 保障数据exactly-once,通过local state和基于Chandy- Lamport算法的快照来保障数据的不丢不重。 • 完善的Event-time机制,通过watermark解决了无限流的触 发、延迟等问题。 • 低延迟、高吞吐,主要通过资源管理、网络优化等来实现。
7. Flink是有状态的long-running在线计算,具备以下特征: SLA要求高 1. 时间维度上,作业流量呈潮汐规律变化,有上涨或者下降的趋势。 在支付/直播等场景,稳定性要求至少 2. 空间维度上,不同pod的负载不同,资源需求也不一样 99.99%,重启断流、资源不足导致的 failover&lag严重影响SLA。 成本压力大 在数据同步、实时报表等场景,按最大 值配置资源会导致严重浪费,业内资源 利用率普遍低于40%。 运维成本高 流式计算自身复杂性导致问题排查困 难,低延迟要求做到7×24h随时响应
8. 方案:K8s提供了node级别的 水平伸缩。 方案:流式系统一般支持水平 伸缩,比如flink。 方案:原地修改pod资源,支持 个性化配置。 缺点:stateful作业需要全局重 启,断流时间长。 缺点:需要全局重启,不支持 精准预测、异常处理等方案。 缺点:内存修改需要重启pod, 影响flink进程,导致全局重 启。
9. 核心技术突破 Job AutoScale Manager Proactive ML Model Automated Anomaly Handler JobMaster 垂直伸缩:业内首创零断流,支持“千pod千 面”。 • 水平伸缩:强扩展性的秒级伸缩。 AI驱动的资源全托管 Horizontal Vertical Exception Info Oceanus • • 模型精准预测,实现reactive向proactive的跨越 • 自动化异常处理,提供标准化的自愈方案。 TaskManager Operator metrics Pod CPU&Memory usage • 资源利用率提升30%+ GC events • 作业failover率下降70% • 运维成本降低50% 显著的业务价值 Log info Pod 弹性架构
10. 垂直与水平弹性
11. 本质上,所有的弹性伸缩都由以下操作组成: • 垂直伸缩:表示原地变更pod的资源。 • 水平伸缩:表示变更服务使用的节点数。
12. 背景 垂直伸缩表示原地变更pod的资源,主要为CPU和Memory。 如果资源不支持动态变更(比如内存),就需要重启pod,将无可 避免的影响上面的stateful服务。 挑战 为了做到原地修改资源(CPU&Memory),流式平台需要给出一 JobManager TaskManager TaskManager Pod Pod Pod 整套自底而上的解决方案: 1. JDK层面,修改内存必须要重启JVM,进而导致Flink重启。 2. k8s层面,没有专门的语义支持,无法保障全局资源一致性。 3. Flink层面,默认所有的算子处理性能一致,不支持异构资 源。
13. 技术实现:Flink支持异构资源弹性伸缩 1. AutoScaleService组件负责管理异构资源的弹性伸缩。 2. 资源对应关系为<Task, ResourceSpec>,保障Task重 调度时资源视图不变。 3. 资源变更会被持久化,保障job failover、task failover、master failover后不丢失。
14. 技术实现:K8s支持原地修改pod资源 1. K8s通过PodSpec来声名资源变更,通过Proposed等状态来标识过 程。 2. Kubelet本地通过CRI接口调用实现pod cfs_quota和limit_in_bytes的更 新。 开源社区最新方案参考:In-place Update of Pod Resources 3. 工程实现上加入了资源检测、负载检测、阈值检测等约束条件。
15. 技术实现:JDK支持动态修改内存 腾讯内部通过适配GC算法等支持动态修改内存的hard-limit: 1. 针对扩容,需要在启动时指定最大上限ElasticMaxHeapSize(大于Xmx)。 2. 针对缩容,如果资源不足会先通过GC来释放资源。 开源社区类似方案:ZGC | Using -XX:SoftMaxHeapSize
16. 执行效果 1. 图1为垂直伸缩的流量波动,伸缩过程不影响作业吞吐,做到了零断流。 2. 图2为垂直伸缩的资源图,伸缩后总资源下降60%+。 25 20 15 10 5 0 1 2 3 实际使用 图1 4 5 6 初始配置 图2 7 垂直伸缩 8 9 10 pod编号
17. 背景 Flink为有状态的计算,水平扩缩需要做状态重分布,断流会影响业务的SLA。 但是作为一种通用方案,我们需要尽可能的减少断流影响。 挑战 1. 销毁&重建耗时长:并发度变更会涉及状态的重分发,全局重启无可避免。 2. 资源申请慢:受到网络速度、磁盘IO、多组件交互等影响。 3. Exactly-once难以保障:做savepoint耗时较长,复用上次checkpoint存在数据重复。
18. 解决方案 180000 实现JobMaster&ZK、pod资源等的复 用。 160000 140000 1min+ 效果 通过镜像预热、资源预申请、文件共享 等,扩容耗时从分钟级降至秒级。 120000 100000 80000 60000 40000 25s 3s 20000 0 基于增量checkpoint的轻量化操作。 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 并发度 常规扩容 热更新 热更新 + 预加载
19. 伸缩模式 优势 不足 垂直 零断流:原地修改pod资源,不影响flink任务。 • 扩容受制于单机总资源 • 处理性能可能受制于除CPU&内存外的其他资 源 水平 扩展性强:可以通过修改并发度充分利用整个集群的空闲资源。 应用场景: 1. 2. 3. SLA要求高、断流敏感业 务,比如金融支付、模型 训练等。 实时大屏、直播大促等活 动场景。 Pod资源不均衡场景。 应用场景: Fallback 1. 2. 个性化调整 常规实时计算,比如数据 同步、实时报表。 其他通用场景。 即便深度优化,断流也在所难免 • 智能决策(资源全托管平台) • 协同互补,最大化价值收益。
20. 未来规划 • 垂直弹性 + pod热迁移:突破单机资源限制,如图1。 • 水平弹性 + 细粒度伸缩:彻底规避断流风险,如图2。 图1 图2
21. 智能预测与自动运维体系
22. 资源是实时保障最重要的因素 1. 作业总资源不足:消费积压、 lag变大,影响秒级延迟 2. 单pod资源不足:影响Task处理 初始资源无法满足日益变化的流量 资源配置和运维困扰着每一个人 1. 流量变大时,需要扩容来满足高负载。 1. 用户:如何配置资源(当前&未来) 2. 流量变小时,需要缩容来避免资源浪费。 2. 运维:线上资源问题占比60%,问题 性能,进而阻塞住整个pipeline 核心挑战 1. Long-running过程中,如何精准准确评估作业各个阶段需要的流量和资源? 2. 遇到线上问题(failover和lag)时,如何实时、自动化的解决资源问题? 排查困难、恢复时间要求高。
23. 自愈 全生命周期覆盖 1. Lag Start:启发式冷启动 + N轮智能预测,快 速收敛。 2. Running:模型算法智能预测pod资源、算 子流量等信息 + 自动化的弹性伸缩。 3. Upgrade:基于历史运行信息的智能推荐。 4. Lag:基于专家模式的自动化异常处理 5. Failover:基于专家模式的自动化异常处理 Running Start Failover Upgrade
24. 让系统预测未来,实现了从 reactive到proactive的跨越 垂直&水平融合,弹性策略协同 互补 低延时、高稳定 从检测到自愈的全链路闭环,实 现故障秒级自愈
25. 业界方案 基于简单历史指标的Reactive模式,存在以下问题: • 预测效果差,传统算法无法精准捕获流式计算的时间规律和非线性关系,误差 > 25%。 • 被动式响应,出现问题时才会触发,往往已经错过了最佳解决时机。 腾讯方案 核心挑战 1. 智能预测 Reactive 输入指标:单一维度指标(比如CPU、Memory)难以预测变化复杂的实时计 算。 Proactive 2. 模型构建:如何在众多模型算法中选择与实时计算匹配的算法。 3. 动态自适应:如何应对流量的长期变化和异常抖动。
26. 多维度指标体系 Flink应用的构建依赖于JVM和k8s系统,资源利用情况会受到所有维度的影响。 为此我们构建了多维度指标体系,覆盖从应用到硬件的全栈特征,捕捉非线性关系(如 GC 事件与内存分配的关联) Flink 应用层 • 数据吞吐率(Input/Output Rate ) • 任务反压状态(Backpressure) JVM内存层 系统层 • 堆内存使用量(Heap Used) • CPU 利用率(CPU Usage) • GC 暂停时间(GC Pause) • 物理内存占用(Memory Usage • 弹性最大堆(Elastic Max Heap ) ) 业务指标(因) 分配详情 黑盒表现(果)
27. 机器学习模型LightGBM LightGBM 流式计算流量特征: 1. 多数呈24 * 7的周期性波动特征 2. 整体呈非线性、上升或者下降的趋势 3. 短期内可能呈时间相关性 模型选择 𝑛 1. 处理各种类型和维度数据 |𝑌 𝑖 − 𝑌′(𝑖)| 𝑀𝐴𝑃𝐸 = ෍ 𝑌(𝑖) 2. 擅长时间序列的非线性关系 对比效果: 3. 拟合性好,支持复杂关系 • LGM:10%- • 传统:25%+(ARIMA等) 特征工程 𝑖=1 平滑处理 1. Lag features:时间关系 1. 指数移动平均(EMA) 2. Rowing statistics:统计信 2. 滚动标准差 息
28. 动态自适应 1. 模型初始化时会利用历史数据进行全量训练,获取过 增量数据 去24小时和过去7天的pattern。 2. 为了增强实时准确性,模型会通过增量实时数据进行 全量训练 负载变化大 在线学习。如果输入样例变化比较大,会以天级别进 行回滚全量训练。 3. 尽管模型具备一定的鲁棒性,但是遇到异常情况时, 会出现流量急速下跌或者上升,我们会通过下一章的 异常数据 自动化异常处理模块来弥补。 异常处理 在线学习
29. 应用场景 1. 弹性伸缩出现问题,需要快速发现和回滚。 2. 在流量激增、failover等场景,模型算法预测不准,需要兜底方案。 3. 实时运维需要7×24h随时待命、出现问题快速恢复,急需自动化异常处理。 核心挑战 1. 实时性:传统依赖人工的问题排查耗时长,至少分钟级别起,严重影响SLA。 2. 异常分析:flink指标众多,逻辑和拓扑复杂,没有专业经验很难分析。 3. 解决方案:需要根据异常分析,给出最优的自动化解决方案。
30. 解决方案 1. 实时监测:实时消费,秒级延迟。 2. 标准诊断:作业失败和作业延迟。 3. 自动执行: a、近期有scaling,快速回滚。 b、资源类问题,垂直&水平伸缩。 c、其他问题,走常规运维手段
31. 右图是线上作业晚高峰的预测值: 1. 2. 模型预测:根据历史规律和当前趋势,模型 晚高峰流量图 6000 可以提前预测出未来的流量。 5000 异常处理:过了流量高峰时,作业failover导 4000 致预测不准,平台通过实时诊断和扩容来快 速追lag。 3000 2000 1000 0 实际 预测
32. 业务价值与行业标杆
33. 核心业务的作业失败率下降超过70%,主要得益于: 1. 精准的预测 + 弹性伸缩。 2. 自动化异常处理 + 弹性伸缩
34. 核心业务在保障SLA的基础上,资源利用率普遍有30%+的提升,主要得益于: 1. 精准的预测 + 弹性伸缩。 2. 水平伸缩缩容 + 垂直伸缩个性化pod配置。 注:实际上单作业资源利用率能到80%乃至90%, 但是业务一般会冗余部分资源。
35. 下一代流式计算架构
36. 业务价值 1、稳定性 2、降本增效 驱动 应用 核心技术 突破 资源全托管 1、垂直零断流 1、模型预测 2、水平秒级伸缩 2、自动异常处理
37. 1. 构建基于大模型驱动的AI原 生弹性系统,进一步提升系 统的智能化水平。 2. 构建存算分离的流式系统, 充分拥抱云原生。 1. 更加全面的SQL支撑 打造一体化的对外服务: 2. 智能化的动态自适应 1. 统一的SQL API 3. 高性能和高稳定的系统 2. 统一的计算层 3. 统一的存储层
38.
39. 大模型正在重新定义软件 Large Language Model Is Redefining The Software

Accueil - Wiki
Copyright © 2011-2025 iteam. Current version is 2.147.0. UTC+08:00, 2025-10-29 02:30
浙ICP备14020137号-1 $Carte des visiteurs$