核桃编程:前端可观测性建设之路

简介: 随着核桃编程业务的快速增长,核心应用的系统规模和系统复杂度也在经历翻天覆地的变化。核桃技术团队不断通过新兴的技术手段维护整套系统架构的技术先进性。在3 年时间里,技术团队至少对整体系统架构进行了 6 次以上的重大重构,涉及微服务化、容器化、分布式数据库等重要的技术,并尝试通过 Serverless 技术提升系统的弹性伸缩能力。在疫情期间,当系统负荷呈现数倍突增的情况下,核桃编程的系统架构依然经受住了考验。

作者|山猎


根据《中国少儿编程行业研究报告》及《2017-2023 年中国少儿编程市场分析预测研究报告》预测得出,少儿编程有望在 3-5 年内,达到少儿英语市场规模的一半,即 500 亿左右,发展前景广阔。

在信息化时代的今天,人工智能给人们带来了巨大变化,新时代的家长处于互联网时代,与上一代的家长思维产生较大的变化,能够注重孩子的素质教育,注重培养孩子人工智能方向的才能。少儿编程教育就是在这样的背景下快速发展起来。

核桃编程是少儿编程教育行业的领导者,致力于以科技手段促进编程教育,通过人工智能、自适应学习等先进技术和科学的教育方法,启发中国孩子的学习能力。自 2017 年 8 月成立以来,核桃编程的业务量飞速发展,仅仅 3 年时间付费学员人数就突破了 200 万,并实现了单月营收过亿。

随着核桃编程业务的快速增长,核心应用的系统规模和系统复杂度也在经历翻天覆地的变化。核桃技术团队不断通过新兴的技术手段维护整套系统架构的技术先进性。在3 年时间里,技术团队至少对整体系统架构进行了 6 次以上的重大重构,涉及微服务化、容器化、分布式数据库等重要的技术,并尝试通过 Serverless 技术提升系统的弹性伸缩能力。在疫情期间,当系统负荷呈现数倍突增的情况下,核桃编程的系统架构依然经受住了考验。

随着系统架构从简单变得复杂,有一个在互联网领域老大难的问题也逐步在核桃编程中体现出来:如何提升分布式系统的可观测性?在线上编程教学场景里面,用户一个简单的操作,就有可能涉及到前后端系统的多次交互,以及多个服务端微服务应用之间的相互调用,甚至还会受到第三方服务接口的影响。任何一个环节出现故障或者性能瓶颈,都会导致用户体验的断崖式下跌,而用户体验又是决定品牌形象的核心要素,所以对于核桃技术团队而言,保证优秀的用户体验需要在系统可观测性建设上做到这几个方面:

  1. 全面而且实时的了解系统每一个对外接口的性能质量。
  2. 通过数据掌握最终用户与系统交互时感受到的系统健康程度。
  3. 当系统健康程度存在问题时,技术团队能第一时间发现问题,并及时处理。
  4. 处理问题时,能迅速定位到系统瓶颈和故障源。

任何一个技术团队要想围绕着这几个方面,从零开始建设分布式可观测体系,都是一项非常艰巨的任务,好在业界对于分布式可观测性的建设,已经有了不少成熟的方法论以及开源项目可以参考。

业界广泛认可的可观测性(observability)包含三个核心要素:Logging(离散的日志信息)、Metrics(聚合的指标)、Distributed Tracing(分布式追踪)。围绕这三个核心要素,有不少开源项目可以进行选择,帮助开发者快速建设分布式可观测体系。

 

通过引入 Skywalking,Prometheus 等开源技术,核桃技术团队建立了完整的分布式可观测体系,能够对服务端复杂的微服务应用实现全链路追踪,并通过统一的日志服务体系收集分析业务日志。这样的努力对于系统稳定性以及用户体验的提升是立竿见影的:当系统服务端的任何一个环节出现故障或性能瓶颈的时候,技术团队都能第一时间得到通知,并快速定位问题,进行针对性处理。

