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