双11大促资源保障如何做到万无一失?优酷的技术和实战经验详解

2019 年 11 月 25 日

双11大促资源保障如何做到万无一失?优酷的技术和实战经验详解

一年一度的双11天猫晚会,对于整个阿里文娱,尤其是优酷的技术人,就是一场年度技术大考。资源保障又是其中的重中之重。笔者连续三年负责猫晚、春晚、双11的资源保障及全站稳定性工作,下面就分享下优酷在大促中的资源保障的技术策略和实战经验。


一、前言


资源保障一直是大促中的重中之重。


如何把大促资源保障做到万无一失,归纳一下一般需要关注以下几个能力点:


  1. 资源需求收集上报渠道。要有稳定的历史数据可查的用户友好的平台支撑。

  2. 单机能力。单机能力是衡量应用性能的关键指标,无法精确测量的话,那么将是资源保障的大风险。有一个误区,单机能力测量时,CPU利用率,内存使用率,Load,磁盘利用率,网络使用率,并不是关键指标,业务RT和成功率,才是测量单机能力的关键指标。

  3. 业务目标到技术目标转化逻辑。业务目标一般指日活,月活,会员拉新,暴光率真,PUV,同时在线等指标,技术目标一般指QPS,TPS等衡量应用处理能力的指标。两者间的转化,需要结合历史数据,BI数据分布(例如二八法则:80%的DAU是产生在20%的高峰时间段),业务场景,用户行为等一系统因素后,制定出一个转化公式或者逻辑。

  4. 各个业务的上下游依赖和流量平衡关系。关注上游的一个请求,下游会被调用几次,下探深度是多少,特别是下游依赖被多个上游业务调用的场景。 如果一个请求,会调用下游2次,那么流量就是1:2,简单来算当上游扩容1倍时,下游需要扩容2倍。

  5. 资源需求合理性评估。 全部人肉评估显然人力和时间上都不允许,怎么样实现一个线上平台可以自动评估,来代替繁杂且重复的工作,快速给出合理的结论。这是中台能力应该追求的目标

  6. 资源交付效率。当扩容机器数成千上万台时,如何快速地将这些机器扩容上线,有资源需求调整时,又能快上快下,完全自动地去实施。

  7. 紧急支援。当所有的资源都用完时,又出现紧急资源需求的场景,应该怎么应对。是不是能够快速地大批量地从非核心的应用中借挪资源给核心应用?这也是考验中台能力的关键。


二、目标


有了上述对关键点的梳理,那么一套服务于大促资源全生命周期保障的平台系统 就应运而生。确定目标如下:


  1. 需求收集-单机能力评估-历史活动数据对比-工单生成-批量扩容执行-压测调整-结束资源回收,全链路100%平台化流程化;

  2. 单机压测能力覆盖所有大促应用,实时提供最精准的能力数据;

  3. 资源健康度巡检,低水位低利用率低QPS应用数据输出,自动资源回收,提升资源利用率

  4. 非核心应用资源动态支援能力,10分钟1000台回收交付能力。


三、需求细化


整体能力分为两个大类:资源需求线和资源保障线。


  1. 资源需求线 总体流程

  2. 明确需求收集范围->改进需求收集方法->实现单机能力自动获取->实现历史容量数据自动获取->应用上下游依赖链路自动获取-> [业务目标->技术目标转换]->完成资源需求评估

  3. 这样,基本上可以实现需求上报渠道能力,单机实时压测能力,目标转化能力,上下游链路及流量平衡自动评估能力。

  4. 资源保障线 总体流程

  5. 建设整体资源容量盘点能力->建设应用级别线上水位巡检能力->优化资源快速交付/调整能力->建设非核心应用 应急容量挪用能力 ->快速回收资源 ->完成闭环的生命周期

  6. 这就可以实现高效交付,强化资源盘点及buffer保障的能力。


四、具体实现细节


资源需求线实施过程


第一,要解决的资源需求收集范围,明确哪些应用是大促应用,哪些应用需要扩容。


我们通过整体历史资源需求汇总表,查询历史扩容工单,历史大促期间的扩容记录找出大促应用的范围。同时数据全部入库,以便后期使用。如下图需求汇总:



第二,要解决没有线上提交需求的痛点。


我们收集了集团大部分需求提交平台的实现方式,主要归纳为以下几种:


  • 提供统一的资源需求填写模版(Excel),填写完成后把文件上传上去,系统自动check后入库;

  • 给出在线表单,用户在线提交完成后入库;

  • 利用百搭等公共平台,制作模版,通过内外任务提交后,汇总数据导出再导入自有平台。


