1、APM
1.1、什么是 APM 系统?1.2、APM 的基本原理1.3、如何才能实现跟踪呢?1.4、APM 的筛选标准 1、APM 1.1、什么是 APM 系统?
APM 系统可以帮助理解系统行为、用于分析性能问题的工具, 以便发生故障的时候, 能够快速定位和解决问题, 这就是 APM 系统, 全称是 (Application Performance Monitor)。
谷歌公开的论文提到的 Google Dapper 可以说是最早的 APM 系统了, 给 google 的开发者和运维团队帮了大忙, 所以谷歌公开论文分享了 Dapper。
而后, 很多的技术公司基于这篇论文的原理, 设计开发了很多出色的 APM 框架, 例如 Pinpoint、SkyWalking 等。
1.2、APM 的基本原理目前大部分的 APM 系统都是基于 Google 的 Dapper 原理实现, 我们简单来看看 Dapper 中的概念和实现原理。
先来看一次请求调用示例:
服务集群中包括: 前端 (A), 两个中间层 (B 和 C), 以及两个后端 (D 和 E)当用户发起一个请求时, 首先到达前端 A 服务, 然后 A 分别对 B 服务和 C 服务进行 RPC 调用;B 服务处理完给 A 做出响应, 但是 C 服务还需要和后端的 D 服务和 E 服务交互之后再返还给 A 服务, 最后由 A 服务来响应用户的请求; 1.3、如何才能实现跟踪呢?Google 的 Dapper 设计了下面的几个概念用来记录请求链路:
Span: 请求中的基本工作单元, 每一次链路调用 (RPC、Rest、数据库调用) 都会创建一个 Span。大概结构如下:
type Span struct { TraceID int64 // 用于标示一次完整的请求 id Name string // 单元名称 ID int64 // 当前这次调用 span_id ParentID int64 // 上层服务的 span_id, 最上层服务 parent_id 为 null, 代表根服务 Annotation []Annotation // 注释, 用于记录调用中的详细信息, 例如时间}
Trace: 一次完整的调用链路, 包含多个 Span 的树状结构, 具有唯一的 TraceID
一次请求的每个链路, 通过 spanId、parentId 就能串联起来:
当然, 从请求到服务器开始, 服务器返回 response 结束, 每个 span 存在相同的唯一标识 trace_id。
1.4、APM 的筛选标准目前主流的 APM 框架都会包含下列几个组件来完成链路信息的收集和展示:
探针 (Agent): 负责在客户端程序运行时搜索服务调用链路信息, 发送给收集器
收集器 (Collector): 负责将数据格式化, 保存到存储器
存储器 (Storage): 保存数据
UI 界面 (WebUI): 统计并展示收集到的信息
因此, 要筛选一款合格的 APM 框架, 就是对比各个组件的使用差异, 主要对比项:
探针的性能
主要是 agent 对服务的吞吐量、CPU 和内存的影响。如果探针在收集微服务运行数据时, 对微服务的运行产生了比较大的性能影响, 相信没什么人愿意使用。
collector 的可扩展性
能够水平扩展以便支持大规模服务器集群, 保证收集器的高可用特性。
全面的调用链路数据分析
数据的分析要快 , 分析的维度尽可能多。跟踪系统能提供足够快的信息反馈, 就可以对生产环境下的异常状况做出快速反应, 最好提供代码级别的可见性以便轻松定位失败点和瓶颈。
对于开发透明, 容易开关
即也作为业务组件, 应当尽可能少入侵或者无入侵其他业务系统, 对于使用方透明, 减少开发人员的负担。
完整的调用链应用拓扑
自动检测应用拓扑, 帮助你搞清楚应用的架构
接下来, 我们就对比下目前比较常见的三种 APM 框架的各项指标, 分别是:
Zipkin: 由 Twitter 公司开源, 开放源代码分布式的跟踪系统, 用于收集服务的定时数据, 以解决微服务架构中的延迟问题, 包括: 数据的收集、存储、查找和展现。
Pinpoint: 一款对 Java 编写的大规模分布式系统的 APM 工具, 由韩国人开源的分布式跟踪组件。
Skywalking: 国产的优秀 APM 组件, 是一个对 JAVA 分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统。现在是 Apache 的顶级项目之一。
Zipkin 的探针性能、开发透明性、数据分析能力都不占优, 实在是下下之选。
而 pinpoint 在数据分析能力、开发透明性上有较大的优势, 不过 Pinpoint 的部署相对比较复杂, 需要的硬件资源较高。
Skywalking 的探针性能和开发透明性上具有较大优势, 数据分析能力上也还不错, 重要的是其部署比较方便灵活, 比起 Pinpoint 更适合中小型企业使用。
因此, 本文会带着大家学习 Skywalking 的使用。