文章目录

  • 一、什么是链路追踪?为什么要实现链路追踪的需求?
  • 二、SkyWalking简介
  • 三、SkyWalking架构图



SkyWalking实现服务链路追踪

一、什么是链路追踪?为什么要实现链路追踪的需求?

随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求就构成了一个网状的调用链。在整个调用链中,链路上任何一个节点服务出现异常或者网络超时,都会导致接口调用失败,影响整个请求的处理结果和系统的稳定性。

微服务特点及常见问题:

  • 根据业务的划分,服务被拆分成多个模块,且各模块对外暴露的接口,可能需要多个服务协同才能完成接口功能;
  • 随着业务的不断扩张,服务间相互调用的关系会越来越复杂;
  • 性能分析:一个服务依赖很多服务,被依赖的服务也依赖了其他服务。如果某个接口耗时突然变长,那未必是直接调用的下游服务慢了,也可能是下游的下游服务慢了造成的,如何快速定位耗时变长的根本原因呢?
  • 链路梳理:需求迭代很快,系统之间调用关系变化频繁,靠人工是很难梳理清楚系统之间的调用关系(链路拓扑图)。

面对以上情况,我们就需要一些可以帮助我们理解系统行为、分析系统性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。所以我们要实现调用链路可追踪的需求。

skywalking本地启动java agent skywalking导致服务调用慢_微服务

二、SkyWalking简介

Apache SkyWalking 是一个可观测性分析平台(Observability Analysis Platform,简称OAP)和 应用程序性能监控工具(Application Performance Monitoring,简称APM),它是基于容器以及分布式系统而设计的链路追踪工具。提供了分布式链路追踪、服务网格(Istio:Service Mesh)遥测分析、度量聚合、服务性能指标分析、服务间依赖关系分析等可视化一体化解决方案。SkyWalking用于从服务端收集、分析、度量聚合成可视化的监控数据,并为我们提供了简便的UI界面来清晰地观测分布式系统的数据指标。通过探针自动收集所需的指标,并进行分布式追踪,具有无代码嵌入,支持众多中间件,agent种类全面,性能消耗低等优点。

三、SkyWalking架构图

SkyWalking 系统在逻辑上分为四部分:探针(skywalking-agent.jar,客户端)、平台后端(OAP,服务端)、存储(MySQL、ES,服务端)、前端展示界面(WebUI,服务端)。

skywalking本地启动java agent skywalking导致服务调用慢_链路追踪_02

  • 探针:表示集成到目标系统中的代理,运行在各个服务的实例中。其作用是负责收集服务的 Tracing(链路追踪) 、Metrics(性能指标) 等数据。在Java中是通过字节码植入、无侵入式的收集,并通过 HTTP 或 gRPC 方式把收集的数据上报到平台后端Collector收集器。
  • 平台后端:OAP是一个支持集群模式运行的后台,它负责接收(Collector收集器)探针上报的数据,然后对数据进行分析、聚合、计算后将数据进行存储,并且还提供一些查询API进行数据的查询。
  • 存储:数据持久化存储系统,默认是采用 H2,是内存存储,重启服务则数据丢失。实战场景下建议采用ElasticSearch。
  • 用户界面:SkyWalking的可视化观测界面,UI非常炫酷强大,提供了一些图形化界面展示对应的跟踪数据、指标数据等等。

说明: SkyWalking 整体架构的思想,主要就是通过收集各种格式的数据进行存储、然后展示。其核心是数据分析和度量的存储平台,通过 HTTP 或 gRPC 方式向 SkyWalking Collecter 提交分析和度量数据,SkyWalking Collector 对数据进行分析和聚合,存储到 Elasticsearch等持久化设备,最后通过 SkyWalking UI 的可视化界面对最终结果进行查看。所以搭建 Skywalking 服务我们需要关注的是 SkyWalking Collector(OAP服务)、SkyWalking UI(前端服务)和 存储设备。

SkyWalking 优势如下:

多种监控手段,语言探针和服务网格(Service Mesh);

  • 轻量高效,不需要大数据;
  • 多语言探针,Java、Node.js等;
  • 模块化,UI、存储、集群管理多种机制可选;
  • 支持告警、支持组件较多;
  • 优秀的可视化方案;
  • 探针性能优秀。有网友对Pinpoint和Skywalking进行过测试,由于Pinpoint收集的数据过多,所以对性能损耗较大,而Skywalking探针性能十分出色;
  • skywalking支持Dubbo,SpringCloud,SpringBoot集成,代码无侵入,通信方式采用gRPC,性能较好,支持告警,支持JVM监控,支持全局调用统计等,功能较完善。

更多内容可以参考官方文档:
SkyWalking 文档中文版(社区提供)Apache SkyWalking 官方文档