相对于成熟的服务端监控技术,整个业界在客户端监控领域的技术方案一直比较欠缺。在互联网上,海量的用户使用不同厂家、不同操作系统、不同屏幕分辨率的终端设备,分布在不同的地域,又通过不同的网络运营商进行接入,甚至存在复杂的第三方依赖,包括 CDN、第三方统计脚本、页面嵌套等方面。当用户体验遇到问题的时候,如果仅仅拥有服务端监控手段,很难第一时间确认问题的根源到底在于前端还是后端。即便能够排除服务端的问题,前端用户体验也受到页面渲染、JavaScript 执行、网络质量、第三方接口服务质量等方面的影响,为进一步排查问题留下了非常多的挑战。

一个简单的思路是通过前端 JavaScript 做自定义的埋点,将最终用户的各种行为实时上报给服务端进行统计,以第一时间了解到用户体验。这个思路本身是合理的,但业务埋点、数据采集、聚合分析、视图展现等层面都有非常多的工作需要做,是一个浩大的工程。绝大多数技术团队而言,投入如此多的精力来建设这样一套前端监控方案都是不现实的。​

建设前端可观测体系,最好的捷径是参考互联网领域头部企业的案例,选择云计算厂商提供的完整方案。阿里巴巴多年实战积累了一套全集团统一的前端监控方案,并开放给各个事业部接入。对于以 HTML 页面形式呈现的前端应用,不管是 PC 端/移动端网站,嵌入到移动端 App 的 HTML5 页面,都可以通过无侵入的方式接入到这套前端监控方案中。

这套监控方案也同时通过阿里云对外输出,成为阿里云可观测性整体方案的重要组成部分,服务于广大的外部用户。

在客户端监控领域,包括 ARMS 前端监控和 APP 监控两个产品,其中 ARMS 前端监控专注于 Web 端体验数据监控,从页面打开速度、页面稳定性和外部服务调用成功率这三个方面监测 Web 页面的健康度,帮助使用者降低页面加载时间、减少 JS 错误,有效提升用户体验。

 这套方案正好能补齐核桃编程在客户端监控领域的能力缺失,所以核桃技术团队尝试在一些业务线接入阿里云 ARMS 前端监控。很快,他们就感受到了这套方案对于提升用户体验所带来的价值。

ARMS 前端监控方案之所以能被核桃编程采纳,有一个很重要的原因是方案的接入是非常简单的,唯一要做的事情是在客户端 HTML 页面的 Body 元素中加入一段由 ARMS 提供的统计接入脚本(一段 Java Script 代码),就能完成监控数据的自动上报。这其中不涉及到任何跟业务层主动埋点的工作,在核桃编程的多条业务线之间推广起来是非常顺利的。基于之前的经验,凡是需要在业务层主动埋点的监控方案,都需要通过行政手段来保证多个研发团队在编写代码的时候遵守既定的规则,这样的方式从长期来看都是很难落地的。包括在服务端全链路监控方面,核桃编程也始终遵循业务无侵入的思路,避免主动埋点行为。​

接下来,研发人员就能从前端监控控制台全面了解应用端到端的健康程度,包括 PV/UV 情况统计、页面加载速度情况、JavaScript 执行情况,API 请求成功率等多个方面。以页面加载速度为例,ARMS 可以基于客户端自动上报的监控数据,实时展示每一个页面的加载情况。

其中,首次渲染时间、首屏时间、Dom Ready 等指标都是 HTML 页面独有的性能指标,遵循业务标准的指标定义。这些指标数据和前端页面健康程度息息相关,影响着最终用户每一次交互行为的实际体验。

 通过页面加载瀑布图,能够按照页面加载的顺序,直观地展示各阶段的耗时情况。这些指标参数涵盖了网络层面的性能指标,当网络层面出现性能瓶颈,比如应用系统的接入带宽不能支撑用户访问流量的时候,仅仅通过服务端的监控手段,是无法洞察到的,必须依赖于客户端的实时监控数据上报。通过 ARMS 前端监控,核桃编程能从页面生产时(服务器端状态)、页面加载时和页面运行时这三个方面,全面了解到每一个应用系统端到端的健康程度。

