SpringBoot + Spring Cloud +Vue 管理系统后台搭建(十六、链路追踪Sleuth、ZipKin)

     在微服务的架构中一个简单的前端请求可能调用多次后端服务才能完成,那么当整个请求出现问题时,我们很难定位到底是哪个服务出现了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,因此,分布式链路追踪的技术就诞生了。

ZipKin

     Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),由Twitter公司开发和贡献。它可以帮助收集服务的时间数据,已解决微服务架构中的的延迟问题,包括数据的收集、存储、查找和展现。

    每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,展示多少跟踪请求经过哪些服务,该系统可以让开发者通过一个web端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可非常方便的监测系统中存在的瓶颈。

    Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。我们可以根据需求选择不同的存储方式,生产环境一般都需要持久化。我们这里采用Elasticsearch作为Zipkin的数据存储器。

Spring Cloud Sleuth

一般分布式服务追踪系统主要由3部分组成:数据收集、数据存储、数据展示

spring cloud sleuth为服务之间的调用提供链路追踪,通过sleuth可以很清楚的了解到一个服务请求经过哪些服务,每个服务花了多长时间,让我们可以很方便的理清楚各个微服务的调用关系,除此外sleuth还有以下优点:

1、耗时分析:通过sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时。

2、可视化错误:对于程序未捕捉的异常,可以通过集成ZipKin服务在界面上看到。

3、链路优化:对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

spring cloud sleuth可以结合ZipKin,将信息发送到ZipKin,利用ZipKin的存储来存储信息,利用ZipKin UI来展示数据

Demo

从SpringCloud2.0 以后,官方已经不支持自建Zipkin Server了,改成提供编译好的jar包供用户使用。

自建的方式请到百度自行查询,我们这里使用Docker方式部署ZipKin服务,并采用Elasticsearch作为ZipKin的数据存储。

下载镜像

在此之前我们需要安装好Docker环境,使用以下命令分别拉取zipkin和elasticsearch镜像。

 

安装Docker教程:https://www.runoob.com/docker/windows-docker-install.html

docker pull openzipkin/zipkin:2.21
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.0

启动文件 

在本地创建如下文件夹结构, data目录用来存放elasticsearch存储的数据。

dockerfile
    |- elasticsearch
    |    |- data
    |- docker-compose.yml

编写docker-compose文件,主要作用是批量启动容器,避免在使用多个容器的时候逐个启动的繁琐。

docker-compose.yml

version: "3"
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.1.0
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  zipkin:
    image: openzipkin/zipkin:2.21
    container_name: zipkin
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 9411:9411
    environment:
      - TZ=Asia/Shanghai
      - STORAGE_TYPE=elasticsearch
      - ES_HOSTS=elasticsearch:9200
 

启动服务

命令模式进入dockerfile目录,执行启动命令如下。

docker-compose up -d

执行完成之后,通过 docker ps 命令查看状态

到这里,zipkin服务端就搭建起来了,访问 http://localhost:9411

搜索的时候没有数据,是因为我们没有配置客户端。 

注意:

这里我们采用了elasticsearch作为存储方式,如果想简单通过内存方式启动,无须安装elasticsearch,直接启动一个zipkin容器即可。

docker run -d -p 9411:9411 openzipkin/zipkin

 

zipkin服务端已经搭建完成了,接下来我们来实现客户端。

添加依赖

修改 mango-consumer 项目Maven配置,添加zipkin依赖。

pom.xml

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>

配置文件

修改配置文件,添加如下zipkin配置。

spring:
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
      probability: 1 #样本采集量,默认为0.1,为了测试这里修改为1,正式环境一般使用默认值。

application.yml

 

server:
  port: 8005
spring:
  application:
    name: mango-consumer
  cloud:
    consul:
      host: localhost
      port: 8500
      discovery:
        serviceName: ${spring.application.name}    # 注册到consul的服务名称
  boot:
    admin:
      client:
        url: "http://localhost:8000"
  zipkin:
    base-url: http://localhost:9411/
  sleuth:
    sampler:
      probability: 1 #样本采集量,默认为0.1,为了测试这里修改为1,正式环境一般使用默认值。
# 开放健康检查接口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: ALWAYS
#开启熔断器
feign:
  hystrix:
    enabled: true

 

测试效果

先后启动注册中心、服务监控、服务提供者、服务消费者。

反复访问几次 http://localhost:8005/feign/call,产生zipkin数据。

 点进去可以看到详细的请求过程。

说明:如果我们docker配置完zipkin 和 elasticsearch ,在控制台启动后

看到下面结果并不一定启动成功。

我们要看docker的启动日志,打开我们的docker双击对应的名称就可以看到对应的交易日志,只有这里面的日志不报错,才能算是成功了

如果这里面报错,那估计就是docker-compose.yml文件配置有问题,而且版本不对应也会有问题。

好啦,链路跟踪我们就学到这。

看完记得点赞哦!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
本文介绍了一个基于Spring BootSpring CloudVue前后端分离的项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商品展示、购物车、订单管理等功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和优势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring BootSpring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商品展示和购物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和优化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过优化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring BootSpring CloudVue前后端分离的项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值