1、什么是APM

APM (应用性能管理) - Application Performance Management & Monitoring
在信息科学和系统控制领域,APM致力于监控和管理应用软件性能和可用性。
通过监测和诊断复杂应用程序的性能问题,来保证软件应用程序的良好运行(预期的服务)。

应用性能管理主要指对企业的关键业务应用进行监测、优化,提高企业应用的可靠性和质量,保证用户得到良好的服务,降低IT总拥有成本(TCO)。

一个企业的关键业务应用的性能强大,可以提高竞争力,并取得商业成功,因此,加强应用性能管理(APM)可以产生巨大商业利益。
(京东VS淘宝VS腾讯商城)

APM的覆盖范围包括:终端用户体验,应用架构映射,应用事务的分析,深度应用诊断,和数据分析。

现代APM体系,基本都是参考Google的Dapper(大规模分布式系统的跟踪系统)的体系来做的。
通过跟踪请求的处理过程,来对应用系统在前后端处理、服务端调用的性能消耗进行跟踪。
关于Dapper的介绍可以看这个链接:http://bigbully.github.io/Dapper-translation/

2、apm的主要功能

1)监测企业关键应用性能

过去,企业的IT部门在测量系统性能时,一般重点测量为最终用户提供服务的硬件组件的利用率,如CPU利用率以及通过网络传输的字节数。虽然这种方法也提供了一些宝贵的信息,但却忽视了最重要的因素--最终用户的响应时间。现在通过事务处理过程监测、模拟等手段可真实测量用户响应时间,此外还可以报告谁正在使用某一应用、该应用的使用频率以及用户所进行的事务处理过程是否成功完成。

2)快速定位应用系统性能故障

通过对应用系统各种组件(数据库、中间件)的监测,迅速定位系统故障,如发生Oracle数据库死锁等问题。

3)优化系统性能

精确分析系统各个组件占用系统资源情况,中间件、数据库执行效率,根据应用系统性能要求提出专家建议,保证应用在整个寿命周期内使用的系统资源要求最少,节约TCO。

新一代APM:让整个IT团队参与应用性能监控。
好的APM可以让IT组织中原本孤立的各个方面集中在一起,比如自动生成准确的业务应用系统组件关系视图、关系视图实时更新、准确掌握应用访问逻辑关系等。APM工具可以帮助那些原本一直局限于监控自身领域的管理员,使他们成长为理解应用及其支持基础架构的更有战略价值的性能管理专业人员。

3、常见apm产品介绍

APM产品包括商业产品、开源产品,琳琅满目,非常多,这里就介绍几个常见的,应用比较广泛,广受好评的。

1)Pinpoint

github地址:https://github.com/naver/pinpoint
Pinpoint is an open source APM (Application Performance Management) tool for large-scale distributed systems written in Java.

Pinpoint是一个用Java编写的大规模分布式开源APM工具。
这个是一个韩国团队开源出来的,通过JavaAgent的机制来做字节码代码植入,实现加入traceid和抓取性能数据的目的。
NewRelic、Oneapm之类的工具在java平台上的性能分析也是类似的机制。

文档:
http://www.herohuang.com/2017/03/01/apm-pinpoint/

2)SkyWalking

github地址:https://github.com/wu-sheng/sky-walking
wu-sheng/sky-walking
这是国内一位叫吴晟的兄弟开源的,也是一个对JAVA分布式应用程序集群的业务运行情况进行追踪、告警和分析的系统,在github上也有600+颗星了。
功能相对pinpoint还是稍弱一些,插件还没那么丰富。

3)Zipkin

官网:http://zipkin.io/
OpenZipkin · A distributed tracing system
openzipkin/zipkin:GitHub:https://github.com/openzipkin/zipkin

这个是twitter开源出来的,也是参考Dapper的体系来做的。
Zipkin的java应用端是通过一个叫Brave的组件来实现对应用内部的性能分析数据采集。

Brave的github地址:https://github.com/openzipkin/brave
这个组件通过实现一系列的java拦截器,来做到对http/servlet请求、数据库访问的调用过程跟踪。
然后通过在spring之类的配置文件里加入这些拦截器,完成对java应用的性能数据采集。

在线安装
wget -O zipkin.jar 'https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec'
java -jar zipkin.jar

java应用:https://github.com/spring-cloud/spring-cloud-sleuth
python支持:https://github.com/Yelp/py_zipkin

4)CAT (大众点评)

github地址:https://github.com/dianping/cat
GitHub - dianping/cat: Central Application Tracking
这个是大众点评开源出来的,实现的功能也还是蛮丰富的,国内也有一些公司在用了。
不过他实现跟踪的手段,是要在代码里硬编码写一些“埋点”,也就是侵入式的。
这样做有利有弊,好处是可以在自己需要的地方加埋点,比较有针对性;
坏处是必须改动现有系统,很多开发团队不愿意。

5)Xhprof/Xhgui

这两个工具的组合,是针对PHP应用提供APM能力的工具,也是非侵入式的。
Xhprof github地址:https://github.com/preinheimer/xhprof (Facebook开源出来的)

GitHub - preinheimer/xhprof: XHGUI is a GUI for the XHProf PHP extension, using a database backend, and pretty graphs to make it easy to use and interpret.

Xhgui github地址:https://github.com/perftools/xhgui
GitHub - perftools/xhgui: A graphical interface for XHProf data built on MongoDB

小结:

