当前位置: 代码迷 >> 综合 >> 调用链监控 - Tracing - APM
  详细解决方案

调用链监控 - Tracing - APM

热度:53   发布时间:2024-01-06 05:26:35.0

调用链监控 - Tracing - APM

  • 调用链监控原理和相关概念
    • 调用在分布式系统中的流程简述实例
    • 相关概念
  • CAT vs Zipkin vs Skywalking
    • 埋点方式简述
    • APM功能简述
    • 个人推荐

调用链监控原理和相关概念

微服务应用与单块应用完全不同,一个微服务系统少则有几十个微服务组成,多则可能有上百个服务。比如BAT级别的互联网公司,一般都超过上百个服务,服务之间的依赖关系错综复杂,如果没有有效的监控手段,那么出现问题很难快速排查,最终会导致业务损失。

在微服务监控领域,业界的实践证明,调用链监控 - tracing 是比较有效的手段,它不仅可以实时监控服务调用性能,也可以实时跟踪服务的依赖关系,出现问题的时候,通过调用链监控,可以帮助我们快速定位问题和排障,可以说微服务离不开调用链监控。

调用在分布式系统中的流程简述实例

在这里插入图片描述

调用链监控的核心原理并不复杂,下图简单描述的监控的原理和概念。

如图,假设有3个服务,service1, service2, service3. 他们之间是有调用关系的。

当外部请求进来的时候:

  1. 用户请求先到service1, service1调用redis缓存(红色小方块),redis返回service1数据。
  2. service1调用service2,service2调用mysql,mysql返回service2数据。
  3. service2调用service3, service3返回给service2
  4. service2返回给service1
  5. service1返回给用户

相关概念

调用链监控,在调用的入口和调用其他服务的时候会生成一个数据结构,称为span。

span上附着信息:上图中小方块儿。黄色,蓝色。

  • tid; 一次调用只有一个tid
  • sid; 一个方法调用踪迹及顺序
  • pid; 当前span的父span的sid,用来返回数据到调用发起方

这样就可以把调用树绘制出来。

概念 含义
Trace 一次分布式调用的链路踪迹
Span 一个方法(局部或远程)调用踪迹
Annotation 附着在span上的日志信息
Sampling 采样率

在服务调用的时候,需要把trace id,span id的信息向“被调用方”传递,这样才可以在被调用方建立正确的span。

Annotation; 在Span生成的时候,可以附加一些日志信息,比如调用的HTTP请求端点,日志信息在进入调用链系统之后,可以查询到这些日志。

采样率;大型业务系统的请求很多,会生成很多trace,这样就会导致trace的数据量会很大,因此调用链系统的存储消耗会非常大,所以并不需要把所有的trace都存储起来。用一定的采样率,来收集trace。 比如,采样率 10%,10个trace只存储一个。这样会减少对后端存储的压力。最后统计出来,分析系统性能的效果是一样的。

CAT vs Zipkin vs Skywalking

以下是互联网企业,三款主流的调用链监控产品。

在这里插入图片描述

埋点方式简述

侵入式(引入或继承了别的包或框架)
从字面意思理解,就是业务代码里已经嵌入了别的代码,这些代码你引入过的框架,也可能是你通过接口继承得来的(比如:java中的继承),这样你就可以拥有侵入代码的一些功能。所以我们就称这段代码是侵入式代码。
优点:引入额外功能
缺点:需要改代码

非侵入式(没有依赖)
正好与侵入式相反,你的代码没有引入别的包或框架,完完全全是自主开发。
优点:代码可复用,方便移植。
缺点:服务调用过程中的字节码被改动,导致消息中间件无法正确接收。需要升级某些消息中间件。

侵入式让用户代码产生对框架的依赖,这些代码不能在框架外使用,不利于代码的复用。但侵入式可以使用户跟框架更好的结合,更容易更充分的利用框架提供的功能。
非侵入式的代码则没有过多的依赖,可以很方便的迁移到其他地方。但是与用户代码互动的方式可能就比较复杂。

在这里插入图片描述

APM功能简述

APM:性能报表达到了应用性能管理的维度与标准。Zipkin由于报表不够丰富而不被认为是APM,是纯调用链监控工具。但是不妨碍大厂在它基础上做定制开发,实现更多功能。在这里插入图片描述
亮点:

  • CAT:一线企业落地产品,报表丰富是最大亮点。
  • Zipkin: 国外社区生态建设最好,文档和后端丰富。
  • Skywalking: 无侵入式埋点。

不足:

  • CAT: 用户体验一般,主要由后端程序员开发,文档和社区经营投入不足。
  • Zipkin: 单纯的调用链监控工具,APM报表能力欠缺。
  • Skywalking: 开源时间不长,升级较为频繁,API不够稳定,文档一般,社区仅限国内。

个人推荐

对于调用链监控,除了调用链监控,APM报表能力非常重要,可以分析定位很多系统性能问题。

除非有较强的定制开发能力,否则不推荐Zipkin。
CAT是国内一线大规模落地的产品,虽然有一些不足,但是对大规模企业应用,CAT是推荐的首选调用链监控产品。

Skywalking是调用链监控的新星,无侵入式埋点是优势,可是让框架监控代码与业务代码完全分离,也可以通过插件机制标准化常用组件的监控。

无侵入的不足时使用门槛略高,也会失去侵入式埋点的灵活性,skywalking在国内社区较活跃,产品升级完善快,skywalking也是可以试点使用和关注的产品。

调用链监控门槛相对较高,企业要完全用好调用链监控,除了应用能力,还要有一定的定制自研能力,比如使用skywalking,需要根据企业实际技术栈的使用情况,定制开发一些监控的plugin。

在这里插入图片描述