欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

APMAPM

时间:2023-06-30
这里写目录标题

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 的使用。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。