区块链技术博客
www.b2bchain.cn

Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪求职学习资料

本文介绍了Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪求职学习资料,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

前言

在 30系统监控中心 一文中,我们采用搭建Spring Boot Admin监控中心的方式,来对服务的微服务进行资源方面的监控,但是当线上程序方面发生错误和异常时,难道我们要自己在本地跑代码来挨个debug来定位吗?这显然是费时费力的。

所以,今天我们需要在景停系统中,加入一个新的功能,就是以微服务架构下对请求的链路追踪,让程序去自动定位异常点。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

导航图

按照我话痨的风格,本篇依旧是理论 + 实践相结合,请读者自行选择。

一、为什么会有链路追踪?

一个请求会调用多个服务,整个请求就会形成一个调用链,所以我们叫链路追踪!
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

调用链路图

需求问题:

  • 1、微服务是多模块的。

    要知道,微服务 架构其实是一个 分布式 的架构,按照业务划分成了多个服务模块,当模块分布式部署后就会 数量众多,此时业务就会更复杂,此时系统出现了错误或异常,是 难定位问题的。

  • 2、请求逻辑是复杂的。

    比如一个 请求 需要 调用多个 微服务才能完成整个业务的闭环,而内部服务的代码逻辑和业务逻辑比较复杂,那么当某个服务出现了问题时,难确定 哪个服务出问题。

解决方案:

  • 快速定位

    基于这些问题,如果我们加上了 分布式链路追踪,去跟踪一个请求都有哪些服务参与其中,知道了 参与顺序 是怎样的。这样就知道了每个请求的详细经过,即使出了问题也能 快速定位 哪一块的问题。

二、链路追踪的核心

2.1.APM 特性

全称是 Application Performance Management(应用性能管理),特指关注于系统内部执行、系统间调用的性能瓶颈分析方式。

目前市面上开源的APM 软件主要有CAT、Zipkin、Pinpoint、SkyWalking等。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

各类APM组件

2.2.各类追踪组件实现原理

整理目前几个主流的组件,如下:

类别 实现方式 来自于
Zipkin 拦截请求,发送(HTTP,MQ)数据至zipkin服务端 Twitter
Sleuth 借用了Google Dapper论文的设计原理 SpringCloud
Cat 代码埋点(采用拦截器,注解,过滤器等) 美团(大众点评)
Pinpoint java探针,探针采集数据粒度细,性能损耗大 ” 棒子 “团队
SkyWalking java探针,通过字节码注入的方式,实现无侵入。探针采集数据粒度粗,性能优秀 吴晟(华为开发者)

2.3.组件的选择

既然这么多个链路追踪的组件,通常开发中,采用哪个呢?

  • 1.SpringCloud Alibaba 技术栈中并没有提供自己的链路追踪技术。

  • 2.使用 Sleuth+Zipkin 来做链路追踪解决方案。
    (sleuth的作用是在系统中自动埋点并把数据发送给zipkin,zipkin的作用是存储这些数据并做展示)

  • 3.SkyWalking 具有完整的 APM 特性,具有追踪、监控、诊断分布式系统,对代码无侵入。

通常,小项目可以选择了 SkyWalking 直接无侵入实现,也可以采用 Sleuth + Zipkin 结合来实现链路追踪和展示,企业级的也会选CAT方案。

综合考虑,本系列实战中选择了 SkyWalking 来实现全链路监控

三、为什么采用 SkyWalking 呢?

SkyWalking 是国内优秀开源项目,对国内生态兼容的更好,通过 字节码注入 这种无侵入的方式来监控系统,降低系统代码对第三方工具的耦合。

3.1.SkyWalking 的组成

SkyWalking 整个架构,分成探针、平台后端、存储和用户界面四部分,如下:

  • 1、 Agent:探针,作用就是收集链路信息,将数据格式化为 SkyWalking 适用的格式。通过 HTTP 或者 gRPC方式收集和发送数据到Skywalking Collector收集器。

  • 2、Collector :一个支持集群模式运行的后台,是链路数据收集器,作用就是对传来的数据进行整合、分析并落入相关的数据存储中,且提供查询功能。

  • 3、Storage:存储方式,支持以ElasticSearch、Mysql、TiDB、H2集群等作为存储介质进行数据存储。官方推荐ES。

  • 4、UI: Web可视化界面,用来展示落地的数据,查看链路信息。

H2是将数据存储在内存中,重启后数据丢失,官方推荐 ElasticSearch,新版本的skywalking 默认使用ES作为存储,需要先安装es 5.x版本。

3.2.SkyWalking 链路追踪流程图(*)

链路的追踪大体流程如下:

  • Agent 收集 Trace (跟踪)的数据。
  • Agent 发送 Trace 数据给 Collector收集器 。
  • Collector 接收 Trace 数据,进行聚合整理,分析统计。
  • Collector 存储 Trace 数据到对应的存储器,例如es,数据库等。