前面三个工具里面,推荐的顺序依次是: Pinpoint -> Zipkin -> CAT 。
原因很简单,就是这三个工具对于程序源代码和配置文件的侵入性,是依次递增的:

Pinpoint:基本不用修改源码和配置文件,只要在启动命令里指定java agent参数即可,对于运维人员来讲最为方便;
Zipkin:需要对Spring、web.xml之类的配置文件做修改,相对麻烦一些;
CAT:因为需要修改源码设置埋点,因此基本不太可能由运维人员单独完成,而必须由开发人员的深度参与了,而很多开发人员是比较抗拒在代码中加入这些东西滴;

APM简介的更多相关文章

  1. APM 原理与框架选型

    发些存稿:) 0. APM简介 随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂: 不同的服务可能由不同的团队开发.甚至可能使用不同的编程语言来实现 服务有可能 ...

  2. webrtc中APM(AudioProcessing module)的使用2

    这个其实就是从Audio_processing.h中拿出来的. APM should be placed in the signal chain as close to the audio hardw ...

  3. Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) JAVA日志的前世今生 .NET MVC采用SignalR更新在线用户数 C#多线程编程系列(五)- 使用任务并行库 C#多线程编程系列(三)- 线程同步 C#多线程编程系列(二)- 线程基础 C#多线程编程系列(一)- 简介

    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了) 一.前言 由于本篇文章较长,所以下面给出内容目录方便跳转阅读,当然也可以用博客页面最右侧的文章目录导航栏进行跳转查阅. 一.前言 ...

  4. sharding-jdbc源码学习(一)简介

    背景 对于大型的互联网应用来说,数据库单表的记录行数可能达到千万级甚至是亿级,并且数据库面临着极高的并发访问.采用Master-Slave复制模式的MySQL架构,只能够对数据库的读进行扩展,而对数据 ...

  5. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

  6. 跟我学SpringCloud | 第十六篇:微服务利剑之APM平台(二)Pinpoint

    目录 SpringCloud系列教程 | 第十六篇:微服务利剑之APM平台(二)Pinpoint 1. Pinpoint概述 2. Pinpoint主要特性 3. Pinpoint优势 4. Pinp ...

  7. 【APM】Pinpoint 安装部署(一)

    Pinpoint简介 Pinpoint是用Java / PHP编写的大规模分布式系统的APM(应用程序性能管理)工具.受Dapper的启发,Pinpoint提供了一种解决方案,可通过跟踪跨分布式应用程 ...

  8. 全链路跟踪skywalking简介

    该文章主要包括以下内容: skywalking的简介 skywalking的使用,支持多种调用中间件(httpclent,springmvc,dubbo,mysql等等) skywalking的tra ...

  9. 小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介

    笔记 ============================================= SpringCloud课程笔记.txt 第一章 课程介绍和学习路线 1.微服务架构SpringClou ...

随机推荐

  1. 【来龙去脉系列】RSA算法原理

    如果你问我,哪一种算法最重要? 我可能会回答"公钥加密算法". 因为它是计算机通信安全的基石,保证了加密数据不会被破解.你可以想象一下,信用卡交易被破解的后果. 进入正题之前,我先 ...

  2. javascript实现 滚动条滚动 加载内容

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. oracle 的启动与连接

    1. Oracle的启动 oracle的服务如下图所示: 启动oracle有两个重要的服务(如上图标识处): l OracleOraDb11g_home1TNSListener:监听服务,主要用于客户 ...

  4. Android(java)学习笔记89:Bundle和Intent类使用和交互

    1. Bundle 和 Intent:    Bundle只是一个信息的载体 将内部的内容以键值对组织 ,Intent负责Activity之间的交互自己是带有一个Bundle的.Intent.putE ...

  5. 张量 (tensor) 是什么?

    对于大部分已经熟练的数学和物理工作者, 这实在是一个极为基础的问题. 但这个问题在我刚接触张量时也困扰了我很久. 张量的那么多定义, 究竟哪些是对的? (显然都是对的. ) 它们的关系是什么? 我尽可 ...

  6. 自建ssr(谷歌云免费试用一年)

    近期我一个朋友的VPN到期了,他也不想再去续费,同时发现谷歌云第一年申请时是免费的,所以他就自己搭建了一个自己专属的VPN 以下是他的搭建教程:  本教程难点在于申请免费试用资格 谷歌云+ssr搭建免 ...

  7. Repeater控件里面取不到CheckBox的值

    然后在后台需要取到,选中了那些 然后在后台怎么取也取不到,当时就纳闷了,然后开始怀疑自己的代码是不是错了,经过仔细一看,我的妈呀,加载事件了差一句话......整个人都不好了 加载事件差这句话不行,补 ...

  8. C#自减运算符

    一.C#自减运算符(--) 自减运算符(--)是将操作数减1. 1. 前缀自减运算符 前缀自减运算符是“先减1,后使用”.它的运算结果是操作数减1之后的值. 例如: --x;  // 前缀自减运算符 ...

  9. Math类小结

    package com.swift; public class MathDemo { public static void main(String[] args) { // TODO Auto-gen ...

  10. Linux分享笔记:查看帮助命令 & 常用系统工作命令

    在执行命令时,为了防止出现权限不足的问题,在登陆Linux系统时,要点击普通用户名下的 “Not listed?” 用root管理员身份登陆. [1] 执行查看帮助命令 man 这条命令用来查看帮助文 ...