热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringBoot+SpringCloud实现权限管理系统后端篇(二十二):链路追踪(Sleuth、Zipkin)...

在线演示演示地址:http:139.196.87.48:9002kitty用户名:admin密码:admin技术背景在微服务架构中

在线演示

演示地址:http://139.196.87.48:9002/kitty

用户名:admin 密码:admin

技术背景

在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。

ZipKin

Zipkin 是一个由Twitter公司提供并开放源代码分布式的跟踪系统,它可以帮助收集服务的时间数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

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

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

Spring Cloud Sleuth

一般而言,一个分布式服务追踪系统,主要有三部分组成:数据收集、数据存储和数据展示。

Spring Cloud Sleuth为服务之间的调用提供链路追踪,通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外,Sleuth还可以帮助我们:

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

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

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

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

实现案例

在早前的Spring Cloud版本里是需要自建zipkin服务端的,但是从SpringCloud2.0 以后,官方已经不支持自建Server了,改成提供编译好的jar包供用户使用。因为我用的是2.0以后的版本,自建Servcer的方式请自行百度。这里我们是使用docker方式部署zipkin服务,并采用elasticsearch作为zipkin的数据存储器。

下载镜像

此前请先安装好docker环境,使用以下命令分别拉取zipkin和elasticsearch镜像。

docker pull openzipkin/zipkin
docker pull docker.elastic.co
/elasticsearch/elasticsearch:6.3.0

通过 docker images 查看下载镜像。

编写启动文件

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

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

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

docker-compose.yml

version: "3"
services:elasticsearch:image: docker.elastic.co
/elasticsearch/elasticsearch:6.3.0container_name: elasticsearchrestart: alwaysnetworks:- elkports:- "9200:9200"- "9300:9300"volumes:- ../elasticsearch/data:/usr/share/elasticsearch/datazipkin:image: openzipkin/zipkin:latestcontainer_name: zipkinrestart: alwaysnetworks:- elkports:- "9411:9411"environment:- STORAGE_TYPE=elasticsearch- ES_HOSTS=elasticsearchnetworks:elk:

关于docker-compose.yml 文件格式及相关内容请自行百度了解。

启动服务

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

docker-compose up -d

执行过程如下图所示。

执行完成之后,通过 docker ps 命令查看,发现zipkin和elasticsearch确实启动起来了。

到这里,zipkin服务端就搭建起来了,访问 http://localhost:9411,效果如下,因为还没有客户端,所以还没有数据。

注意:

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

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

如果想使用其他如数据库等方式存储,请查询相关配置文档。

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

添加依赖

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

pom.xml

org.springframework.cloudspring-cloud-starter-zipkin

配置文件

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

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

application.yml

server:port: 8005
spring:application:name: kitty
-consumercloud:consul:host: localhostport: 8500discovery: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数据。

 

再次访问 http://localhost:9411, 发现出现了我们刚刚访问的服务,选择并点击追踪。

点击追踪之后,页面显示了相关的服务调用信息。 

 

点击调用记录查看详情页面,可以看到每一个服务所耗费的时间和顺序。

 

源码下载

后端:https://gitee.com/liuge1988/kitty

前端:https://gitee.com/liuge1988/kitty-ui.git


作者:朝雨忆轻尘
出处:https://www.cnblogs.com/xifengxiaoma/ 
版权所有,欢迎转载,转载请注明原文作者及出处。

转:https://www.cnblogs.com/xifengxiaoma/p/9917216.html



推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • Webdriver中元素定位的多种技术与策略
    在Webdriver中,元素定位是自动化测试的关键环节。本文详细介绍了8种常用的元素定位技术与策略,包括ID、名称、标签名、类名、链接文本、部分链接文本、XPath和CSS选择器。每种方法都有其独特的优势和适用场景,通过合理选择和组合使用,可以显著提高测试脚本的稳定性和效率。此外,文章还探讨了在复杂页面结构中如何灵活运用这些定位技术,以应对各种挑战。 ... [详细]
  • Python错误重试让多少开发者头疼?高效解决方案出炉
    ### 优化后的摘要在处理 Python 开发中的错误重试问题时,许多开发者常常感到困扰。为了应对这一挑战,`tenacity` 库提供了一种高效的解决方案。首先,通过 `pip install tenacity` 安装该库。使用时,可以通过简单的规则配置重试策略。例如,可以设置多个重试条件,使用 `|`(或)和 `&`(与)操作符组合不同的参数,从而实现灵活的错误重试机制。此外,`tenacity` 还支持自定义等待时间、重试次数和异常处理,为开发者提供了强大的工具来提高代码的健壮性和可靠性。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
  • 成都服务器租赁适用于哪些网站业务部署——Vecloud专业解析
    成都,作为四川省的省会,不仅是西南地区唯一的副省级城市,也是国家重要的高新技术产业基地和商贸物流中心。Vecloud专业解析指出,成都服务器租赁服务特别适合各类网站业务的部署,尤其是需要高效、稳定和安全的在线应用。无论是电子商务平台、内容管理系统还是大数据分析,成都的服务器租赁都能提供强大的支持,满足不同企业的需求。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
author-avatar
卢健波_785
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有