《阿里云可观测最佳实践》——6.核桃编程(2): https://developer.aliyun.com/article/1227051
特别重要的是,ARMS前端监控能够从地理位置、浏览器、操作系统、分辨率、网络运营商、应用版本等多个维护,对性能指标进行聚合分析,从而帮助核桃编程更好地定位性能瓶颈。比如地理分布视图就能通过对地理位置的聚合分析,展现全国每一个省的页面首次渲染平均时间。当某一个地域的CDN出现故障的时候,地理分布视图能帮助核桃编程迅速定位问题的根源,而传统的监控手段是完全没有办法覆盖这类场景的。
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,作为串联前后端链路的标识。这样通过调用的时间轴,可以知道是网络传输还是后端调用导致请求耗时时间过长,进一步通过后端应用的线程剖析功能,可以洞察每次请求后端的完整调用链路,对于排查系统故障和性能瓶颈带来了非常大的帮助。
4 业务价值
完善的前端可观测体系在帮助核桃编程减少了30%以上的运维工作量的同时,还缩短了60%以上的故障定位平均耗时,极大地提升了用户体验,为业务持续发展打下了坚实的基础。核桃技术团队将基于自身的技术特点,继续探索更多前沿的云原生技术,充分享受云计算带来的红利。