1. 程式人生 > >第11章 分布式服務跟蹤: Spring Cloud Sleuth

第11章 分布式服務跟蹤: Spring Cloud Sleuth

dep host framework 通過 path work 內部 分布式 ati

  通常一個由客戶端發起的請求在後端系統中會經過多個不同的微服務調用來協同產生最後的請求結果, 在復雜的微服務架構系統中, 幾乎每一個前端請求都會形成一條復雜的分布式服務調用鏈路, 在每條鏈路中任何一個依賴服務出現延遲過高或錯誤的時候都有可能引起請求最後的失敗。這時候,對於每個請求, 全鏈路調用的跟蹤就變得越來越重要, 通過實現對請求調用的跟蹤可以幫助我們快速發現錯誤根源以及監控分析每條請求鏈路上的性能瓶頸等。Spring Cloud Sleuth 提供了 一套完整的解決的分布式服務跟蹤問題的方案

pom.xml 中增加下面的依賴

<parent> 
  <groupid>org.springframework.boot</groupid> 
  <artifactid>spring-boot-starter-parent</artifactid>
  <version>l.3.7.RELEASE</version> 
  <relativePath/> 
</parent> 
<dependency> 
  <groupid>org.springframework.boot</groupid> 
  <artifactid>spring-boot-starter-web</artifactId>
</dependency> 
<dependency> 
  <groupid>org.springframework.cloud</groupid> 
  <artifactid>spring-cloud-starter-eureka</artifactid>
</dependency> 
<dependency> 
  <groupid>org.springframework.cloud</groupid> 
  <artifactid>spring-cloud-starter-ribbon</artifactid>
</dependency> 
<dependencyManagement> 
  <dependencies> 
    <dependency> 
      <groupid>org.springframework.cloud</groupid> 
      <artifactid>spring-cloud-dependencies</artifactid>
      <version>Brixton.SRS</version> 
      <type
>pom</type>       <scope>import</scope>     </dependency>   </dependencies> </dependencyManagement>

在application.properties 中,將 eureka.client.serviceUrl.defaultZone參數指向 eureka-server 的地址

spring.application.name=trace-1 
server.port=9101 
eureka.client.serviceUrl.defaultZone
=http://localhost:llll/eureka/

跟蹤原理

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

第11章 分布式服務跟蹤: Spring Cloud Sleuth