APM APM

news/2024/7/6 1:08:16 标签: 前端, java, 微服务

这里写目录标题

  • 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 中的概念和实现原理。

先来看一次请求调用示例:

  1. 服务集群中包括: 前端 (A), 两个中间层 (B 和 C), 以及两个后端 (D 和 E)
  2. 当用户发起一个请求时, 首先到达前端 A 服务, 然后 A 分别对 B 服务和 C 服务进行 RPC 调用;
  3. 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 的使用。


http://www.niftyadmin.cn/n/1621139.html

相关文章

Linux- 环境源码安装MySql5.6教程

一、安装方式 1、企业内部系统安装推荐yum安装,对数据库要求不高,并发不大,源码制作rpm,搭建rpm仓库,然后yum install xxx -y 2、常规方式编译安装MySql 5.1以前:./configure \ make, make isntall 5.5-5…

正则表达式入门教程

阿里云大学免费课程:正则表达式入门教程课程介绍:正则表达式,又称规则表达式,英文名为Regular Expression,在代码中常简写为regex、regexp或RE,是计算机科学的一个概念。正则表通常被用来检索、替换那些符合…

Go File

这里写目录标题1. Go File1.1. 将 string 转换为 io.Reader 类型1.2. golang 如何按行读取文本1.2.1. bufio.Reader 和 bufio.Scanner 的关系1. Go File 1.1. 将 string 转换为 io.Reader 类型 在使用很多函数的时候需要传入 string 字符串 , 但是函数参数类型是 io.Reader, …

10秒快速掌握ScheduledExecutorService 中的 scheduleWithFixedDelay() 和 scheduleFixedRate() 区别

scheduleWithFixedDelay: 不管线程任务的执行时间的,每次都要把任务执行完成后再延迟固定时间后再执行下一次。 scheduleFixedRate: 是以固定频率来执行线程任务,固定频率的含义就是可能设定的固定时间不足以完成线程任务&#x…

MySQL 5.7 用户与日志管理

说明:数据库是信息系统中非常重要的一个环节,合理高效地对它进行管理是很重要的工作。通常是由总管理员创建不同的管理账户,然后分配不同的操作权限,把这些账户交给相应的管理人员使用。由于日志文件是掌握数据库运行状态的重要参…

Podman 容器 pod 管理工具

这里写目录标题1. Podman 容器 pod 管理工具1.1. 什么是 Podman1.1.1. Roadmap1.2. Podman 历史1.2.1. 缘起1.2.1.1. 鸿蒙1.2.1.2. 创世1.2.2. 纷争1.2.2.1. 发展1.2.2.2. 野心1.2.2.3. 冲突1.2.2.4. 成败1. Podman 容器 pod 管理工具 1.1. 什么是 Podman Podman 是 Libpod 的…

java线上服务器jvm内存泄漏的一次踩坑(OutOfMemoryError)

前几天线上一台游戏服务器发生内存泄漏,cpu彪的很高,老板的脾气像cpu一样,是不是过来询问问题排查怎么样了。。。 因为线上服务器启动的时候,加了- XX: HeapDumpOnOutOfMemoryError ,发现服务器项目目录下…

游戏服务器生成全局唯一ID的几种方法

在服务器系统开发时,为了适应数据大并发的请求,我们往往需要对数据进行异步存储,特别是在做分布式系统时,这个时候就不能等待插入数据库返回了取自动id了,而是需要在插入数据库之前生成一个全局的唯一id,使…