注意:Collector 接收到 TraceSegment 的数据,对应的类是 Protobuf 生成的。

为了便于理解,笔者手绘大体流程如下:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

链路追踪流程图

Collector 接收到 TraceSegment 数据后,会进行构建。

  • 构建成功,进行流式处理,最终存储到存储器( 例如,ES / H2 )
  • 构建失败,写入 Buffer 文件进行暂存。且后台线程,会定时读取 Buffer 文件,重新提交构建。

四、安装 SkyWalking 控制台

SkyWalking 跟sentinel一样,也可以说是,分为一个服务端,和多个客户端,服务端采用启动组件的形式,启动完毕得到一个监控的控制台页面。

4.1.下载控制台

skywalking地址:https://link.zhihu.com/?target=https%3A//github.com/apache/incubator-skywalking

或者采用加速的下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/

如图:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载zip

选择压缩包:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载压缩包

当前我这里是基于8.5.0 来搭建的,下载解压,放到自身盘符。

4.2.启动监控台

启动 Skywalking UI + Skywalking collector服务,本示例以单机版演示。

单机模式collector不支持集群部署,所以使用本地H2数据库来存储。

过程如下:
配置 webapp 目录下的 webapp.yml 文件,变更默认超时时间 10000,修改端口号如 server.port= 13800。
(因为默认的 8080 端口与默认的 sentinel-dashboard 端口冲突),如果超时,适当调大一些。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

修改端口号

前言

在 30系统监控中心 一文中,我们采用搭建Spring Boot Admin监控中心的方式,来对服务的微服务进行资源方面的监控,但是当线上程序方面发生错误和异常时,难道我们要自己在本地跑代码来挨个debug来定位吗?这显然是费时费力的。

所以,今天我们需要在景停系统中,加入一个新的功能,就是以微服务架构下对请求的链路追踪,让程序去自动定位异常点。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

导航图

按照我话痨的风格,本篇依旧是理论 + 实践相结合,请读者自行选择。

一、为什么会有链路追踪?

一个请求会调用多个服务,整个请求就会形成一个调用链,所以我们叫链路追踪!
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

调用链路图

需求问题:

  • 1、微服务是多模块的。

    要知道,微服务 架构其实是一个 分布式 的架构,按照业务划分成了多个服务模块,当模块分布式部署后就会 数量众多,此时业务就会更复杂,此时系统出现了错误或异常,是 难定位问题的。

  • 2、请求逻辑是复杂的。

    比如一个 请求 需要 调用多个 微服务才能完成整个业务的闭环,而内部服务的代码逻辑和业务逻辑比较复杂,那么当某个服务出现了问题时,难确定 哪个服务出问题。

解决方案:

  • 快速定位

    基于这些问题,如果我们加上了 分布式链路追踪,去跟踪一个请求都有哪些服务参与其中,知道了 参与顺序 是怎样的。这样就知道了每个请求的详细经过,即使出了问题也能 快速定位 哪一块的问题。

二、链路追踪的核心

2.1.APM 特性

全称是 Application Performance Management(应用性能管理),特指关注于系统内部执行、系统间调用的性能瓶颈分析方式。

目前市面上开源的APM 软件主要有CAT、Zipkin、Pinpoint、SkyWalking等。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

各类APM组件

2.2.各类追踪组件实现原理

整理目前几个主流的组件,如下:

类别 实现方式 来自于
Zipkin 拦截请求,发送(HTTP,MQ)数据至zipkin服务端 Twitter
Sleuth 借用了Google Dapper论文的设计原理 SpringCloud
Cat 代码埋点(采用拦截器,注解,过滤器等) 美团(大众点评)
Pinpoint java探针,探针采集数据粒度细,性能损耗大 ” 棒子 “团队
SkyWalking java探针,通过字节码注入的方式,实现无侵入。探针采集数据粒度粗,性能优秀 吴晟(华为开发者)

2.3.组件的选择

既然这么多个链路追踪的组件,通常开发中,采用哪个呢?

  • 1.SpringCloud Alibaba 技术栈中并没有提供自己的链路追踪技术。

  • 2.使用 Sleuth+Zipkin 来做链路追踪解决方案。
    (sleuth的作用是在系统中自动埋点并把数据发送给zipkin,zipkin的作用是存储这些数据并做展示)

  • 3.SkyWalking 具有完整的 APM 特性,具有追踪、监控、诊断分布式系统,对代码无侵入。

通常,小项目可以选择了 SkyWalking 直接无侵入实现,也可以采用 Sleuth + Zipkin 结合来实现链路追踪和展示,企业级的也会选CAT方案。

