睿象云智能告警平台的分派策略
860
2023-07-11
本文讲了实现一个全链路监控平台的方案,如何选择应用性能监控平台?
一、概述
应用性能监控平台是用来帮助客户提升应用性能质量和稳定性的重要环节,本人作为一名移动端开发者有着丰富的使用和运维经验,希望通过本文分享过往的心得和使用经验,让我参与开发的U-APM这款产品中,作为借鉴可以在中长期规划中帮助更多的开发者。应用性能监控平台排名
(以下内容仅作为稳定性监控平台这类平台的使用经验和心得,文中提及平台仅供参考)
二、产品受众
1. 了解他们
应用性能监控平台的使用者往往是站在移动终端最前线的开发者,他们需要关注端的稳定性、用户性能、体验等方面。好的工具可以协助他们在日常运维中的工作。
1.1 移动开发者团队职责构成
此类产品的受众主要是移动开发者,而移动开发者开发者也会分为前端和客户端,分别根据自己所使用的技术栈特性进行职责分配,当然跨端技术的出现也让边界不再那么清晰。
1.2 移动开发者日常工作
开发者日常的工作职责主要分成两大部分开发和运维,开发中出现的问题一般可以通过调试环境就可以定位解决,而运维阶段,线上的代码被压缩混淆加密后变的难以辨认无法直接定位问题。不同系统、运行环境、网络情况和低质量的代码则会带来不可预知的性能问题,运维工作的量化汇报等等。这些都是移动开发者们日常所面临的困难。
1.3 场景归纳
如果把应用性能监控平台的使用场景分为上线前和上线后,大致罗列了以上场景。应用性能监控平台哪个好
1.4 应用性能监控平台
针对以上场景,市面上或者公司内部的应用性能监控平台绝大部分能够解决
2. 案例分享
下面我会结合上面提到的场景分享三个案例
2.1 案例1(单设备错误排查)
单设备错误排查的场景对于值班人/开发者的要求很高,其在于排查时间的紧迫性和对开发链路熟悉以及排查工具的完备性等。(此场景常见于重要客户或领导反馈)
2.2 案例2(性能优化)
2.2.1 优化背景
技术栈:React Native
优势:RN 拥有一次编写三端执行和动态部署和逻辑下发到客户端的能力,解决客户端版本审核及更新效率低、三端开发技术方案不一致、三端公共需求存在重复劳动等问题
劣势:RN执行阶段可分为RN加载阶段和RN运行阶段,相应的RN页面所面临的性能问题也不尽相同
2.2.2 RN框架加载流程
为了更清晰的了解RN加载阶段的问题所在,我们先来分析下RN的加载机制
在进入整个RN页面的流程中,RN框架加载会经历以下步骤:
包下载及解压缩:加载时发现本地没有对应的包文件,会先从服务器上下载并解压包的文件。场景化应用性能监控平台
获取初始化引擎:RN预初始引擎的功能,提前创建一个初始化好的引擎并缓存,缓存在退出页面2分钟之后释放。
加载业务包:向一个初始化好的引擎中,加载业务的JS代码。该环节受限于业务JS的大小及设备性能,该加载时间普遍较长。
运行业务包:执行业务JS中runApplication()方法,开始渲染Native页面。该环节受限于业务JS的复杂度及设备性能,如果首次渲染的组件很多,该加载时间会变长。
2.2.3 RN框架常用指标和维度
RN加载阶段的性能优劣,最直观的感受就是页面加载耗时
所以RN技术在带来种种优点的同时,也在存在一些性能和体验问题,这需要一些优化手段和指标来支撑业务的稳定运行,性能监控平台
不同的终端技术栈需要结合自身加载和运行的关键阶段,量身打造适合自己的性能指标和维度。这可以让开发者监控页面加载和运行过程的每个环节,进行针对性优化。
2.2.4 优化过程&结果
问题发现:
发现以上页面指标,页面加载时间(90分位)长时间处于1.2s左右高于要求的标准阈值1s以内
参考RN加载流程经过多维度筛查,发现很多用户是首次访问该页面,下载代码包需要大量耗时,低网络更是如此,所以我们需要提前用户下载bundle的时机,还有减少bundle的大小。
解决方案:
知道问题所在就好办多了,我们整理了针对包大小优化,包预下载时间等一系列的优化方案的组合拳,这里就不过多展开。
优化结果:
优化结果:页面加载时间(90分位)减少耗时至0.5s
2.3 案例3(汇报)
汇报工作方式一般分为两种报告和值班推送的形式,主要将所监控页面或者业务线重要的性能指标进行实时或定期追踪同步,方便负责团队进行下一步行动(比如:优化、错误修复等)
应用性能监控的主要目的是,提升对性能的管理效率,了解所监控的数据变化,帮助企业更快速的解决一些面临的难题,因而很多企业都会特意选择可靠的监控平台,提升监控管理的质量,免除一些不必要的人力成本,大大降低了监控管理的困难度。那么,对于应用的性能管理监控,应该挑选什么监控平台使用会比较好呢?
1.可多方面监控
应用性能监控只是一个称呼,并不是说只能对某一数据监控,这样的监控效率太低,也不符合企业的使用需求。好的监控平台,可以监控多种性能数据,做到多方面监控到位。直接由一个平台就可以解决所有需要监控的数据,这样的平台无疑是值得推荐的,也是企业所想要选择的。
2.做到实时监控管理
一些数据的变化需要做到能实时监控,掌握数据的变化动向,因此,好的监控平台需要可以做到实时监控,让企业能通过这些数据情况加以制定后续的其他工作安排。例如,真实用户实时监控,可以从多个层面了解到用户的使用性能如何,综合所有的收获到的真是数据,可以提升或优化一些不足之处。
3.响应速度快
应用性能监控可以防止突发事件发生之后,企业响应速度过慢,从而造成了经济损失。可靠的监控平台,在对各方面数据进行监控时也需要做到,当出现异常状况,可以及时反馈给企业的技术人员,响应的速度能快一些,造成损失的情况也就少一些,带给企业更多的使用保障。
相信通过以上所提到的几点,可以了解到使用应用性能监控平台的重要性与必要性。通过对一些性能的监控,不仅可以提升用户后续的使用体验感,增加企业的业务价值,还可以让突发事件的相应速度增快,避免了一些不必要的经济损失与用户体验不佳。
随着微服务架构的流行,服务按照不同的维度进行拆分 ,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上 ,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心 。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。
全链路监控组件就在这样的问题背景下产生了。最出名的是谷歌公开的论文提到的 Google Dapper。想要在这个上下文中理解分布式系统的行为,就需要监控那些横跨了不同的应用、不同的服务器之间的关联动作 。
所以,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路 。一个请求完整调用链可能如下图所示:
一个请求完整调用链
那么在业务规模不断增大、服务不断增多以及频繁变更的情况下,面对复杂的调用链路就带来一系列问题:
如何快速发现问题?
如何判断故障影响范围?
如何梳理服务依赖以及依赖的合理性?
如何分析链路性能问题以及实时容量规划?
同时我们会关注在请求处理期间各个调用的各项性能指标 ,比如:吞吐量(TPS)、响应时间及错误记录等。
吞吐量 ,根据拓扑可计算相应组件、平台、物理设备的实时吞吐量。
响应时间 ,包括整体调用的响应时间和各个服务的响应时间等。
错误记录 ,根据服务返回统计单位时间异常次数。
全链路性能监控 从整体维度到局部维度展示各项指标 ,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。
有了全链路监控工具,我们能够达到:
请求链路追踪,故障快速定位 :可以通过调用链结合业务日志快速定位错误信息。
可视化 :各个阶段耗时,进行性能分析。
依赖优化 :各个调用环节的可用性、梳理服务依赖关系以及优化。
数据分析,优化链路 :可以得到用户的行为路径,汇总分析应用在很多业务场景。
1 目标要求
如上所述,那么我们选择全链路监控组件有哪些目标要求呢?Google Dapper中也提到了,总结如下:
探针的性能消耗
APM组件服务的影响应该做到足够小。服务调用埋点本身会带来性能损耗,这就需要调用跟踪的低损耗,实际中还会通过配置采样率的方式,选择一部分请求去分析请求路径 。在一些高度优化过的服务,即使一点点损耗也会很容易察觉到,而且有可能迫使在线服务的部署团队不得不将跟踪系统关停。
代码的侵入性
即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统,对于使用方透明,减少开发人员的负担 。
对于应用的程序员来说,是不需要知道有跟踪系统这回事的。如果一个跟踪系统想生效,就必须需要依赖应用的开发者主动配合,那么这个跟踪系统也太脆弱了,往往由于跟踪系统在应用中植入代码的bug或疏忽导致应用出问题,这样才是无法满足对跟踪系统“无所不在的部署”这个需求。
可扩展性
一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。能够支持的组件越多当然越好 。或者提供便捷的插件开发API,对于一些没有监控到的组件,应用开发者也可以自行扩展。
数据的分析
数据的分析要快 ,分析的维度尽可能多 。跟踪系统能提供足够快的信息反馈,就可以对生产环境下的异常状况做出快速反应。分析的全面,能够避免二次开发 。
2 功能模块
一般的全链路监控系统,大致可分为四大功能模块:
埋点与生成日志
埋点即系统在当前节点的上下文信息,可以分为 客户端埋点、服务端埋点,以及客户端和服务端双向型埋点 。埋点日志通常要包含以下内容traceId、spanId、调用的开始时间,协议类型、调用方ip和端口,请求的服务名、调用耗时,调用结果,异常信息等,同时预留可扩展字段,为下一步扩展做准备;
不能造成性能负担 :一个价值未被验证,却会影响性能的东西,是很难在公司推广的!
因为要写log,业务QPS越高,性能影响越重。通过采样和异步log解决 。
收集和存储日志
主要支持分布式日志采集的方案,同时增加MQ作为缓冲;
每个机器上有一个 deamon 做日志收集,业务进程把自己的Trace发到daemon,daemon把收集Trace往上一级发送;
多级的collector ,类似pub/sub架构,可以负载均衡;
对聚合的数据进行 实时分析和离线存储 ;
离线分析 需要将同一条调用链的日志汇总在一起;
分析和统计调用链路数据,以及时效性
调用链跟踪分析 :把同一TraceID的Span收集起来,按时间排序就是timeline。把ParentID串起来就是调用栈 。
抛异常或者超时,在日志里打印TraceID。利用TraceID查询调用链情况,定位问题。性能监控平台好处
依赖度量 :
离线分析 :按TraceID汇总,通过Span的ID和ParentID还原调用关系,分析链路形态。
实时分析 :对单条日志直接分析,不做汇总,重组。得到当前QPS,延迟。
强依赖 :调用失败会直接中断主流程
高度依赖 :一次链路中调用某个依赖的几率高
频繁依赖 :一次链路调用同一个依赖的次数多
展现以及决策支持
上文就是小编整理的实现一个全链路监控平台的方案,如何选择应用性能监控平台?
国内(北京、上海、广州、深圳、成都、重庆、杭州、西安、武汉、苏州、郑州、南京、天津、长沙、东莞、宁波、佛山、合肥、青岛)睿象云智能运维平台软件分析、比较及推荐。
发表评论
暂时没有评论,来抢沙发吧~