应用程序的私人医生——APM

作者 | 蔡佳琪 ,应用单位 :中国移动智慧家庭运营中心

​Labs 导读

云时代应用日益丰富,程序用户数量爆发增长 ,人医繁杂的应用应用异常问题接踵而来 。传统运维模式下 ,程序多套运维系统上的人医各项指标无法关联分析,运维人员需要根据经验逐一排查异常,应用分析定位问题效率低 ,程序维护成本高。人医APM(Application Performance Management)应用性能管理,应用是程序监控并管理应用性能和故障的云服务,为服务端应用和服务提供代码级的人医实时性能和业务监控 ,高防服务器快速定位故障和瓶颈,应用保障系统和业务稳定性 ,程序为用户体验保驾护航。人医

现在的微服务架构中 ,一次请求往往涉及到多个模块 、多个中间件 、多台机器的相互协助才能完成,而这些请求中既有串行又有并行 ,怎么才能确定这个请求背后调用了哪些应用、模块、节点以及调用的先后顺序呢?还有出现性能问题该如何定位?你是否也会有这样的疑惑  ?其实APM可以满足以上的云计算所有需求 。

APM是应用性能监测软件,拥有强大的分析工具,通过拓扑图、调用链 、事务分析可视化地展现应用状态、调用过程 、用户的各种操作,快速定位问题 。国内外的APM有很多 ,比如Zipkin、CAT、源码下载PinPoint等等 。今天主要给大家分享这款由国内开源爱好者吴晟开源并提交到Apache孵化的产品——SkyWalking。

Part 01  概念与架构 

SkyWalking从服务和云原生基础设施收集、分析、聚合并将其可视化,提供简便的方式来观测分布式系统,甚至可以横跨多个云平台。它是一种现代APM,可以说专门为云原生 、基于容器的分布式系统设计 。

它的整体架构可以分为四部分: 探针、香港云服务器OAP平台 、存储实现和UI模块(如上图)。

探针:收集遥测数据,包括链路追踪和性能指标 ,将数据格式化为SkyWalking适用的格式 。

OAP :Observability Analysis Platform是一个高度组件化的轻量级分析程序,支持数据聚合 、数据分析以及驱动数据流从探针到用户界面的流程 。同时支持分析包括SkyWalking原生追踪和性能指标以及第三方来源 。

存储:通过开放的插件化接口存放SkyWalking数据 ,支持ElasticSearch,H2或MySQL集群 。亿华云

UI :一个基于接口高度定制化的Web系统 ,提供关于总览 、追踪和告警相关的观测图 ,包括拓扑图、依赖图 、热点图等 。

Part 02  基本原理与优势 

简单来说SkyWalking通过探针收集并且发送数据到链路数据归集器,再经过OAP的分析将结果写入持久化存储中,最终展示到Web可视化平台 。

❖ 那为什么要选择SkyWalking ?

自然是因为它的诸多优势。它为服务提供自动打点的源码库代理, 如Java, C# , Node.js , Go , PHP以及Nginx LUA;而且它采用了插件化+javaagent的形式来实现span(一次调用过程)数据的自动采集  ,这样可以做到对代码的无侵入性,而插件化意味着可插拔 ,扩展性就比较好;它为服务(service)  ,服务实例(service instance) ,以及端点(endpoint) 提供可观测能力 ,用户可以看到服务和端点之间的拓扑结构 、每个服务/服务实例/端点的性能指标 ,还可以设置告警规则 。

Part 03  SkyWalking的六大特性 

SkyWalking的六大特性  ,也是该项目的核心设计目标。

- 可观测性

SkyWalking提供了数种运行的形式和探针  ,无论目标系统是如何部署的 ,它都能提供一种集成解决方案来保持对目标系统的观测 。

- 拓扑结构 、性能指标和追踪一体化

拓扑图是理解分布式系统的第一步,它用可阅读性较高的布局将整个系统展现出来 ,这样运维人员对服务、实例 、端点、调用等度量指标就有了更高的需求 ,而追踪需要用详细的日志来让用户更好地理解这些指标,例如当端点的延迟变长时,我们希望查看最慢的追踪来找到原因  。因此从大局到细节,这些都是需要的。SkyWalking就集成了大量的特性来满足上述这些需求。

- 轻量级

在两个方面需要做到轻量级 。首先是探针,我们通常依赖网络传输框架,所以探针要尽可能小, 防止依赖库冲突以及虚拟机的负载压力;其次是性能,监控平台在整个项目环境中只是次要的系统  ,SkyWalking使用轻量级框架来构建后端核心服务 ,不需要部署并维护大数据相关的平台。我们可以看下测评数据:

可以看出 ,不论是CPU,内存 ,还是响应时间 ,使用SkyWalking带来的性能损耗几乎可以忽略不计 。

- 可插拔性

SkyWalking提供了许多默认实现,但这显然是不够的,也不可能适用于所有场景,因此它提供了大量的特性来支持可插拔功能 。

- 可移植性

SkyWalking可以在多种环境下运行,包括:

使用传统的注册中心 ,如eureka。使用包括服务发现的RPC(Remote Procedure Call)框架,如Spring Cloud。在现代基础设施中使用Service Mesh。使用云服务 。跨云部署 。

- 可互操作性

虽然SkyWalking拥有很强大的社区 ,但也不可能支持所有的系统。不过它支持与其他运维支撑系统进行互操作(主要是探针方面) ,SkyWalking可以接收并理解Zipkin,Jaeger,OpenTracing和OpenCensus的数据格式 。这对于终端用户来说是非常有用的 ,这样他们就不需要切换已有的函数库了 。

Part 04  各大APM的“巅峰对决” 

总的来说,CAT作为综合性的平台,提供的监控功能较为全面;Zipkin是由Twitter开源的调用链分析工具 ,非常轻量,使用部署简单;Pinpoint和SkyWalking都专注于链路和性能监控  ,追踪数据粒度较细 、用户界面功能强大 。

Part 05  总结 

随着分布式系统和微服务架构的应用和发展,应用性能管理成为系统运维管理和网络管理的一个重要方向,它能轻松地找到应用系统中的故障点 ,并提供有相关解决建议或方法,从而提高系统的整体性能 。目前SkyWalking增长势头强劲 ,社区活跃 ,文档较为齐全 ,没有语言障碍 ,支持多语言探针 ,支持很多框架 ,也有很多开发者不断地向社区提供更多插件以支持更多组件无缝接入SkyWalking。​

滇ICP备2023006006号-15