汽车|核桃编程:前端可观测性建设之路( 三 )



特别重要的是 , ARMS 前端监控能够从地理位置、浏览器、操作系统、分辨率、网络运营商、应用版本等多个维护 , 对性能指标进行聚合分析 , 从而帮助核桃编程更好地定位性能瓶颈 。
JavaScript 错误分析和 API 请求分析也是核桃编程在应用系统的日常维护中非常关心的页面健康度指标 。 前者可以展示 JavaScript 错误的基本信息和分布情况 , 并具备回溯用户行为的能力 。 后者可以展示每个 API 的调用情况 , 包括调用成功率、返回信息、调用成功或失败的平均耗时等 。 当前端页面完全载入后 , 用户的操作会涉及到复杂的 JavaScript 执行 , 并在页面触发多个 API 调用 , 其中还包括对第三方提供的接口调用 。
ARMS 能够从最终用户的角度 , 真实还原前端代码执行的完整现场 , 帮助核桃编程快速定位来自前端的故障源 。 和页面加载速度统计一样 , JavaScript 错误分析和 API 请求分析都能够通过地理位置、浏览器等多种维度进行聚合分析 。 在线上编程教育的业务场景里面 , 客户端的实现包含着大量业务逻辑以及云端之间的双向交互 , 有一些问题只有在特定的浏览器和页面分辨率下才有可能暴露出来 , 这类问题就特别依赖多维度聚合分析进行排查 。
在熟练掌握 ARMS 提供的前端可观测性能力之后 , 核桃编程开始把前端页面健康度指标作为日常业务迭代的检测标准 , 这项工作是通过与所有业务线的灰度发布计划相互配合而进行的 。 对于生产环境的每一次版本升级 , 核桃编程都会通过灰度发布的方式实现 , 先将小规模的用户流量导入新版本进行功能性、稳定性、健康性验证 , 只有满足预先定义的各项指标后 , 才会逐步增加导入新版本的用户流量 , 否则会立即对版本进行回滚 。 前端健康度的各种指标都是非常重要的衡量维度 , 而这些指标仅仅通过版本发布前的常规测试手段 , 是没有办法全面采集到的 。 核桃编程将前端健康度纳入业务迭代的衡量标准 , 体现着业务迭代过程中的可灰度、可观测、可回滚 , 这也是在阿里巴巴广为推崇的安全生产三板斧原则 。

【汽车|核桃编程:前端可观测性建设之路】除了通过 ARMS 控制台主动的观察分析 , 掌握各项前端业务指标之外 , 更重要的事情是在遇到用户体验问题时 , 如何第一时间得到通知和告警 , 防患于未然 。 这个诉求通过 ARMS 完善的报警机制可以轻松实现 。 核桃基于自身对前端健康度的理解 , 以及业界通用的方法论 , 创建了多种维度的报警规则 , 比如“最近 5 分钟内平均页面首次渲染耗时大于 1 秒”等 。 当规则被触发时 , 系统会以预先指定的报警方式向报警联系人分组发送报警信息 , 以提醒技术团队及时解决 。 这些报警规则再配合上对生产故障的分级分类定义 , 能够帮助核桃技术团队建立一整套生产故障应对机制 , 真正实现实线上问题 5 分钟内发现 , 10 分钟内隔离 , 30 分钟内解决 。

核桃编程还积极探索前后端统一链路追踪技术 , 将 API 请求从前端发出到后端调用的链路串联起来 , 真实还原代码执行的完整现场 。 这是通过对前端 API 请求自动注入 Trace 信息而实现 , ARMS 前端监控能够在允许 API 自动上报的前提下 , 在 API 请求的 Request Header 中加入自动生成的 TraceID, 作为串联前后端链路的标识 。 这样通过调用的时间轴 , 可以知道是网络传输还是后端调用导致请求耗时时间过长 , 进一步通过后端应用的线程剖析功能 , 可以洞察每次请求后端的完整调用链路 , 对于排查系统故障和性能瓶颈带来了非常大的帮助 。