综合考虑,本系列实战中选择了 SkyWalking 来实现全链路监控

三、为什么采用 SkyWalking 呢?

SkyWalking 是国内优秀开源项目,对国内生态兼容的更好,通过 字节码注入 这种无侵入的方式来监控系统,降低系统代码对第三方工具的耦合。

3.1.SkyWalking 的组成

SkyWalking 整个架构,分成探针、平台后端、存储和用户界面四部分,如下:

  • 1、 Agent:探针,作用就是收集链路信息,将数据格式化为 SkyWalking 适用的格式。通过 HTTP 或者 gRPC方式收集和发送数据到Skywalking Collector收集器。

  • 2、Collector :一个支持集群模式运行的后台,是链路数据收集器,作用就是对传来的数据进行整合、分析并落入相关的数据存储中,且提供查询功能。

  • 3、Storage:存储方式,支持以ElasticSearch、Mysql、TiDB、H2集群等作为存储介质进行数据存储。官方推荐ES。

  • 4、UI: Web可视化界面,用来展示落地的数据,查看链路信息。

H2是将数据存储在内存中,重启后数据丢失,官方推荐 ElasticSearch,新版本的skywalking 默认使用ES作为存储,需要先安装es 5.x版本。

3.2.SkyWalking 链路追踪流程图(*)

链路的追踪大体流程如下:

  • Agent 收集 Trace (跟踪)的数据。
  • Agent 发送 Trace 数据给 Collector收集器 。
  • Collector 接收 Trace 数据,进行聚合整理,分析统计。
  • Collector 存储 Trace 数据到对应的存储器,例如es,数据库等。

注意:Collector 接收到 TraceSegment 的数据,对应的类是 Protobuf 生成的。

为了便于理解,笔者手绘大体流程如下:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

链路追踪流程图

Collector 接收到 TraceSegment 数据后,会进行构建。

  • 构建成功,进行流式处理,最终存储到存储器( 例如,ES / H2 )
  • 构建失败,写入 Buffer 文件进行暂存。且后台线程,会定时读取 Buffer 文件,重新提交构建。

四、安装 SkyWalking 控制台

SkyWalking 跟sentinel一样,也可以说是,分为一个服务端,和多个客户端,服务端采用启动组件的形式,启动完毕得到一个监控的控制台页面。

4.1.下载控制台

skywalking地址:https://link.zhihu.com/?target=https%3A//github.com/apache/incubator-skywalking

或者采用加速的下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/

如图:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载zip

选择压缩包:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载压缩包

当前我这里是基于8.5.0 来搭建的,下载解压,放到自身盘符。

4.2.启动监控台

启动 Skywalking UI + Skywalking collector服务,本示例以单机版演示。

单机模式collector不支持集群部署,所以使用本地H2数据库来存储。

过程如下:
配置 webapp 目录下的 webapp.yml 文件,变更默认超时时间 10000,修改端口号如 server.port= 13800。
(因为默认的 8080 端口与默认的 sentinel-dashboard 端口冲突),如果超时,适当调大一些。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

修改端口号

前言

在 30系统监控中心 一文中,我们采用搭建Spring Boot Admin监控中心的方式,来对服务的微服务进行资源方面的监控,但是当线上程序方面发生错误和异常时,难道我们要自己在本地跑代码来挨个debug来定位吗?这显然是费时费力的。

所以,今天我们需要在景停系统中,加入一个新的功能,就是以微服务架构下对请求的链路追踪,让程序去自动定位异常点。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

导航图

按照我话痨的风格,本篇依旧是理论 + 实践相结合,请读者自行选择。

一、为什么会有链路追踪?

一个请求会调用多个服务,整个请求就会形成一个调用链,所以我们叫链路追踪!
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

调用链路图

需求问题:

  • 1、微服务是多模块的。

    要知道,微服务 架构其实是一个 分布式 的架构,按照业务划分成了多个服务模块,当模块分布式部署后就会 数量众多,此时业务就会更复杂,此时系统出现了错误或异常,是 难定位问题的。

  • 2、请求逻辑是复杂的。

    比如一个 请求 需要 调用多个 微服务才能完成整个业务的闭环,而内部服务的代码逻辑和业务逻辑比较复杂,那么当某个服务出现了问题时,难确定 哪个服务出问题。

解决方案:

  • 快速定位

    基于这些问题,如果我们加上了 分布式链路追踪,去跟踪一个请求都有哪些服务参与其中,知道了 参与顺序 是怎样的。这样就知道了每个请求的详细经过,即使出了问题也能 快速定位 哪一块的问题。

二、链路追踪的核心

2.1.APM 特性

全称是 Application Performance Management(应用性能管理),特指关注于系统内部执行、系统间调用的性能瓶颈分析方式。

