文章概览
背景
整体方案
系统结构图
业务流程介绍
算法部分介绍
保障数据情况
后续规划
作者介绍:
刘丹,2017年加入去哪儿旅行,目前担任国内酒店测试经理。长期致力于全流程质量保障体系,酒店测试环境体系建设。
一些流量突增事件如考研、国考准考证打印高峰期等,会导致酒店业务量骤增,如果超出应用承载上限,会引起服务性能严重下降,限流或崩溃等风险,对生产带来损害。
另外五一十一等出游高峰, 虽然有HPA(Horizontal Pod Autoscaler), 但在做稳定性保障时,需要手动去计算各系统扩容机器数并手动进行扩容和缩容, 计算精度不足且效率低下。
所以如果能提前评估事件影响,预估所需容量,对受影响的服务提前自动扩容,对保障线上服务的稳定性的同时提升运维效率是非常有价值的。
二、整体方案
覆盖事件类型:
EXAM:准考证打印类事件(如考研、国考),一般会带来酒店的业务突增
HOLIDAY:旅游,出行具有很强的节假日效应,大型的节假日一般会呈现预期内的业务高峰,无突增现象
ACTIVITY:促销类活动,如大促、秒杀等,会带来业务突增
1.系统结构图
(1)流量日历平台整合业务监控,运维团队(Ops)提供应用+环境维度下CPU核数数据,平台通过接口提供给算法团队提前进行模型训练。
(2)流量平台确定业务预估最高峰订单值/qps值,调用算法平台发起预测任务. 算法组将业务预估高峰值转换为高峰场景下应用预计使用CPU总核数给到流量平台。
(3)流量平台调用Ops接口, 将CPU总核数给到Ops, Ops将CPU总核数转换成预估实例数. 并设定定时自动扩缩容实例任务。
流量日历事件生命周期分为九个阶段,包含预判→待评估→评估中→评估完成→任务创建→扩容中→扩容完成→复盘→结束。
事件来源:支持携程热点事件同步+人工创建事件两种方式录入 , 事件录入后,进入预判状态。
根据事件具体情况判定本次事件是否需要自动扩缩容。如判定否,进入结束状态, 如判断是,进入待评估业务量阶段 (待评估状态)。
(3)待评估阶段
该阶段目标是预估最高峰场景下业务量,主要根据基准值和业务涨幅两个指标计算。
系统根据公式计算:预估高峰业务量 = 基准值 ×(1+业务涨幅),然后进入下一阶段(评估中状态)。流量日历平台调用算法接口根据预估高峰业务量获取各应用+环境维度下实际使用CPU量预测值。
这里业务涨幅可参考公式计算或者直接由业务方直接提供, 公式为:
指标 | 指标规则 |
---|---|
历史涨幅计算 | 人工填写历史高峰时间,系统计算历史涨幅,计算逻辑为历史当天最高值和前三天同时间均值相除计算得到 |
自然增长计算 | 业务评估,根据近期事件增长率/历史增长率提供 |
外部影响计算 | 业务评估,需要结合近期政策,以及市场情况,报考人数等等,依靠经验评估 |
基准值 | 人工填写基准时间范围,系统自动计算基准高峰值,计算逻辑为高峰期前三天同时间段峰值 |
指标 | 内容 |
---|---|
热点详情 | 2024年国家公务员考试11.20打印准考证 |
影响时间 | 2023-11-20 00:00:00-2023-11-20 02:00:00 |
高峰时间点 | 2023-11-20 00:00:00 |
评估时间点 | 2023-11-18 00:00:00 |
扩容时间点 | 2023-11-19 23:00:00 |
缩容时间点 | 2023-11-20 02:00:00 |
影响范围 | 国内酒店 |
业务预估量 | xxx |
业务预估增长率 | xxx |
评估中状态, 流量日历平台会根据事件基准值和业务涨幅(增长率)计算出高峰期业务值, 然后调算法接口, 预测对应高峰业务值下,各应用+环境维度使用的CPU总核数。
流量日历平台将算法提供预估核数,加上安全阈值后,得到平台预估核数。
公式:算法预估实际使用核数×(1+安全阈值)=平台预估实际使用核数
再调用0ps接口, Ops根据公式(平台预估实际总核数÷机器CPU阈值÷机器配置=预估实例数 ) 计算出高峰期业务预估机器数。此时评估阶段结束,进入Ops创建定时扩缩容任务阶段。
流量日历根据算法和Ops计算后,可以在流量日历平台查看预估具体数据,示例如下:
Ops根据流量日历平台提供的预计扩缩容时间,和Ops计算出预估机器数创建定时扩容任务, 任务具体信息包含扩缩容时间与机器实例数。 这里扩缩容使用的资源为本地机器+云上资源两部分,通过适当的上云资源比例策略保障核心服务的稳定性。
目前整体的扩缩策略为保证稳定性,在高峰期前预定时间点实际智能扩容, 高峰后预定时间点自动慢速智能缩容, 定时扩缩容任务创建后,根据设定事件点进行实际自动化定时扩缩容,扩缩容执行时会有消息提示通知。
(6)复盘阶段&结束
任务高峰期后,会进入复盘阶段。复盘阶段主要根据事件准确率和覆盖率两个指标来衡量预测情况。
指标代码 | 含义 |
---|---|
a | 人工设置增长阈值,区分实际增长和自然波动范围. |
M | 单应用实际高峰期总核数 |
N | 应用前三天事件同时间段最高峰总核数均值 |
K | 单应用预测高峰期总核数 |
如果K>N (1+a%),表示该应用为预估增长应用
指标名称 | 指标计算方式 | 说明 |
---|---|---|
预测业务增长率 | 预测增长率 = 预测事件发生时段订单峰值/基准订单均值 | |
实际业务增长率 | 实际增长率 = 实际事件发生时段订单峰值/基准订单均值 | |
准确率 | (预测增长的应用数 与 实际增长的应用数 的交集)/ 预测增长的应用数 | 满足 M >N (1+a%), 表示该应用为实际增长应用. 满足 K>N (1+a%),表示该应用为预估增长应用. |
覆盖率 | (预测增长的应用数 与 实际增长的应用数 的交集)/ 实际增长的应用数 |
以下为复盘页面主要数据, 包含业务涨幅偏差、预估覆盖率、预估准确率。以及向下拆分可以到应用+环境维度的资源使用数据。根据复盘数据分析算法/流程可改进项,填写复盘总结,提交后事件为结束状态。
指标 | 示例值 |
---|---|
事件预估覆盖率 | 100% |
事件预估准确率 | 95.92% |
预估业务量 | xxx |
业务线 | xxx |
业务量基准参照时间 | 2023-11-13 00:00:00-02:00:00 |
预估增长率 | 100% |
基准值 | 500 |
业务预估值 | 1000 |
实际业务量 | 950 |
实际增长率 | 90% |
安全阈值 | 5% |
平台预估总核数 | 20000 |
实际扩容总核数 | 19500 |
在前期数据准备阶段, 由于模型算法是分析订单量和应用cpu直接的关系,需要重点关注影响(CPU)的因素, 以及应用范围的选取。
由于应用系统中还区分了部署环境ENV的概念,同一个应用系统下不同环境ENV承接的流量可能有差异,负责业务有差异,所以最后最小维度划分在应用+ENV维度。最终选取了订单量和CPU正相关的应用+环境作为训练范围, 对于CPU微量以及不受订单影响的不列入训练范围。
训练算法:使用神经网络算法进行模型训练,最终通过订单量预测CPU使用资源。
平均绝对百分比误差MAPE | ||
模型离线定时更新
学习数据:高峰事件+近期数据(t-10)
更新策略:新模型效果不次于线上
保障模型时效性和事件鲁棒性
减少 Ops 运维带来的影响
模型线上效果定时反馈
模型每日反馈线上效果
保证线上在有效时使用
内部 IT 提醒 + 报警
安全策略 | 具体内容 |
---|---|
最大副本数安全限制 | 目前各应用最大副本数由各业务线根据业务场景和DB/Redis等下游资源限制等因素综合配置,当预测超过最大副本数,限制创建并对应消息提示,负责人可根据情况评估调整。 |
最小副本数安全限制 | 设置阈值a%,当预测实例数小于当前最小副本数(1-a%)会触发限制。保障机器数预测过低场景稳定性。 |
指标 | 内容 |
---|---|
业务线接入情况 | 应用接入 150+ 个 , 占比酒店应用总核数 90%+ 未接入应用主要为流量变化不明显 |
已完成重点高峰事件保障 | 考试类,如国考 、研究生、省考等 节假日高峰容量保障类,如春节、五一、十一等 |
应用预估平均覆盖度 | 96% |
应用预估平均准确率 | 89% |
价值衡量 | 单次事件高峰期节约人工运维效率3pd(人天)/次,年化节约270pd(人天)。 通过算法预估机器资源,比人工预测资源节省约20%。 |
四、后续规划