前几天从github上看最近比较火的项目,发现了skywalking,就进行了些了解,发现这个领域自己目前知之甚少,打算通过对源码的分析深入了解一下分布式追踪。首先从对skywalking介绍开始。
目录
- 一、简介
- 二、整体架构
- 三、源码下载
- 四、系统搭建
- 五、补充知识
一、简介
skywalking是一个分布式追踪系统 , 它可以帮助我们看到一个请求经过的所有调用链路,比如中间调用了多少个微服务,访问了多少次数据库,redis,mq 等中间件。以前,系统间调用没有那么复杂,系统间调用也比较简单,当微服务开始盛行的时候,系统间的调用关系就变得非常复杂了,很少有人能够说得清各个系统间的调用关系,那么分布式追踪系统便应运而生。分布式追踪系统不仅可以展示出调用链路,还可以提供服务监控,比如可以监控哪些服务调用失败了,服务被访问了多少次。
其实要实现分布式追踪也很简单,只要在设计系统的时候, 每经过一次请求,每调用一次中间件,都把对应日志存起来,,然后提供分析服务及展示页面,也可以达到同样的效果。但是这样做的弊端也很明显:对代码侵入性强 , 每一个业务系统都需要在业务代码里去加上对应的日志,如果日志漏了,或者不符合格式要求,那么就可能导致展示信息有误。
为了避免这个问题,skywalking使用 agent 形式接入业务系统,这样就不需要在业务系统里添加任何日志代码,也能记录到对应的调用信息。
分布式追踪系统概述及主流开源系统对比:https://zhuanlan.zhihu.com/p/71024024
分布式追踪系统有很多,至于为什么选择skywaking,大家可以看下上面的链接。选择skywaking有以下优点:国人开发,资料相对丰富,apache项目,对业务代码侵入性低,另外skywaking使用微内核开发,自己也想了解一下何为微内核。
名词解释
OAP:全称Observability Analysis Platform,可观测性分析平台。
APM:全称Application Performance Management,应用性能管理
二、整体架构
本小节内容来自:https://skywalking.apache.org/zh/2020-04-19-skywalking-quick-start/ 和
https://github.com/SkyAPM/document-cn-translation-of-skywalking/blob/master/docs/zh/8.0.0/concepts-and-designs/backend-overview.md
整个架构,分成上、下、左、右四部分:
- 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
- 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。
- 左部分 SkyWalking UI :负责提供控台,查看链路等等。
其中agent可以收集两种数据:链路追踪(tracing)和度量指标(metrics),官网对这两个的解释如下:
OAP 从多种数据源接收数据,,这些数据分为两大类,,链路追踪和度量指标 。
- 链路追踪:包括 SkyWalking 原生数据格式,Zipkin V1 和 V2 数据格式,以及 Jaeger 数据格式。
- 度量指标.:SkyWalking 集成了服务网格平台,如 Istio, Envoy 和 Linkerd,并在数据面板和控制面板进行观测。此外,SkyWalking 原生代理还可以运行在度量模式,这极大提升了性能。OAP中的度量指标是6.x版本中全新的功能。通过连接的节点之间的度量数据,构建分布式系统的观测数据,且不需要追踪数据。度量数据在OAP集群中以流的模式进行聚合。
skywalking的架构可以简化为下图:
三、源码下载
大家可以从github上直接下载就可以了,网上有很多关于下载搭建系统的资料。
这里想说的是,网上的资料比较旧,一般是V6或者V8的,但是现在OAP最新版本已经V9.3.0了。
在V6版本的时候,agent和OAP是在一个分支上的,但是在最新版本里面agent已经独立出去了,如果是java版本的,agent项目名称是skywalking-java。skywalking也提供了其他语言版本的agent,大家可以看下面的网页,该网页提供了所有skywalking下载的内容。
https://skywalking.apache.org/downloads/
四、系统搭建
关于skywalking搭建的内容,网上有很多,大家自行网上搜索吧,不再详细介绍了。
五、补充知识
在分析skywalking之前,大家需要了解java agent知识。
SkyWalking Agent 实现原理:https://blog.csdn.net/lewee0215/article/details/109636349