特别重要的是,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 ,作为串联前后端链路的标识。这样通过调用的时间轴,可以知道是网络传输还是后端调用导致请求耗时时间过长,进一步通过后端应用的线程剖析功能,可以洞察每次请求后端的完整调用链路,对于排查系统故障和性能瓶颈带来了非常大的帮助。

完善的前端可观测体系在帮助核桃编程减少了 30% 以上的运维工作量的同时,还缩短了 60% 以上的故障定位平均耗时,极大地提升了用户体验,为业务持续发展打下了坚实的基础。核桃技术团队将基于自身的技术特点,继续探索更多前沿的云原生技术,充分享受云计算带来的红利。

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

少拿游戏来骗我,虚幻引擎5上的《黑客帝国》全新体验,画面帅到爆

整理 | 禾木木 出品 | CSDN云计算(ID:CSDNcloud) 近日,由 Epic Games 发行的虚幻引擎 5 体验上线了。 以华纳兄弟公司电影《黑客帝国》为背景,由拉娜 沃卓斯基担任编剧和导演,基努 里维斯和凯瑞 - 安 莫…

python变量使用前必须先声明、并且一旦声明_初学者学习Python的30天‍-第18天-文件处理...

前文最近不是出了一个30天的Python教程,有很多人私信我说没有资料怎么跟着学习,现在他来了https://www.bilibili.com/read/cv9383238今天,我探讨了如何使用Python处理文件并与文件进行通信。这些天来,我一直在探索和分享各种Pytho…

金融数据智能峰会 | 数据规模爆炸性增长,企业如何进行精准决策?云原生数据仓库数据化运营实战分享

简介: 在日前的2021阿里云金融数据智能峰会——《云原生驱动数智化运营的“增长黑马”》专场上,阿里云数据库资深技术专家魏闯先 从数据价值链路角度切入,为大家解读云原生数据仓库如何支撑数据化运营、全链路营销和阿里集团双11业务&#xf…

redistemplate.opsforvalue 设置不过期_民法典即将实施!“离婚冷静期”倍受关注

还有不到一个月,“离婚冷静期”就要落地了。2021年1月1日起,《中华人民共和国民法典》(以下简称“《民法典》”)将正式施行。作为与老百姓日常生活关系最为紧密的一部法律,《民法典》的制定和施行备受关注,其中尤以“离婚冷静期”…

到底是无线最难?还是核心网最难?

作者 | 小枣君来源 | 鲜枣课堂今天这篇文章,我们来探讨一个通信行业的长期争议话题——到底是无线最难?还是核心网最难?众所周知,通信行业虽然对外统称“通信”,但实际上,内部却分为三个细分板块&#xff0…

谈谈C++新标准带来的属性(Attribute)

简介: 从C11开始,标准引入了一个新概念“属性(attribute)”,本文将简单介绍一下目前在C标准中已经添加的各个属性以及常用属性的具体应用。 作者 | 寒冬 来源 | 阿里技术公众号 从C11开始,标准引入了一个新概念“属性(attribute)…

mmap函数_分析由 mmap 导致的内存泄漏

背景一个程序链接 TCMalloc ,同时调用 mmap / munmap 管理一部分较大的内存通过 TCMalloc 的统计信息,判断内存泄漏不是由 new / malloc 等常规接口导致的因此怀疑是 mmap 导致的内存泄漏hookhook mmap / munmap 记录下每一次调用,可以分析出…

如何一站式快速构建企业全场景数据库管理平台?

简介: Gartner 的报告显示预计到2022年将有75%数据库将采用云数据库,与此同时,IDC预计到2024年传统部署数据库市场将达到13亿美元,企业数字化转型升级,积极拥抱开源、云原生数据库成为重要趋势,也是必然选择…

编程能力差,学不好Python、AI、Java等技术,90%是输在了这点上!

据了解,超90%的人在学习Python、Java、AI等技术时,都是在网上随便找个入门的教程就开始学起来。然而多数人在看了不少教程后,还是很难独立完成项目,甚至反思自己为什么学了这么久编程能力还是这么差!因为你在刚刚开始学…

