APM系统是什么?有什么用处?

news2025/1/18 9:57:12

自SpringCloud问世以来,微服务以席卷之势风靡全球,企业架构都在从传统SOA向微服务转型。然而微服务这把双刃剑在带来各种优势的同时,也给运维、性能监控、错误的排查带来的极大的困难。

  在大型项目中,服务架构会包含数十乃至上百个服务节点。往往一次请求会设计到多个微服务,想要排查一次请求链路中经过了哪些节点,每个节点的执行情况如何,就称为了亟待解决的问题。于是分布式系统的APM管理系统应运而生。

  什么是APM系统?

  APM系统可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这就是APM系统,全称是(Application Performance Monitor)。

  谷歌公开的论文提到的 Google Dapper可以说是最早的APM系统了,给google的开发者和运维团队帮了大忙,所以谷歌公开论文分享了Dapper。

  而后,很多的技术公司基于这篇论文的原理,设计开发了很多出色的APM框架,例如Pinpoint、SkyWalking等。

  而SpringCloud官网也集成了一套这样的系统:Spring Cloud Sleuth,结合Zipkin。

  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服务来响应用户的请求;

  

如何才能实现跟踪呢?

  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。

  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.coloradmin.cn/o/155601.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分布式助力光伏太阳能规模化发展解决方案

行业背景 光伏太阳能作为一种清洁环保的能源,得到各种开发利用,光伏太阳能电池板是其中的重点研究对象,其质量是影响太阳能电池发电效率的主要因素,所以对电池板表面质量的检测是生产中一个重要环节。随着工业的发展,太阳能电池板…

198:vue+openlayers 解决drawend后不能获取当前feature的方法

第198个 点击查看专栏目录 本示例的目的是介绍如何在vue+openlayers项目中绘制矩形,drawend触发事件,要获取到当前绘制的feature的信息。drawend触发的时刻,add feature to the source or collection 这个变化还没有发生,所以用source.getFeatures()是获取不到最新数据的。可…

OpenStack 认证Api

在调用OpenStack的Api或者其它组建的Api时都需要进行 OpenStack 认证,在这里记录一下如何调用OpenStack 认证接口或者token 和给其它接口增加token的方式一. 调用OpenStack auth接口接口地址:http://ip:5000/v3/auth/tokens参数:{"auth&…

特色风情小镇行业发展动态及市场需求前景分析

2023-2029年中国特色风情小镇行业发展动态及市场需求前景报告报告编号:1691653免费目录下载:http://www.cninfo360.com/yjbg/qthy/qt/20230110/1691653.html本报告著作权归博研咨询所有,未经书面许可,任何组织和个人不得以任何形式…

结构体内存对齐与结构体位段:学习笔记8

目录 一.结构体基础知识 1. 结构体的特殊声明 2. 结构的自引用 3.结构体变量的定义和初始化 二.结构体内存对齐 1.关键概念: 2.计算示例 3.嵌套结构体的内存计算 4.结构体内存对齐的意义 5.定义结构体时的注意事项 6.修改默认对齐数 附:关…

【PWA学习】5. 使用 Notification API 来进行消息提醒

引言 在上一节, 介绍了如何使用 Push API 进行服务端消息推送。提到 Push 就不得不说与其联系紧密的另一个 API——Notification API。它让我们可以在“网站外”显示消息提示: 消息推送示例即使当你切换到其他 Tab,也可以通过提醒交互来快速让用户回到你…

webviz安装,docker安装可正常使用与Foxglove Studio

Foxglove Studio Foxglove Studio与webviz使用起来非常类似 去可以直接使用web也可以下载安装包 Foxglove Studio不提供源码 安装包下载地

linux cgroup、kubernetes limit

