首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

分布式服务跟踪,spring cloud Sleuth,只需要了解这些

前言

我们做微服务,随着业务内容越来越多,系统规模也会变得越来越大,各微服务之间的调用关系变得也会越错综复杂。通常一个由客户端发起的请求,在后端很可能会经过多个服务间的调用来协同产生最后的请求结果。

在复杂的微服务架构系统中,几乎每个前端请求都会形成一个复杂的调用链路,在每条链路中,任何一个依赖服务出现延迟过高或错误的时候,都会引起最后的失败,这时候,对于每个服务,全链路跟踪就会越来越重要。

根据上述所说的分布式跟踪问题,spring cloud Sleuth提供了一套完整的解决方案。

搭建

我们还是使用eureka作为服务注册中心,这里不多做解释,直接使用现有工程即可。构建一个微服务应用 trace-1,实现一个rest接口,调用接口后将触发trance-2的接口。

引入依赖starter-web,starter-eureka,starter-ribbon。

创建应用主类,并使用restemplete调用trace-2。代码如下。

@RestController

@EnableDiscoveryClient

@SpringBootApplication

public class TranceApplication {

@Bean

@LoadBlanced

RestTemplate restTemplate(){

return new RestTemplate();

}

@RequestMapping(value="/trace-1",method = RequestMethod.GET)

public String trace(){

return restTemplate().getForEntity("*",String.class).getBody();

}

public static void main(String[] args) {

SpringApplication.run(TranceApplication.class,args);

}

}

新建一个微服务应用trace-2,实现一个rest接口,具体代码如下。

@RestController

@EnableDiscoveryClient

@SpringBootApplication

public class TranceApplication {

@RequestMapping(value="/trace-2",method = RequestMethod.GET)

public String trace(){

return "trace";

}

public static void main(String[] args) {

SpringApplication.run(TranceApplication.class,args);

}

}

配置eureka。

把eureka和上面两个服务启动起来。实现跟踪,在trace-1和trace-2依赖管理中增加spring-cloud-starter-sleuth依赖即可。然后在打印台上可以看出一些跟踪日志。

跟踪原理

分布式服务跟踪也不发杂,主要实现以下两个关键点。

为了实现请求跟踪,当服务发送到分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识,同时在分布式系统流转中,始终保持这个id。直到返回请求为止。即trace-Id

为了统计各单元的时间延迟,当请求到达各服务组件时,或者处理逻辑到达某个状态时,也通过一个唯一标识来标记它的开始,即spanid,通过请求和结束的时间戳来判断时间延迟。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200712A09ZGG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券