各有个的优缺点,我们评估后,确定融合在线表单和内外任务填表相结合的方式,自行开发一套类似于问卷调查系统,将所需要的数据通过系统收集,给出统一的填写模版,同时支持钉钉消息,邮件,内外任务的方式进行催促。


从实际使用情况来看,通过内外任务的方式进行催促,填写率可以达到 100%。如下图需求收集页面展示:



第三,单机能力探索的实现。


收集方式确定后,就是透出的内容了。其中每个应用的单机能力以及历史参考数据就是接下来要攻克的。


单机能力:一般指单机 qps,在 RT 和成功率满足业务最低阀值时,可以接受的最大 QPS。一般 CPU,load,网络,磁盘等指标不为作为核心衡量标准。


单机能力的准确性和真实性,直接影响了系统资源评估结果的可信赖度。如下图单机能力的探索功能页面:



线上单机压测能力功能实现如下:


  • 通过引流线上真实流量至被压测机上,观察指标变动情况,记录拐点值前一刻数据,即认定为单机值;亮点是平台能够算法实现对指标的定义和参数的智能探索;整个过程可以傻瓜式一键操作;同时也支持自定义,包含了常见的单机压测能力。

  • 压测关键在于怎么确认业务可以接受的RT及成功率指标,如果都设置一个默认值,则真实性经不起推敲。

  • 我们通过智能探索算法,通过线上日常流量的观察分析,自动识别拐点;

  • 同时也支持手工配置,允许自定义阈值:不限于CPU使用率、MEM使用率、HTTP响应时间、微应用接口响应时间、HTTP成功率、微应用接口成功率;

  • 配置定时执行后,可以自动执行压测,并获取到最新的单机能力值。


简单总结可以支持的几种方式:


  1. 日常:通过引流的常规单机压测方案。

  2. 通过自定义的探索配置,自动截获单机性能瓶颈,自动停止单机压测,并记录。

  3. 智能:含日常功能外,针对无法截获瓶颈、未发现瓶颈的,使用智能预测来代替。

  4. 全链路模版导入:可通过二方压测平台全链路模版通过其任务ID导入,导入结果会折算成单机能力;

  5. 回溯导入:可直接通过回溯时间区间进行导入,导入结果会折算成单机能力;


第四,历史容量水位统计与匹配展示的实现。


历史容量水位 QPS 信息的获取,一般查集团监控平台或者应用监控平台,但几百上千个应用一个个查也不是办法。所以,又增加了活动水位的功能模块,把大促活动范围的应用的分钟级实时数据,通过集团监控接口或者应用监控平台接口拉取到,并整理入库,实现整体观看,排名,历史回放等能力。并截取活动时段内的峰值,做为参考数据透出到前端。需求汇总如下:




第五,上下游链路的获取和流量关系输出能力。


接下来就是上下游链路的获取和流量关系输出能力了。


实现原理:


  1. 通过检查负载均衡的缓存的域名列表可以拿到业务的IP列表。通过负载均衡的IP列表查询IP地址对应的机房和当前机房进行比对,确定是否存在跨机房调用(负载均衡 不论使用了DNS-F客户端或者JAVA客户端都有缓存的列表)

  2. 通过微应用接口的配置来获得对应的对端业务的IP地址列表。同样通过IP地址列表我们可以得出上下游调用方信息。

  3. 通过读取配置下发平台配置来获得对应缓存的配置信息,拿到缓存的接入入口IP,从而获得缓存相关的调用链路

  4. 使用数据库客户端的可以通过读取应用监控平台的配置文件来获得数据库的入口IP从而确认DB调用链路。使用非数据库客户端的应用可以从负载均衡的缓存域名列表中拿到对应的数据库降低了故障风险。

  5. 再配置应用监控平台接口,可以知道哪些应用之间发生了交互,应用可以拿出自己发起通信的应用列表然后上报,获得各个应用之间的调用关系。从而可以画出一个应用之间的内部调用的图,统计IP数量,可以得出大致的调用比例,从而得出流量关系。



实现了上述五步的能力后,系统就可以按指定的规则,给出资源评估结论。


剩下的只需要将那些不满足规则的需求,转入人工审核通道,由对接同学按个例进行逐一评估处理。


资源保障线实施过程


与业务需求评估同时,需要进行整体资源的容量盘点。确保有足够的 buffer 能够满足需求。


资源快速交付+巡检功能需求就产生了。


第一,快速交付能力及定时回收能力


对既有的扩缩容功能进行优化和改造,并行异步改造,优化扩缩容流程,使得交付时间不再随着扩容应用数量和容器数量的增长而线性增长,大幅缩短了交付时间。



第二,容量水位巡检及快速资源利用率


