跳到主要内容

GMTC 2021 参会分享之-前端质量保障专题

· 阅读需 11 分钟
kkdev163

演讲 PPT: GMTC 2021 参会分享之-前端质量保障专题

演讲场所: 网易-音乐事业部-技术沙龙

演讲简介: 刚刚过去的 GMTC 大会,是技术界的一次盛宴,大前端技术部派出代表北上取经。本次演讲介绍业界公司在前端线上质量保障方向的探索与实践。

演讲时间: 2021-07-13

信息

以下为演讲逐字稿

演讲逐字稿

前言

大家好,我是 kkdev163,今天为大家带来的分享是 GMTC 前端质量保障专题。

本次分享的议题基于 「快手-前端监控体系建设」、「蚂蚁-前端灰度监控与变更防御」

这里加个免责声明:本分享的全部素材取自以上议题。

一.快手

首先我们来看 「快手的前端体系建设」,原分享主要分为三块:

  • 1 监控指标定义
  • 2 快速分析定位原因
  • 3 监控平台的搭建和稳定性保障

由于时间的关系,第三部分我们不作展开。

1.1 监控指标定义

首先来看快手的 页面性能监控指标定义。

从页面请求开始 到 页面加载完毕的时间线上,有多个关键的时间节点。。快手提出 如果我们只能用一个指标来代表前端页面性能,应该用哪个呢?

快手排除了

  • Load, 由于他在长页面下 不能很好地反应用户体感
  • First Paint,骨架屏下,他无法体现页面核心内容渲染时间
  • FMP,他没有标准的实现
  • LCP, 最大元素不一定是最重要的元素,并且该指标的浏览器兼容性还不太高。

最终快手给出的方案是 自定义 FMP, 快手对该指标的定义是在 API 数据渲染到 DOM 后的时间。

在分享中,讲师提到 自定义 FMP 指标的采集 有 SDK 自动采集 和 开发人员手动上报 两种途径,但目前 SDK 自动采集的 算法有效性还有待验证,所以目前快手主要还是依赖开发人员的手动埋点。

除了页面加载耗时,快手也针对其核心的业务场景,视频播放、视频直播,设计了专门的监控指标。如:

  • 播放失败率
  • 启播耗时
  • 百秒卡顿率

同时快手也提出,作为前端开发者,我们也需要去关注 H5 容器的监控数据。。讲师举了个案例,有用户反馈一个页面很慢,然后开发者把 页面完全加载时间从 6.5 秒 降低至 4.5 秒,有了很大的提升,但用户的实际感受,还是很慢。。为什么呢?

分析下来后发现,原来从 点击 H5 入口 到真正开始加载 H5 页面,中间有一个 5.9 的秒的 Webview 启动时间。如果把 Webview 加载过程放大,会发现有

创建 Webview、注入 JS 桥、注入 Cookie 等环节。。所以如果我们只关注纯前端部分,而忽略 H5 容器的开销,我们监控到的性能其实是与 用户感受有较大偏差的。

所以快手针对容器,也设计了一系列完善的监控指标。

1.2 快速定位问题

在完善了监控指标的采集以后,快手又是如何帮助开发者快速定位问题?

快手提出了 数据归因 诊断能力

简单来说,快手会先建立指标的 依赖树,比如 自定义 FMP, 他可能会受

  • tcp 建连时间
  • 网络传输时间
  • api 加载耗时

等等 原子指标 的影响。

在 FMP 波动了 10% 的情况下,会根据每个 原子指标 的波动率,进行归因,计算每个波动因子的贡献度,最后选出 Top3 的贡献因子。

这张截图展示了,在 FMP 波动后,给出的智能归因。

除了数据归因诊断能力,快手也做了 访问级别 的请求还原,给到一个 userId,就能查出 详细的 访问情况,接到客诉的时候,就能快速排查出,他为什么慢。

1.3 总结

  • 快手建立了以 FMP 为主的 前端度量指标体系
  • 并且通过智能数据归因、访问级别的请求还原,来帮助开发者快速定位问题。

二.蚂蚁

接着我们来看蚂蚁的灰度监控与变更防御。内容主要分为两块:

  • 建立前端灰度监控体系
  • 基于灰度监控的发布变更防御

2.1 灰度监控

这里的关键词是 灰度监控,我们先来看下什么是 灰度发布。

蓝绿发布简单来说,就是在 新版本 准备完成后,一次性将流量全部切换至新版本。

而灰度发布简单来说,可以选择为 部分的用户 提供 新版本 进行线上灰度验证,待验证无误后,逐步扩大灰度比例,直至 100%。

对于不同的应用类型,实现灰度发布的方案都有不同的区别。

以 支付宝官方小程序 的灰度为例。

当用户访问支付宝客户端时,根据灰度决策,会判断 当前用户是否进入 灰度池子,如果是的话,就拉取灰度小程序包,没有的话,就拉取 正式包。

这样的灰度发布看起来很完美啊,那支付宝遇到了什么问题呢?

讲师提到,在灰度变更的过程中,线上和灰度数据混在一起,监控无法感知应用当前正在灰度。。开发者想象中,在迭代发布后,会有明显的指标变动趋势,但实际的指标变化却是这样。

所以 开发者并不知道,灰度过程中,到底发生了什么,同时也不知道,这个版本对比线上正式包,情况到底如何。

也就让这个发布过程没有安全感,同事变更相关的故障率极高。

为了解决这个问题,支付宝建立了 前端灰度监控体系。。从流程上来看,在构建阶段,自动注入 此次迭代的标识,在用户访问时,使用 迭代标识 去 初始化监控,最后在监控数据上报时,携带上 迭代标识。

在数据做 清洗 的时候,把 迭代标识 作为顶层的维度进行聚合。这样就可以得出不同迭代版本的 数据。

在平台上就可以精确地区分出 此处迭代 引起的数据变化。

  • 不同灰度版本 的流量占比
  • 以及不同版本下的错误数

2.2 基于灰度监控的发布变更防御

当蚂蚁建立起 灰度监控 后,蚂蚁进一步又做了发布变更防御。

我们来看下整体的流程:

在进入灰度前,会有一个前置的校验卡点,如果没有通过会直接终止发布,通过后,会开始向客户端下发灰度策略 比如 5%,在灰度策略下发后,会有一个灰度后置校验,如果验证成功,会进一步扩大灰度比例,如果失败,就立即终止发布。

我们可以看到,这里的关键节点是 灰度后置校验。我们来看下蚂蚁到底

  • 要进行哪些验证?
  • 又要对哪些指标做验证?
  • 这些验证又是如何保障灰度发布的?

进行哪些验证

平台希望用户去关心

  • 灰度有没有充分
  • 有没有把应用、页面、小程序搞挂
  • 有没有引入新的异常
  • 异常相比于线上有没有增多

为此建立了

  • 灰度流量
  • 新增异常
  • 异常率等指标

有了这些验证 和 指标,又是如何保障灰度发布的呢?

    1. 当设置 5 % 的灰度比例,为了保证充分灰度,则要求当前迭代标识的流量必须接近全量的 5% 才能进入下一个灰度梯度。
    1. 在每个异常出现时,系统会记录 该异常的首次出现时间、首次出现迭代,若判断出,该异常是此次迭代中引入,则拦截此次发布。
    1. 计算出 此处灰度的 异常率,若明显高于基线版本,则触发拦截。

总结下:

  • 蚂蚁通过 监控数据 与 发布流程结合,建立起了 发布变更防御体系。为用户带来了发布安全感、也让监控数据发挥出更大的价值。