成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Spring Cloud構建微服務架構:分布式服務跟蹤(跟蹤原理)

開發 開發工具 分布式
我們已經通過Spring Cloud Sleuth往微服務應用中添加了實現分布式跟蹤具備的基本要素。下面通過本文來詳細說說實現分布式服務跟蹤的一些要點。

通過上一篇《分布式服務跟蹤(入門)》的例子,我們已經通過Spring Cloud Sleuth往微服務應用中添加了實現分布式跟蹤具備的基本要素。下面通過本文來詳細說說實現分布式服務跟蹤的一些要點。

分布式系統中的服務跟蹤在理論上并不復雜,它主要包括下面兩個關鍵點:

  • 為了實現請求跟蹤,當請求發送到分布式系統的入口端點時,只需要服務跟蹤框架為該請求創建一個***的跟蹤標識,同時在分布式系統內部流轉的時候,框架始終保持傳遞該***標識,直到返回給請求方為止,這個***標識就是前文中提到的Trace ID。通過Trace ID的記錄,我們就能將所有請求過程日志關聯起來。
  • 為了統計各處理單元的時間延遲,當請求達到各個服務組件時,或是處理邏輯到達某個狀態時,也通過一個***標識來標記它的開始、具體過程以及結束,該標識就是我們前文中提到的Span ID,對于每個Span來說,它必須有開始和結束兩個節點,通過記錄開始Span和結束Span的時間戳,就能統計出該Span的時間延遲,除了時間戳記錄之外,它還可以包含一些其他元數據,比如:事件名稱、請求信息等。

[[222355]]

在快速入門示例中,我們輕松實現了日志級別的跟蹤信息接入,這完全歸功于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中增加實現跟蹤需要的重要信息,主要有下面這幾個(更多關于頭信息的定義我們可以通過查看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的實現做一些修改來輸出這些頭部信息,具體如下:

  1. @RequestMapping(value = "/trace-2", method = RequestMethod.GET) 
  2. public String trace(HttpServletRequest request) { 
  3.     logger.info("===<call trace-2, TraceId={}, SpanId={}>==="
  4.             request.getHeader("X-B3-TraceId"), request.getHeader("X-B3-SpanId")); 
  5.     return "Trace"

通過上面的改造,我們再運行快速入門的示例內容,并發起對trace-1的接口訪問,我們可以得到如下輸出內容。其中在trace-2的控制臺中,輸出了當前正在處理的TraceID和SpanId信息。

  1. -- trace-1 
  2. INFO [trace-1,a6e9175ffd5d2c88,8524f519b8a9e399,true] 10532 --- [nio-9101-exec-2] icationEnhancerBySpringCGLIB27aa9624 : ===<call trace-1>=== 
  3.  
  4. -- trace-2 
  5. INFO [trace-2,a6e9175ffd5d2c88,ce60dcf1e2ed918f,true] 1208 --- [nio-9102-exec-3] icationEnhancerBySpringCGLIBa7d84797 : ===<call trace-2, TraceId=a6e9175ffd5d2c88, SpanId=be4949ec115e554e>=== 

為了更直觀的觀察跟蹤信息,我們還可以在application.properties中增加下面的配置:

  1. logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG 

通過將Spring MVC的請求分發日志級別調整為DEBUG級別,我們可以看到更多跟蹤信息:

  1. -- trace-1 
  2. 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] 
  3. 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 
  4. 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 
  5. 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 
  6.  
  7. -- trace-2 
  8. 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] 
  9. 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 
  10. 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 
  11. 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/

【本文為51CTO專欄作者“翟永超”的原創稿件,轉載請通過51CTO聯系作者獲取授權】

戳這里,看該作者更多好文

 

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2018-04-16 14:56:56

微服務架構分布式服務

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤

2018-04-09 13:56:13

微服務架構分布式

2018-04-02 15:01:31

微服務架構分布式服務

2018-04-18 16:07:49

Spring Clou微服務分布式

2021-06-09 09:00:00

微服務架構技術

2017-07-28 16:41:53

Spring Clou微服務架構

2018-05-23 15:58:27

Spring Clou微服務架構

2018-07-19 14:58:14

Spring Clou微服務架構

2020-05-26 11:59:30

日志鏈路微服務架構

2017-01-16 14:51:26

京東分布式服務CallGraph

2017-06-26 09:06:10

Spring Clou微服務架構

2022-02-18 09:30:48

分布式Spring應用程序

2017-09-04 16:15:44

服務網關架構

2017-07-03 09:50:07

Spring Clou微服務架構

2017-08-10 11:15:05

Spring Clou微服務架構

2017-08-09 15:50:47

Spring Clou微服務架構

2023-09-12 22:58:51

分布式架構微服務

2023-08-25 16:26:49

微服務架構

2021-03-23 22:43:09

Grafana Tem分布式跟蹤開源
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 人人做人人澡人人爽欧美 | 国产福利在线免费观看 | 国产精品久久一区二区三区 | 色香婷婷 | 久久九九影视 | 国产精品日韩欧美一区二区三区 | 婷婷在线免费 | 欧美日韩精品一区 | 特黄色一级毛片 | www.se91| 日韩在线免费 | 九九伊人sl水蜜桃色推荐 | 久久国产精品一区二区三区 | 手机看黄av免费网址 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 亚洲成人日韩 | 欧美成人一区二区三区片免费 | 成人免费片 | 久久中文字幕一区 | 国产精品一区二区三区在线 | 精品免费在线 | 日韩在线不卡 | 精品久久香蕉国产线看观看亚洲 | 青青草国产在线观看 | 一区二区三区欧美大片 | 国产三级一区二区三区 | 午夜欧美 | 日韩中文电影 | 成人性视频在线 | 中文字幕精品一区 | 婷婷色国产偷v国产偷v小说 | 精品国产乱码久久久久久蜜柚 | 日本一二区视频 | 国产精品久久久久久久岛一牛影视 | 久久中文视频 | 久久国产精品视频 | 成人在线精品视频 | 一级a毛片| 成年视频在线观看 | 亚洲一区二区在线电影 | 国产一区二区三区免费 |