文章目录

  • 1. 缘起
  • 2. 规划
  • 3. 进度
  • 4. 源码

1. 缘起

万物还是比较奇妙的,我本身是在研究 Spring cloud的;当学习到它的服务跟踪,我就想我们的系统也需要一套这样的东西(主要是被 zipkin 的简洁画面给吸引了)。然后百度一番,发现这方面的理论知识蛮多的,代码实现也用,版本会偏旧一点,但这不是主要原因,主要原因是我看不明白大神们的写法。。。

既然打算写这个了,那么如何并入我们的系统是关键,先谈谈我们的系统吧。我们的系统是用的 dubbo 作为 rpc框架,zookeeper 作为注册中心。整个分布式设计是分为两层,一层对外提供rest 接口,另一层作为基础模块层,供对外层调用。但实际上,由于业务的复杂性,基础模块层也在互相调用。如何能让大家接受一个这样的服务跟踪呢(并不打算在线上环境使用)?最简单的使用方式无疑是一大吸引力。所以我想我写的也只是一个工具包,引入该工具包即可。其实这样的jar包定制型太强,不太好,可拿来即用还是不错的。

2. 规划

问题点:

  1. brave 如何介入web系统?

    实现 servlet 拦截器即可

  2. brave 如何介入 dubbo ?

    实现 dubbo 拦截器即可

  3. 如何在不改变原有代码的基础上,使我们的工具包生效?

    dubbo 的 spi 机制以及 @Activate 注解;servlet 拦截器 采用注解的配置方式。

框架的可拓展性是多么的重要啊…

brave 我就不多介绍了,我也只是知道整个服务跟踪的设计想法而已,我相信这个在你百度到我这篇文章之前,已经理解到了。

zipkin 作为数据采集点,我所做的只是将它启动而已。

3. 进度

举个例子吧。有这样一个系统,A (web项目并集成了dubbo)调用了B (不对外提供接口,集成了dubbo),B 调用了 C (不对外提供接口,集成了dubbo)… 现在已能完成对这样的一个系统的追踪了。

上个图:

4. 源码

  • CurrentTraceContextFactory类: CurrentTraceContext 工程类,维护线程安全的 CurrentTraceContext
  • LocalTracing类:屏蔽了 CurrentTraceContext 的细节,也是线程安全的。
  • HttpTracingFilter类: servlet filter 的实现,在于初始化整个跟踪服务。
  • DubboConsumerTracingFilter 类:dubbo consumer 拦截器,负责传播服务跟踪需要的数据(注入器)。
  • DubboProviderTracingFilter 类:dubbo provider 拦截器,负责抽取传播的跟踪数据,并初始化跟踪服务。

源码移步至 github,一年工作经验的我无法保证其可用性,欢迎提 bug 。