linux cgroup、kubernetes limit 1.cgroups 简介 cgroups,其名称源自控制组群(control groups)的缩写,是内核的一个特性,用于限制、记录和隔离一组进程的资源使用(CPU、内存、磁盘 I/O、网络等&#xff0…

JSP——分页查询

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:JAVA开发者…

Homekit智能家居DIY产品一智能面板开关

触摸开关,即通过触摸方式控制的墙壁开关,其感官场景如同我们的触屏手机,只需手指轻轻一点即可达到控制电器的目的,随着人们生活品质的提高,触摸开关将逐渐将换代传统机械按键开关。 触摸开关控制原理 触摸开关我们把…

【广度优先搜索遍历 BFS】单词接龙

一、题目描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk&#xff1a; - 每一对相邻的单词只差一个字母。 - 对于 1 < i < k 时&#xff0c;每个 si 都在 wordList 中。注意…

全面详解Java垃圾回收器

一&#xff1a;什么是垃圾回收 Java 方法栈、本地方法栈随着方法结束或者线程结束&#xff0c;堆中的对象是用完&#xff0c;都会进行回收内存&#xff0c;所以这些区域的内存分配和回收都具备确定性&#xff0c;不需要额外考虑回收的问题。而堆和方法区存储的对象可能只有在运…

Ad5761r GD32 STM32 驱动设计

MCU采用GD32,GD32基本上和STM32一样,针对ad5761r的时序操作是完全相同的.软、硬件设计已经再产品设计中实际使用。本文章提供参考硬件设计&#xff0c;以及对应的源代码&#xff0c;具体可以作为实际项目的参考设计AD5761R是一款单通道、16位串行输入、电压输出DAC。该器件采用…

网工进阶之路-锐捷NAT网络地址转换实验 ----尚文网络奎哥

实验拓扑&#xff1a;实验需求&#xff1a; 1&#xff1a;方框内设备为内网设备&#xff0c;方框外是外网设备&#xff0c;内网网段为192.168.1.0/24&#xff0c;外网路由器互联网段为100.1.1.0/24&#xff0c;外网PC网段为200.1.1.0/24 2&#xff1a;希望使用各种NAT实现内网…

2023年海外优青项目申报指南及政策解读

海外优青项目申报&#xff0c;一直备受海外优秀青年学者&#xff08;包括博士后研究人员&#xff09;关注。知识人网小编现将国家自然科学基金委员会公布的2023年申报指南全文摘录&#xff0c;并和往年加以对比进行政策解读&#xff0c;以飨读者。自2021年起&#xff0c;国家自…

【面试题】说说你对发布订阅、观察者模式的理解?区别?

大厂面试题分享 面试题库前端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★地址&#xff1a;前端面试题库一、观察者模式观察者模式定义了对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都将得到…

Elasticsearch-高级搜索(拼音|首字母|简繁|二级搜索)

需求&#xff1a; 中文搜索、英文搜索、中英混搜全拼搜索、首字母搜索、中文全拼、中文首字母混搜简繁搜索二级搜索&#xff08;对第一次搜索结果&#xff0c;再进行搜索&#xff09;一、ES相关插件 IK分词&#xff1a; GitHub - medcl/elasticsearch-analysis-ik: The IK A…

JsonWebToken远程代码执行漏洞(CVE-2022-23529)

漏洞描述 JsonWebToken 是一个用于创建、签名和验证 JSON Web Token开源库。node-jsonwebtoken是node.js 下 JsonWebToken 的实现。 在JsonWebToken < 8.5.1版本中由于jwt.verify()方法未对用户输入的secretOrPublicKey参数进行有效的检查。如果攻击者能够控制secretOrPub…

【docker12】docker复杂安装

docker复杂安装 之前是单机版&#xff0c;自娱自乐还是不错滴&#xff0c;但是如果是生产开发环境中是需要复杂集群安装的 1.安装mysql主从复制 1.1主从复制原理&#xff08;记得补&#xff09; 1.2主从搭建步骤 新建主服务器容器实例3307 命令&#xff1a; docker run -d …

Unity 实现一个特定动画状态切换树

前言 今天在工作中接到一需求,要求人物摆在不同的9个格子上,在哪个格子上,就走哪个格子动画播放逻辑; 打个比方:第一个格子上有台电脑,我将角色放上去,角色就玩电脑,每播完一次动画,就根据概率判断是否需要去喝水,最终实现的效果,就是将角色放上去,并且随机时间进行喝水;第二个…