分布式服务跟踪:spring cloud sleuth

随着业务的发展,系统规模会变得越来越大,各微服务间的调用关系变得越来越错综复杂。通常一个由客户端发起的请求在后端系统中会经过多个不同的微服务调用来协同产生最后的请求结果,在复杂的微服务架构系统中,几乎每一个前端请求都会形成一条复杂的分布式服务调用链路,在每条链路中任何一个依赖服务,出现延迟过高或错误的时候都有可能引起请求的最后的失败。
这时候,对于每个请求,全链路调用的跟踪就变得越来越重要,通过实现对请求调用的各种可以帮助我们快速发现错误根源及监控分析每条请求链路上的 性能瓶颈等。


跟踪原理
分布式系统中的服务跟踪在理论上并不复杂,主要包括下面两个关键点:
1、为了实现请求跟踪,当请求发送到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识,同时在分布式系统内部流转的时候,框架始终保持传递该唯一标识,直到返回给请求方为止,这个唯一标识就是:Trace ID
2、为了统计各处理单元的时间延迟,当请求到达各个服务组件时,或是处理逻辑到达某个状态时,也通过一个唯一标识来标记它的开始、具体过程以及结束,该标识就是前文中提到的Span ID。对于每个span来说,它必须有开始和结束两个节点,通过记录开始span和结束span的时间戳,就能统计出span的时间延迟,除了时间戳记录之外,还可以包含一些其它元数据。比如事件名称、请求信息等。
例如:
如[trace1,454445a6a7d9ef44,912a7c66c17214e1,false]的日志信息,而这些元素正是实现分布式服务跟踪的重要组成部分,它们的含义分别如下所示:
第一个值:trace1,它表示应用的名称,也就是配置文件spring.application.name的值。
第二个值:454445a6a7d9ef44,它是SpringCloudSleuth生成的一个ID,称为Trace ID,它用来标识一条请求链路,一条请求链路中包含一个Trace ID,多个Span ID。
第三个值:912a7c66c17214e1,它是SpringCloudSleuth生成的另外一个ID,称为Span ID,它表示一个基本的工作单元,比如发送一个http请求。
第四个值:false,表示是否要将该信息输出到Zipkin等服务中来收集和展示。
上面四个值中的Trace ID 和Span ID是SpringCloudSleuth实现分布式服务跟踪的核心。在一次服务请求链路的调用过程中,会保持并传递同一个Trace ID,从而将整个分布于不同微服务进程中的请求跟踪信息串联起来。例如,在一次前端请求链路中,上面trace1和trace2的Trace ID是相同的。

与Logstash整合:集中收集、存储和搜索这些跟踪信息。例如:ELK,主要由ElasticSearch、Logstash和Kibana

与Zipkin整合:
在ELK平台中的数据分析维度缺少对请求链路中各阶段时间延迟的关注,很多时候我们追溯请求链路
是为了找出整个调用链路中出现延迟过高的瓶颈源,或为了实现对分布式系统做延迟监控与
时间消耗相关的需求。













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值