栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

APM APM

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

APM APM

这里写目录标题

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/733097.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号