brave+zipkin实现dubbo的服务跟踪相关推荐

  1. Spring Cloud构建微服务架构:分布式服务跟踪(整合zipkin)【Dalston版】

    通过上一篇<分布式服务跟踪(整合logstash)>,我们虽然已经能够利用ELK平台提供的收集.存储.搜索等强大功能,对跟踪信息的管理和使用已经变得非常便利.但是,在ELK平台中的数据分析 ...

  2. zipkin使用_我的Spring Cloud(十):Zipkin 服务跟踪

    一.概述 为什么要有服务跟踪,分布式系统中有很多个服务在相互调用,调用关系是错综复杂的,如果这时出现了问题,我们在进行问题排查的时候,或者在优化架构的时候,工作量就比较大,这时候就需要我们能够准确的跟 ...

  3. Spring Cloud构建微服务架构:分布式服务跟踪(入门)

    通过之前的N篇博文介绍,实际上我们已经能够通过使用它们搭建起一个基础的微服务架构系统来实现我们的业务需求了.但是,随着业务的发展,我们的系统规模也会变得越来越大,各微服务间的调用关系也变得越来越错综复 ...

  4. 分布式服务跟踪及Spring Cloud的实现

    在分布式服务架构中,需要对分布式服务进行治理--在分布式服务协同向用户提供服务时,每个请求都被哪些服务处理?在遇到问题时,在调用哪个服务上发生了问题?在分析性能时,调用各个服务都花了多长时间?哪些调用 ...

  5. Spring Cloud Sleuth 服务跟踪 将跟踪信息存储到数据库

    参见上一篇博客:Spring Cloud Sleuth 服务跟踪 参考:zipkin使用mysql保存数据 主要在跟踪服务上配置: 在数据库创建数据库表:(可不创建,在classpath中添加对应的s ...

  6. Spring Cloud构建微服务架构:分布式服务跟踪(抽样收集)【Dalston版】

    通过 TraceID和 SpanID已经实现了对分布式系统中的请求跟踪,而这些记录的跟踪信息最终会被分析系统收集起来,并用来实现对分布式系统的监控和分析功能,比如:预警延迟过长的请求链路.查询请求链路 ...

  7. Spring Cloud构建微服务架构:分布式服务跟踪(收集原理)【Dalston版】

    在本节内容之前,我们已经对如何引入Sleuth跟踪信息和搭建Zipkin服务端分析跟踪延迟的过程做了详细的介绍,相信大家对于Sleuth和Zipkin已经有了一定的感性认识.接下来,我们介绍一下关于Z ...

  8. Spring Cloud构建微服务架构:分布式服务跟踪(整合logstash)【Dalston版】

    通过之前的<入门示例>,我们已经为两个由SpringCloud构建的微服务项目 trace-1和 trace-2引入了Spring Cloud Sleuth的基础模块 spring-clo ...

  9. Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)

    通过上一篇<分布式服务跟踪(入门)>的例子,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的基本要素.下面通过本文来详细说说实现分布式服务跟踪的一 ...

最新文章

  1. java servlet html文件_Servlet生成html页面
  2. 学习OpenGL ES之透明和混合
  3. P vs. NP 五十年:AI正在解决不可解问题
  4. symmetric-tree
  5. 什么是MyCat?为什么要用到MyCat呢?
  6. 《R数据可视化手册》一1.4 从Excel文件中加载数据
  7. 写给中学生的算法入门:学代码之前看这篇就够了
  8. 使用 jQuery Mobile 与 HTML5 开发 Web App (十九) —— HTML5 对 Web App 的影响
  9. (转)淘淘商城系列——展示后台管理页面
  10. Logistic回归小结
  11. mysql 删除重复数据,需要给子查询的表,起一个别名
  12. 疯狂涨知识!我凭借这份PDF的复习思路,吊打面试官
  13. HTML5期末大作业:我的家乡网站设计——我的家乡
  14. 房东要涨800房租,我用Python抓取帝都几万套房源信息,主动涨了1000。
  15. RS232与TTL电平的区别
  16. 电脑桌面简约时钟工具OneClock
  17. c语言编程小球运行结果是,如何用C语言编程一个滚动的小球 最好是五彩的 滚动的...
  18. 服务器开机硬盘raid连接错误,服务器磁盘阵列常见问题及解决方法
  19. 关于算法学习的总结和感悟
  20. 如何在 MySQL / MariaDB 中导入导出数据,导入导出数据库文件、Excel、CSV

热门文章

  1. MPEG DASH MPD文件字段解释
  2. 需求DNA检测:如何判断一个功能是否值得做
  3. python矩阵中找满足条件的元素_从numpy数组中取出满足条件的元素示例
  4. 浮漂式/立杆式水质监测站与水质监测平台相比,哪个更厉害?
  5. 云栖科技评论第76期:车用半导体混战 中国怎么战?
  6. 物联网设备数据流转之数据如何导出:Excel文件
  7. 普通开普勒式望远镜光学设计1-初始结构设计选型与物镜像差校正
  8. 蓝桥 第八大奇迹 (线段树)
  9. 中国智慧灯杆摄像机市场发展趋势与前景规模预测报告2022-2028年
  10. 取得WINDOWS的管理员权限