一、微服务架构下的问题

在大型的微服务架构系统中,存在很多不同的微服务应用,不同的微服务有依赖着其他微服务,以及不同微服务有可能由不同的团队维护。那么在这种复杂的系统架构中,将会存在一些问题,比如:

  1. 如何快速发现问题(服务接口出现问题时,如何快速的确定是由哪一个调用节点出现问题)。
  2. 如何判断一个服务出现问题后的影响范围。
  3. 如何梳理服务依赖,以及依赖的合理性。
  4. 如何分析链路性能,以及时容量规划(查看链路中哪一个调用过程耗时较长)。

分布式链路追踪(Disturbuted Tracing),就是将一次调用还原成一个调用链路,进行日志记录。通过链路追踪的监控功能可以查看调用链上的服务具体落在那个节点上,每个节点上的处理耗时。

二、Sleuth + zipkin概述

SpringCloud Sleuth 主要功能就是在分布式系统中提供链路追踪解决方案。它大量的借用了Google Dapper的设计,并兼容支持了zipkin,只要引入相关依赖既可。Dapper中的专业术语:

Span: 基本工作单元,想当与微服务调用过程中的每一个最小的调用请求。每个调用环节都有不同的SpanId。但一次请求中的同一个调用链中traceId 相同。

Trace: 由一系列Span组成的一条数据链路。每一次请求中traceId 相同。

Zipkin 是 twitter 的一个开源项目。它基于 Google Dapper 实现。它致力于收集配置的节点上的定时数据。以解决微服务中的延迟问题,包括数据的收集、存储、查找和展现。使用zipkin可以收集链路上各个节点上的跟踪数据。通过其提供的REST API 接口 可以自定义实现我们的监控程序。或者使用其提供的UI界面直接查看链路调用信息。Zipkin提供了可插拔数据存储方式:内存存储、mysql,elasticsearch等。

Zipkin 分为 客户端和服务端

客户端:即微服务系统中的各个节点,客户端会配置服务端的url,一旦发生服务间的调用时,会被配置在微服务里面的sleuth监听器监听,并生成相应的 span 和 trace 信息发送给服务端。发送的方式主要有两种,一种http报文的形式,一种通过消息总线的形式如RabbitMQ。

服务端:服务端内部主要包含四部分 collector 收集器组件、Stotage 存储组件、Restful Api 组件、Web UI 组件。

三、链路追踪环境搭建

1,zipkin 服务端搭建

首先下载服务端启动jar包 zipkin-server-2.23.2-exec.jar。下载地址 https://zipkin.io/pages/quickstart.html

启动命令:

java -jar  zipkin-server-2.23.2-exec.jar 默认使用内存存储数据。

java -jar  zipkin-server-2.23.2-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=11111 --MYSQL_DB=zipkin  使用数据库存储启动,需要提前准备好数据库环境表

java -jar zipkin-server-2.23.2-exec.jar --RABBIT_ADDRESSES=192.168.17.132:5672 使用rabbitMq 作为传输方式。

服务端访问地址:http://127.0.0.1:9411/zipkin/

2,zipkin 客户端搭建集成

我们首先准备四个工程,并保证请求通过网关能都正常访问到服务生产者工程,工程如下:

  1. cloud-payment-service :服务生产者工程
  2. cloud-order-service:服务消费者工程
  3. eureka-server:服务注册中心
  4. api-gateway-server:微服务网关工程

每个工程添加 sleuth + zipkin 依赖

<!-- 引入Sleuth 链路追踪依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- zipkin 日志手机 客户端依赖 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

配置文件配置其日志打印、sleuth采集比例 和 zipkin 服务端相关信息

springzipkin:base-url: http://127.0.0.1:9411/ #zipkin 的服务端地址sender:type: web #采集日志向服务端传递的方式,还有mq等其他方式sleuth:sampler:probability: 1 # 采集日志比率 如 0.1#添加日志级别可以控制台打印节点上的链路信息
logging:level:root: INFOorg.springframework.web.servlet.DispatcherServlet: DEBUGorg.springframework.cloud.sleuth: DEBUG

分别启动四个工程后,我们访问一次请求,在监控平台我们可以查到其调用的数据链路。

点击 show 按钮 我们可以查看其想起的调用信息

选择cloud-order-service 节点:

3,存在的问题及优化

使用http发送报文形式占用网络带宽,以及容易造成阻塞问题,下面我们将http形式 调整为使用RabbitMQ的方式,进行数据采集。

修改三个工程的 配置文件(修改zipkin.sender.type 为rabbit。添加spring.rabbitmq的配置):

spring:zipkin:base-url: http://127.0.0.1:9411/ #zipkin 的服务端地址sender:type: rabbit #采集日志向服务端传递的方式,还有mq等其他方式sleuth:sampler:probability: 1 # 采集日志比率 如 0.1rabbitmq:host: 192.168.17.132port: 5672username: guestpassword: guestlistener:direct:retry:enabled: truesimple:retry:enabled: true

