6
6 核桃编程
基于ARMS的核桃编程前端可观测性建设之路
1 关于核桃编程
在互联网时代的今天,新时代家长愈发注重孩子的素质教育,注重培养孩子人工智能方向的才能。少儿编程教育就是在这样的背景下快速发展起来。
核桃编程作为少儿编程教育行业的领导者,致力于以科技手段促进编程教育,通过人工智能、自适应学习等先进技术和科学的教育方法,启发中国孩子的学习能力。自2017年8月成立以来,核桃编程的业务量飞速发展,仅仅3年时间付费学员人数就突破了200万,并实现了单月营收过亿。
2 业务场景 & 可观测需求介绍
随着核桃编程业务快速增长,核心应用的系统规模和系统复杂度经历翻天覆地变化。技术团队不断通过新兴技术手段维护整套系统架构的技术先进性。在3年时间里,技术团队至少对整体系统架构进行了6次以上重大重构,涉及微服务化、容器化、分布式数据库等重要技术,并尝试通过Serverless提升系统弹性伸缩能力。疫情期间,当系统负荷呈现数倍突增,核桃编程的系统架构经受住了考验。
随着系统架构变得复杂,如何提升分布式系统的可观测性成为技术团队面对的重要要挑战。在线上编程教学场景中,用户一个简单的操作,就有可能涉及到前后端系统多次交互,以及多个服务端微服务应用之间相互调用,甚至还会受到第三方服务接口影响。
任何环节出现故障或者性能瓶颈,都会导致用户体验断崖式下跌,而用户体验又是决定品牌形象的核心要素,所以对于核桃技术团队而言,保证优秀的用户体验需要在系统可观测性建设上做到这几个方面:
• 全面而且实时的了解系统每一个对外接口的性能质量。
• 通过数据掌握最终用户与系统交互时感受到的系统健康程度。
• 当系统健康程度存在问题时,技术团队能第一时间发现问题,并及时处理。
• 处理问题时,能迅速定位到系统瓶颈和故障源。
任何一个技术团队要想围绕着这几个方面,从零开始建设分布式可观测体系,都是一项非常艰巨的任务,好在业界对于分布式可观测性的建设,已经有了不少成熟的方法论以及开源项目可以参考。
通过引入Skywalking,Prometheus等开源技术,核桃技术团队建立完整的分布式可观测体系,能够对服务端复杂微服务应用实现全链路追踪,并通过统一的日志服务体系收集分析业务日志。这样的对于系统稳定性以及用户体验提升是立竿见影的:当系统服务端的任何一个环节出现故障或性能瓶颈的时候,技术团队都能第一时间得到通知,并快速定位问题,进行针对性处理。
相对于成熟的服务端监控技术,整个业界在客户端监控领域的技术方案一直比较欠缺。海量用户使用不同厂家、不同操作系统、不同屏幕分辨率终端设备,分布在不同地域,通过不同网络运营商进行接入,甚至存在复第三方依赖,包括CDN、第三方统计脚本、页面嵌套等方面。当用户体验遇到问题时,如果仅仅拥有服务端监控手段,很难第一时间确认问题的根源到底在于前端还是后端。即便能够排除服务端的问题,前端用户体验也受到页面渲染、JavaScript执行、网络质量、第三方接口服务质量等方面的影响,为进一步排查问题留下了非常多的挑战。
因此,技术团队计划通过前端JavaScript做自定义的埋点,将最终用户的各种行为实时上报给服务端进行统计,以第一时间了解到用户体验。但具体到业务埋点、数据采集、聚合分析、视图展现等层面都有非常多工作需要做,是一个浩大的工程。绝大多数技术团队而言,投入如此多的精力来建设这样一套前端监控方案都是不现实的。
《阿里云可观测最佳实践》——6.核桃编程(2): https://developer.aliyun.com/article/1227051