您现在的位置是:亿华云 > IT科技
Spring Cloud构建微服务架构:分布式服务跟踪(跟踪原理)
亿华云2025-10-09 01:30:53【IT科技】1人已围观
简介通过上一篇《分布式服务跟踪入门)》的例子,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的基本要素。下面通过本文来详细说说实现分布式服务跟踪的一些要点。分布式
通过上一篇《分布式服务跟踪(入门)》的建微架构例子,我们已经通过Spring Cloud Sleuth往微服务应用中添加了实现分布式跟踪具备的服务分布基本要素。下面通过本文来详细说说实现分布式服务跟踪的式服一些要点。
分布式系统中的踪跟踪原服务跟踪在理论上并不复杂,它主要包括下面两个关键点:
为了实现请求跟踪,建微架构当请求发送到分布式系统的服务分布入口端点时,只需要服务跟踪框架为该请求创建一个***的式服跟踪标识,同时在分布式系统内部流转的踪跟踪原时候,框架始终保持传递该***标识,建微架构直到返回给请求方为止,服务分布这个***标识就是式服前文中提到的Trace ID。通过Trace ID的踪跟踪原记录,我们就能将所有请求过程日志关联起来。建微架构 为了统计各处理单元的服务分布时间延迟,当请求达到各个服务组件时,式服或是处理逻辑到达某个状态时,也通过一个***标识来标记它的开始、具体过程以及结束,该标识就是我们前文中提到的Span ID,亿华云对于每个Span来说,它必须有开始和结束两个节点,通过记录开始Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录之外,它还可以包含一些其他元数据,比如:事件名称、请求信息等。在快速入门示例中,我们轻松实现了日志级别的跟踪信息接入,这完全归功于spring-cloud-starter-sleuth组件的实现。在Spring Boot应用中,通过在工程中引入spring-cloud-starter-sleuth依赖之后, 它会自动的为当前应用构建起各通信通道的跟踪机制,比如:
通过诸如RabbitMQ、Kafka(或者其他任何Spring Cloud Stream绑定器实现的消息中间件)传递的请求 通过Zuul代理传递的请求 通过RestTemplate发起的请求在快速入门示例中,由于trace-1对trace-2发起的请求是通过RestTemplate实现的,所以spring-cloud-starter-sleuth组件会对该请求进行处理,在发送到trace-2之前sleuth会为在该请求的Header中增加实现跟踪需要的云南idc服务商重要信息,主要有下面这几个(更多关于头信息的定义我们可以通过查看org.springframework.cloud.sleuth.Span的源码获取):
X-B3-TraceId:一条请求链路(Trace)的***标识,必须值 X-B3-SpanId:一个工作单元(Span)的***标识,必须值 X-B3-ParentSpanId::标识当前工作单元所属的上一个工作单元,Root Span(请求链路的***个工作单元)的该值为空 X-B3-Sampled:是否被抽样输出的标志,1表示需要被输出,0表示不需要被输出 X-Span-Name:工作单元的名称我们可以通过对trace-2的实现做一些修改来输出这些头部信息,具体如下:
@RequestMapping(value = "/trace-2", method = RequestMethod.GET) public String trace(HttpServletRequest request) { logger.info("===<call trace-2, TraceId={ }, SpanId={ }>===", request.getHeader("X-B3-TraceId"), request.getHeader("X-B3-SpanId")); return "Trace"; }通过上面的改造,我们再运行快速入门的示例内容,并发起对trace-1的接口访问,我们可以得到如下输出内容。其中在trace-2的控制台中,输出了当前正在处理的TraceID和SpanId信息。
-- trace-1 INFO [trace-1,a6e9175ffd5d2c88,8524f519b8a9e399,true] 10532 --- [nio-9101-exec-2] icationEnhancerBySpringCGLIB27aa9624 : ===<call trace-1>=== -- trace-2 INFO [trace-2,a6e9175ffd5d2c88,ce60dcf1e2ed918f,true] 1208 --- [nio-9102-exec-3] icationEnhancerBySpringCGLIBa7d84797 : ===<call trace-2, TraceId=a6e9175ffd5d2c88, SpanId=be4949ec115e554e>===为了更直观的观察跟踪信息,我们还可以在application.properties中增加下面的配置:
logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG通过将Spring MVC的云服务器请求分发日志级别调整为DEBUG级别,我们可以看到更多跟踪信息:
-- trace-1 2016-11-27 09:26:52.663 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88,true] 10532 --- [nio-9101-exec-2] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name dispatcherServlet processing GET request for [/trace-1] 2016-11-27 09:26:52.666 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88,true] 10532 --- [nio-9101-exec-2] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/trace-1] is: -1 2016-11-27 09:26:52.685 DEBUG [trace-1,a6e9175ffd5d2c88,8524f519b8a9e399,true] 10532 --- [nio-9101-exec-2] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name dispatcherServlet: assuming HandlerAdapter completed request handling 2016-11-27 09:26:52.685 DEBUG [trace-1,a6e9175ffd5d2c88,a6e9175ffd5d2c88,true] 10532 --- [nio-9101-exec-2] o.s.web.servlet.DispatcherServlet : Successfully completed request -- trace-2 2016-11-27 09:26:52.673 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e,true] 1208 --- [nio-9102-exec-3] o.s.web.servlet.DispatcherServlet : DispatcherServlet with name dispatcherServlet processing GET request for [/trace-2] 2016-11-27 09:26:52.679 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e,true] 1208 --- [nio-9102-exec-3] o.s.web.servlet.DispatcherServlet : Last-Modified value for [/trace-2] is: -1 2016-11-27 09:26:52.682 DEBUG [trace-2,a6e9175ffd5d2c88,ce60dcf1e2ed918f,true] 1208 --- [nio-9102-exec-3] o.s.web.servlet.DispatcherServlet : Null ModelAndView returned to DispatcherServlet with name dispatcherServlet: assuming HandlerAdapter completed request handling 2016-11-27 09:26:52.683 DEBUG [trace-2,a6e9175ffd5d2c88,be4949ec115e554e,true] 1208 --- [nio-9102-exec-3] o.s.web.servlet.DispatcherServlet : Successfully completed request本文完整示例:
读者可以根据喜好选择下面的两个仓库中查看trace-1和trace-2两个项目:
Github:https://github.com/dyc87112/SpringCloud-Learning/
Gitee:https://gitee.com/didispace/SpringCloud-Learning/
【本文为专栏作者“翟永超”的原创稿件,转载请通过联系作者获取授权】
戳这里,看该作者更多好文
很赞哦!(584)
相关文章
- 互联网其实拼的也是人脉,域名投资也是一个时效性很强的东西,一个不起眼的消息就会引起整个域名投资市场的动荡,因此拓宽自己的人脉圈,完善自己的信息获取渠道,让自己能够掌握更为多样化的信息,这样才更有助于自己的域名投资。
- 在数以亿计的网站中,我们应该抓住每一个可能带来宣传的机会,域名可以带有企业的名字,一般可以使用汉语拼音或者英语单词或者是相关缩写的形式,只要用户记住了你企业的名字,就能很容易的打出你的网站域名,同样的,记住了网站域名也能很快的记住你公司的名字。
- 5、使用企业名称的英文名称作为域名也是国内许多企业选择域名的一种方式,特别适合一些与计算机、网络和通信相关的行业。
- 个人域名转为公司需要什么条件?个人域名转为公司该怎么做?
- 在此期间,他们每天仍在这里卖大米,在理财方面个人感情有待提高。因为现在是收米的最佳时机。
- 在众多公司中,如果我们必须选择一家可信的公司,那当然是信得过的。
- 以上的就是为大家介绍的关于域名的详解域名注册:域名注册0
- 众所周知,com域名拥有最大的流通市场和流通历史。最好选择com域名,特别是在购买域名时处理域名。其次可以是cn域名、net域名、org域名等主流域名,现在比较流行的王域名和顶级域名,都是值得注册和投资的。
- 4、企业无形资产:通用网站已成为企业网络知识产权的重要组成部分,属于企业的无形资产,也有助于提升企业的品牌形象和技术领先形象。它是企业品牌资产不可或缺的一部分。
热门文章
站长推荐
四、一定要仔细阅读细节
以上的就是为大家介绍的关于域名的详解域名注册:域名注册0
为什么现在中文域名觉得好?使用中文域名有什么好处?
公司和个人选域名方法一样吗?有什么不同?
4、企业无形资产:通用网站已成为企业网络知识产权的重要组成部分,属于企业的无形资产,也有助于提升企业的品牌形象和技术领先形象。它是企业品牌资产不可或缺的一部分。
什么样的邮箱才是安全的电子邮件地址?
审核通过的域名将显示在域名竞拍页面,并进入正式拍卖期,买家可以在拍卖周期内出价,加价幅度与拍卖保证金说明,点此查看。
这个不用多说,不同平台的注册价格不同,且不同平台对域名释放交易的把控与曝光不同,当然价格相对便宜且平台渠道广操作便利的平台最好。