cover_image

去哪儿高峰期资源保障之智能扩缩容

刘丹 Qunar技术沙龙
2025年03月27日 09:30


文章概览



图片
  • 背景

  • 整体方案


  • 系统结构图

  • 业务流程介绍

  • 算法部分介绍

  • 保障数据情况

  • 后续规划


作者介绍:

刘丹,2017年加入去哪儿旅行,目前担任国内酒店测试经理。长期致力于全流程质量保障体系,酒店测试环境体系建设。


一、背景

一些流量突增事件如考研、国考准考证打印高峰期等,会导致酒店业务量骤增,如果超出应用承载上限,会引起服务性能严重下降,限流或崩溃等风险,对生产带来损害。


另外五一十一等出游高峰, 虽然有HPA(Horizontal Pod Autoscaler), 但在做稳定性保障时,需要手动去计算各系统扩容机器数并手动进行扩容和缩容,  计算精度不足且效率低下。

所以如果能提前评估事件影响,预估所需容量,对受影响的服务提前自动扩容,对保障线上服务的稳定性的同时提升运维效率是非常有价值的。

图片

二、整体方案

图片

覆盖事件类型:

EXAM:准考证打印类事件(如考研、国考),一般会带来酒店的业务突增

HOLIDAY:旅游,出行具有很强的节假日效应,大型的节假日一般会呈现预期内的业务高峰,无突增现象

ACTIVITY:促销类活动,如大促、秒杀等,会带来业务突增

1.系统结构图

(1)流量日历平台整合业务监控,运维团队(Ops)提供应用+环境维度下CPU核数数据,平台通过接口提供给算法团队提前进行模型训练。

(2)流量平台确定业务预估最高峰订单值/qps值,调用算法平台发起预测任务.  算法组将业务预估高峰值转换为高峰场景下应用预计使用CPU总核数给到流量平台。

(3)流量平台调用Ops接口, 将CPU总核数给到Ops,  Ops将CPU总核数转换成预估实例数.  并设定定时自动扩缩容实例任务。

图片


2.业务流程介绍

流量日历事件生命周期分为九个阶段,包含预判→待评估→评估中→评估完成→任务创建→扩容中→扩容完成→复盘→结束。

image.png

(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能化

继续滑动看下一个
Qunar技术沙龙
向上滑动看下一个