设定水位信息巡检阀值,就可以列出所有可以优化的应用数据,提升可用 buffer,提升资源利用率同时考虑到能力的通用性,引入了插件化的扩展能力,做到任何指标都可以实现巡检。



第三,临时应急资源的快上快下能力


临时从其它非核心应用上腾挪 buffer,也是必要的能力。


非核心支援大促应用,也是集团大促期间的保障策略。


通过临时降级非核心应用来保障核心应用的稳定,在紧急时刻提供一种兜底能力。



实现上述三步后,资源保障的系统能力就形成了闭环,从 buffer 准备-生产交付-资源回收全周期都可交由系统自动完成。


五、结果


完成了上述的资源需求和资源保障两大块的系统能力并上线后,经过双 11 的验证,实现 10 倍交付效率的提升预期目标。



同时,目前线上运行结果来看,需要人工介入进行评估的个例占比不足 20%,从系统上线前的 100%评估下降到 20%的人工评估,大大减少了评估工作量,提高了评估效率。


六、总结


通过对既有基础能力的改造完善,再加上新增功能的开发上线,将资源全生命周期中的各个环节都通过平台实现,最大限度的摆脱了人为因素影响,形成了一个闭环体系。



平台上线后,经过了双 11 大促的实践,从最终的结果上来看,实现了既定目标,保障了大促平滑且稳定。


同时,资源交付效率的提高,争取了更多的备份时间,留出更多的 buffer 时间可以面对突发紧急事件,降低了故障风险,为团队留下了多项技术沉淀。


作者介绍:


盖优,阿里巴巴文娱技术专家 ,10 年以上研发及运维经验,规划与建设了有优酷特色的稳定性保障中台,主导了 IPv6 等下一代网络技术体系在优酷的落地。


2019 年 11 月 25 日 16:251914

评论

发布
暂无评论
发现更多内容

区块链赋能供应链金融 | 应用优势与四类常见模式

CECBC区块链专委会

区块链 供应商审核

区块链带来的业务流程优化是数字化转型最深层次的变革

CECBC区块链专委会

区块链 数字化

8.1文件与磁盘IO:如何把磁盘的读写速度提升十万倍?

张荣召

飞书的「背道而驰」

ToB行业头条

作业--week08

张荣召

自己写歌怎么编曲?4款超好用编曲软件推荐

奈奈的杂社

编曲 音频制作 midi daw

函数式编程:如何高效简洁地对数据查询与变换

华为云开发者社区

编程 面向对象 数据处理

技术分析:AnalyticDB强力支撑双11

阿里云情报局

数据库 互联网 数据分析 双十一 数据舱

区块链USDT系统开发解决方案,USDT支付系统技术开发

13530558032

8.2常见数据结构与Hash表原理分析

张荣召

简要分析近几年商业软件开发平台的现状

Learun

企业 企业开发 企业应用

建行数字债券允许比特币交易?官方回应了!业内人士:交易架构的创新值得赞赏

CECBC区块链专委会

比特币 债券

数字货币合约交易所系统开发技术

薇電13242772558

区块链 数字货币

Week 8 命题作业

阿泰

企业级软件的核心价值

Marilyn

敏捷开发

企业级软件的核心价值

Learun

敏捷开发 快速开发 企业开发 企业应用

微服务下,使用 ELK 进行日志采集以及统一处理

华为云开发者社区

微服务 Kibana ELK

Mock服务设计与实现:MySQL驱动字节码修改增强

华为云开发者社区

MySQL 数据库 sql

缓存与数据库一致性策略

李浩宇/Alex

区块链钱包APP开发,开发搭建数字货币钱包

13530558032

Apache Doris在京东搜索实时OLAP中的应用实践

DorisDB

数据库 大数据 数据仓库 数据分析

架构师训练营 1 期 - 第八周作业(vaik)

行之

阿里P10带你深度剖析:淘宝网是如何基于Spring Cloud微服务框架搭建大型电商平台设计

Java架构追梦

Java 架构 面试 微服务 SpringCloud

简要分析近几年商业软件开发平台的现状

Marilyn

快速开发 企业开发

用废旧纸箱DIY智能宠物喂食器!旅行在外远程投喂“二狗子”

智能物联实验室

物联网 DIY 智能硬件

数字货币交易所开发定制,币币撮合交易开发商

13530558032

usdt支付系统开发方案,币支付交易系统搭建

WX13823153201

云图说|云上攻击早知道,少不了这个“秘密武器”!

华为云开发者社区

安全 云服务 云端

8.3红黑树原理与性能特性

张荣召

8.4经典算法

张荣召

重磅发布!Flink Forward Asia 2020 在线峰会预约开启!

Apache Flink

flink

双11大促资源保障如何做到万无一失?优酷的技术和实战经验详解-InfoQ