优化后:

SpringCloud Sleuth + zipkin 实现微服务链路追踪功能相关推荐

  1. Spring Cloud Sleuth+Zipkin 构建微服务链路跟踪系统

    什么是链路跟踪系统? 在微服务中,多个服务分布在不同物理机器上,各个服务之间相互调用.如何清晰地记录服务调用过程,并在出现问题的时候能够通过查看日志和服务之间的调用关系来定位问题,这样的系统就叫做链路 ...

  2. 微服务链路追踪SkyWalking

    微服务链路追踪SkyWalking 链路追踪介绍 skywalking是什么 SkyWalking环境搭建部署 SkyWalking跨多个微服务跟踪 SkyWalking UI介绍 SkyWalkin ...

  3. Spring Cloud Sleuth + Zipkin 监控微服务(一)

    在之前搭建的服务注册中心的基础上,结合Spring Cloud Sleuth + Zipkin 监控微服务. 1.Zipkin server 从https://dl.bintray.com/openz ...

  4. 微服务链路追踪-SkyWalking

    微服务链路追踪-SkyWalking SkyWalking官网地址:https://skywalking.apache.org/ SkyWalking官方文档:https://skywalking.a ...

  5. SkyWalking 微服务链路追踪

    目录 8. SkyWalking 微服务链路追踪 8.1 介绍 SkyWalking 8.2 Skywalking---服务搭建 8.3 SkyWalking---接入服务 8.3.1 windows ...

  6. 微服务链路追踪之zipkin搭建

    前言 微服务治理方案中,链路追踪是必修课,SpringCloud的组件其实使用很简单,生产环境中真正令人头疼的往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长,这都是项目上 ...

  7. 「Java分享客栈」随时用随时翻:微服务链路追踪之zipkin搭建

    前言 微服务治理方案中,链路追踪是必修课,SpringCloud的组件其实使用很简单,生产环境中真正令人头疼的往往是软件维护,接口在微服务间的调用究竟哪个环节出现了问题,哪个环节耗时较长,这都是项目上 ...

  8. 微服务.链路追踪概述和方案 (Cat Zipkin Skywaking,Sluth等组件对比选型)

    概述 为什么追踪链路 1. 单体应用 过渡 到微服务 2. 微服务 必须导致 调用熵增加 3. 单体应用中两个问题显现出来:根据日志查询问题:调用链路和调用的性能. 4. 日志问题在以后的日志方案中研 ...

  9. 07-搭建微服务-链路追踪Sleuth

    1.为什么使用链路追踪? 在微服务中,随着服务越来越多,对调用链的分析越来越复杂. 出现问题: 1.微服务之间的调用错综复杂,用户发送的请求经历哪些服务,调用链不清楚,没有一个自动化的工具类来维护调用 ...

最新文章

  1. 微信架构 支付架构(下)
  2. 【全真互联网下音视频技术创新应用】
  3. javac编译java文件之后 java运行找不到类的处理
  4. ios时间相差多少天_iOS 时间戳和时间互换,计算两日期相隔天数
  5. 小程序二维码(扫描二维码到小程序页面)
  6. python37安装失败怎么搞_Linux 安装Python37
  7. 使用socket模块,多线程扫描指定ip的端口开放情况
  8. 面试总结——Java篇
  9. 计算机病毒——代码自解密
  10. IDM俄国大神直装注册版INTERNET DOWNLOAD MANAGER 6.36.7
  11. PLSQL Developer 12 64位下载 v12.0.4汉化中文版
  12. 135编辑器html怎么复制,微信公众号怎么复制别人的图文排版(图文模板复制方法)...
  13. ros2 launch 用法以及一些基础功能函数的示例
  14. 【企业】质量管理:如何使用 5WHY 分析法解决处理问题
  15. Android App开发实战之实现微信记账本(附源码 超详细必看)
  16. mysql弱口令加强,Mysql弱口令取得系统权限(续)
  17. ACPI Spec Chapter 10 Power Source And Power Meter Devices
  18. 回顾Vue2---②
  19. ld-linux-x86-64.so.2+,RedHat6安装Oracle数据库遇到错误C[ld-linux-x86-64.so.2+0x14d70]
  20. matlab语言学习笔记(一)

热门文章

  1. 利用栈和队列将队列中的元素逆置☆
  2. java.security.NoSuchAlgorithmException: SHA_256 MessageDigest not available
  3. 诗与远方:无题(二十)
  4. 中世纪判断女巫的方法总结
  5. Java任务调度之Quartz快速入门
  6. mysql如何抛出错误信息_如何捕获并重新抛出MySQL中的所有错误
  7. 字符串匹配(二)——逆向思维 BMH
  8. 华为成立德国实验室属实 但并非为5G牌照
  9. Angular 的概念模型
  10. Linux sed命令实例详解