调用链监控 - Tracing - APM

yuan 1年前 ⋅ 71 阅读

微服务应用与单块应用完全不同,一个微服务系统少则有几十个微服务组成,多则可能有上百个服务。调用链监控在微服务监控领域被证明是有效的手段,它可以实时监控服务调用性能和跟踪服务依赖关系,帮助快速定位和排障问题。互联网企业有三款主流的调用链监控产品,对于调用链监控,除了调用链监控,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采样率

在进行服务调用时,必须将跟踪ID和跨度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进行监控,就需要根据企业所使用的技术栈,开发定制化的监控插件。

在这里插入图片描述

微服务应用的复杂性导致了调用链监控的重要性,能帮助快速排查服务问题和减少业务损失。调用链监控产品如Skywalking能提供无侵入式埋点和厂商支持,但也存在使用门槛较高、定制自研能力要求高等不足。除调用链监控外,APM报表能力也是重要因素。

参考链接:https://blog.csdn.net/ryanlll3/article/details/113204376?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-113204376-blog-126734397.235%5Ev39%5Epc_relevant_anti_vip&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-113204376-blog-126734397.235%5Ev39%5Epc_relevant_anti_vip&utm_relevant_index=10

关于纵目

江苏纵目信息科技有限公司是一家专注于运维监控软件产品研发与销售的高科技企业。覆盖全链路应用性能监控、IT基础设施监控、物联网数据采集数据观测等场景,基于Skywalking、Zabbix、ThingsBoard等开源体系构建了ArgusAPM、ArgusOMS、ZeusIoT等产品,致力于帮助各行业客户构建集聚可观测性的统一运维平台、物联网大数据平台。

  点赞 0   收藏 0
  • yuan
    共发布32篇文章 获得1个收藏
全部评论: 0