目前市面上开源的APM 软件主要有CAT、Zipkin、Pinpoint、SkyWalking等。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

各类APM组件

2.2.各类追踪组件实现原理

整理目前几个主流的组件,如下:

类别 实现方式 来自于
Zipkin 拦截请求,发送(HTTP,MQ)数据至zipkin服务端 Twitter
Sleuth 借用了Google Dapper论文的设计原理 SpringCloud
Cat 代码埋点(采用拦截器,注解,过滤器等) 美团(大众点评)
Pinpoint java探针,探针采集数据粒度细,性能损耗大 ” 棒子 “团队
SkyWalking java探针,通过字节码注入的方式,实现无侵入。探针采集数据粒度粗,性能优秀 吴晟(华为开发者)

2.3.组件的选择

既然这么多个链路追踪的组件,通常开发中,采用哪个呢?

  • 1.SpringCloud Alibaba 技术栈中并没有提供自己的链路追踪技术。

  • 2.使用 Sleuth+Zipkin 来做链路追踪解决方案。
    (sleuth的作用是在系统中自动埋点并把数据发送给zipkin,zipkin的作用是存储这些数据并做展示)

  • 3.SkyWalking 具有完整的 APM 特性,具有追踪、监控、诊断分布式系统,对代码无侵入。

通常,小项目可以选择了 SkyWalking 直接无侵入实现,也可以采用 Sleuth + Zipkin 结合来实现链路追踪和展示,企业级的也会选CAT方案。

综合考虑,本系列实战中选择了 SkyWalking 来实现全链路监控

三、为什么采用 SkyWalking 呢?

SkyWalking 是国内优秀开源项目,对国内生态兼容的更好,通过 字节码注入 这种无侵入的方式来监控系统,降低系统代码对第三方工具的耦合。

3.1.SkyWalking 的组成

SkyWalking 整个架构,分成探针、平台后端、存储和用户界面四部分,如下:

  • 1、 Agent:探针,作用就是收集链路信息,将数据格式化为 SkyWalking 适用的格式。通过 HTTP 或者 gRPC方式收集和发送数据到Skywalking Collector收集器。

  • 2、Collector :一个支持集群模式运行的后台,是链路数据收集器,作用就是对传来的数据进行整合、分析并落入相关的数据存储中,且提供查询功能。

  • 3、Storage:存储方式,支持以ElasticSearch、Mysql、TiDB、H2集群等作为存储介质进行数据存储。官方推荐ES。

  • 4、UI: Web可视化界面,用来展示落地的数据,查看链路信息。

H2是将数据存储在内存中,重启后数据丢失,官方推荐 ElasticSearch,新版本的skywalking 默认使用ES作为存储,需要先安装es 5.x版本。

3.2.SkyWalking 链路追踪流程图(*)

链路的追踪大体流程如下:

  • Agent 收集 Trace (跟踪)的数据。
  • Agent 发送 Trace 数据给 Collector收集器 。
  • Collector 接收 Trace 数据,进行聚合整理,分析统计。
  • Collector 存储 Trace 数据到对应的存储器,例如es,数据库等。

注意:Collector 接收到 TraceSegment 的数据,对应的类是 Protobuf 生成的。

为了便于理解,笔者手绘大体流程如下:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

链路追踪流程图

Collector 接收到 TraceSegment 数据后,会进行构建。

  • 构建成功,进行流式处理,最终存储到存储器( 例如,ES / H2 )
  • 构建失败,写入 Buffer 文件进行暂存。且后台线程,会定时读取 Buffer 文件,重新提交构建。

四、安装 SkyWalking 控制台

SkyWalking 跟sentinel一样,也可以说是,分为一个服务端,和多个客户端,服务端采用启动组件的形式,启动完毕得到一个监控的控制台页面。

4.1.下载控制台

skywalking地址:https://link.zhihu.com/?target=https%3A//github.com/apache/incubator-skywalking

或者采用加速的下载地址:

https://mirrors.tuna.tsinghua.edu.cn/apache/skywalking/

如图:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载zip

选择压缩包:
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

下载压缩包

当前我这里是基于8.5.0 来搭建的,下载解压,放到自身盘符。

4.2.启动监控台

启动 Skywalking UI + Skywalking collector服务,本示例以单机版演示。

单机模式collector不支持集群部署,所以使用本地H2数据库来存储。

过程如下:
配置 webapp 目录下的 webapp.yml 文件,变更默认超时时间 10000,修改端口号如 server.port= 13800。
(因为默认的 8080 端口与默认的 sentinel-dashboard 端口冲突),如果超时,适当调大一些。
Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪

修改端口号

部分转自互联网,侵权删除联系

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » Spring Cloud Alibaba微服务架构实战教程—31通俗易懂的说分布式链路追踪求职学习资料
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们