更丰富的云原生应用治理能力让业务快速生长

简介: 据 Gartner 的报告显示,到 2022 年将有 50% 的应用软件将容器化,2023 年高可控应用 PaaS 的市场规模将达到 332 亿元,年复合增长率约为 18.7%。企业数字化转型的道路上,积极拥抱云原生,加速业务系统容…

“建木”萌芽,聚木成林

据 Github 2021 年度报告显示,目前 Github 用户数已超 7300 万,中国 Github 开发者 755万,开源吞噬世界的当下,越来越多中国开发者和企业积极参与开源建设。 有一位从事开源 10 多年的从业人员,戏称自己为未来希望成为…

还在为多集群管理烦恼吗?RedHat 和蚂蚁、阿里云给开源社区带来了OCM

简介: 为了让开发者、用户在多集群和混合环境下也能像在单个 Kubernetes 集群平台上一样,使用自己熟悉的开源项目和产品轻松开发功能,RedHat 和蚂蚁、阿里云共同发起并开源了 OCM(Open Cluster Management,项目官网 &a…

lol模型导入ue4_Houdini amp; UE4 程序化建模——石头(一)基础工作流

导言最近程序化建模的风气在国内兴起,建立好程序化建模流程,通过调参就可以生成丰富的美术资源。可以程序化建模的内容有很多,国外的程序化曼哈顿、林中小屋等都是很好的例子,所有带有规律的模型都可以程序化来做。程序化可以做从…

iOS 端容器之 WKWebView 那些事

简介: 本文主要是关于在端容器设计开发过程中,WKWebView 使用上遇到的一些问题和解决办法。 一 背景 熟悉 iOS\macOS Hybrid 混合开发的同学应该都有体会,WKWebView 虽然是苹果作为替代 UIWebView\WebView 而推出的"新"组件&…

95后热搜哪些事,夸克用AI引擎发布2021年度关键词

编辑 | 宋慧 出品 | CSDN 云计算 岁末将至,哪些心潮澎湃的瞬间与难以忘怀的言语,能够代表你的2021? 12月14日,在夸克Meet AI开放日上,阿里巴巴智能信息事业群旗下的智能搜索APP夸克与中国传媒大学互联网信息研究院联合…

MaxCompute Spark 资源使用优化祥解

简介: 本文主要讲解MaxCompute Spark资源调优,目的在于在保证Spark任务正常运行的前提下,指导用户更好地对Spark作业资源使用进行优化,极大化利用资源,降低成本。 本文作者:吴数傑 阿里云智能 开发工程师 …

tika设置文件长度限制_MySQLInnoDB某些你没注意过的限制

01—目录02—前言最近一个朋友遇到一个面试题:MySQL的InnoDB的一个表最多能存多少数据?这么一问,我瞬间也蒙圈了,这是我的知识盲区啊,之前还从来没考虑过这样的问题。那我怎么能甘心的,只好去网上一顿查资料…

如何保证 Serverless 业务部署更新的一致性?

简介: 代码在其他场景被更新,需要我们在当前得到感知,这个事情其实是非常重要的,和代码的安全发布密不可少。而此时,通过 Serverless Devs 是可以做到的。 作者|Anycodes 从我做 Serverless 工具开始&…

Gartner最新报告:阿里云计算、存储、网络、安全均获得最高分

12月15日,国际权威机构Gartner发布最新报告,全面评估全球顶级云厂商整体能力。阿里云IaaS基础设施能力拿下全球第一,在计算、存储、网络、安全四项核心评比中均斩获最高分,这也是中国云首次超越亚马逊、微软、谷歌等国际厂商。 《…

软件工程软件产品质量要求与评价_软件质量保证(Quality Assurance)中常见的活动...

质量保证QA关注在软件产品生成的整个过程,主要验证软件产品开发过程中相关实施过程的完整性、一致性和有效性,确保开发活动和测试活动等遵循正确的过程,为软件产品达到合适的质量级别提供信心。为了实现过程的可重用性和持续改进,…