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

阅读数:1585 2019 年 11 月 25 日 16: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. 资源保障线 总体流程

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

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

四、具体实现细节

资源需求线实施过程

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

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

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

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

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

  • 提供统一的资源需求填写模版(Excel),填写完成后把文件上传上去,系统自动 check 后入库;
  • 给出在线表单,用户在线提交完成后入库;
  • 利用百搭等公共平台,制作模版,通过内外任务提交后,汇总数据导出再导入自有平台。

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

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

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

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

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

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

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

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

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

  • 通过引流线上真实流量至被压测机上,观察指标变动情况,记录拐点值前一刻数据,即认定为单机值;亮点是平台能够算法实现对指标的定义和参数的智能探索;整个过程可以傻瓜式一键操作;同时也支持自定义,包含了常见的单机压测能力。
  • 压测关键在于怎么确认业务可以接受的 RT 及成功率指标,如果都设置一个默认值,则真实性经不起推敲。
    我们通过智能探索算法,通过线上日常流量的观察分析,自动识别拐点;
  • 同时也支持手工配置,允许自定义阈值:不限于 CPU 使用率、MEM 使用率、HTTP 响应时间、微应用接口响应时间、HTTP 成功率、微应用接口成功率;
  • 配置定时执行后,可以自动执行压测,并获取到最新的单机能力值。

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

  1. 日常:通过引流的常规单机压测方案。
    通过自定义的探索配置,自动截获单机性能瓶颈,自动停止单机压测,并记录。
  2. 智能:含日常功能外,针对无法截获瓶颈、未发现瓶颈的,使用智能预测来代替。
  3. 全链路模版导入:可通过二方压测平台全链路模版通过其任务 ID 导入,导入结果会折算成单机能力;
  4. 回溯导入:可直接通过回溯时间区间进行导入,导入结果会折算成单机能力;

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

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

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

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

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

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

实现原理:

  1. 通过检查负载均衡的缓存的域名列表可以拿到业务的 IP 列表。通过负载均衡的 IP 列表查询 IP 地址对应的机房和当前机房进行比对,确定是否存在跨机房调用 (负载均衡 不论使用了 DNS-F 客户端或者 JAVA 客户端都有缓存的列表)
  2. 通过微应用接口的配置来获得对应的对端业务的 IP 地址列表。同样通过 IP 地址列表我们可以得出上下游调用方信息。
  3. 通过读取配置下发平台配置来获得对应缓存的配置信息,拿到缓存的接入入口 IP,从而获得缓存相关的调用链路
  4. 使用数据库客户端的可以通过读取应用监控平台的配置文件来获得数据库的入口 IP 从而确认 DB 调用链路。使用非数据库客户端的应用可以从负载均衡的缓存域名列表中拿到对应的数据库降低了故障风险。
  5. 再配置应用监控平台接口,可以知道哪些应用之间发生了交互,应用可以拿出自己发起通信的应用列表然后上报,获得各个应用之间的调用关系。从而可以画出一个应用之间的内部调用的图,统计 IP 数量,可以得出大致的调用比例,从而得出流量关系。

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

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

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

资源保障线实施过程

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

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

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

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

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

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

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

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

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

临时从其它非核心应用上腾挪 buffer,也是必要的能力。
非核心支援大促应用,也是集团大促期间的保障策略。
通过临时降级非核心应用来保障核心应用的稳定,在紧急时刻提供一种兜底能力。

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

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

五、结果

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

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

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

六、总结

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

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

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

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

作者介绍:

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

评论

发布