天天看點

服務鍊路追蹤(Spring Cloud Sleuth)

一、簡介

spring cloud sleuth 主要功能就是在分布式系統中提供追蹤解決方案,并且相容支援了 zipkin,你隻需要在pom檔案中引入相應的依賴即可。

二、服務追蹤分析

服務鍊路追蹤(Spring Cloud Sleuth)

随着服務的越來越多,對調用鍊的分析會越來越複雜。它們之間的調用關系也許如下:

服務鍊路追蹤(Spring Cloud Sleuth)

三、術語

span:基本工作單元,例如,在一個建立的span中發送一個rpc等同于發送一個回應請求給rpc,span通過一個64位id唯一辨別,trace以另一個64位id表示,span還有其他資料資訊,比如摘要、時間戳事件、關鍵值注釋(tags)、span的id、以及進度id(通常是ip位址)

span在不斷的啟動和停止,同時記錄了時間資訊,當你建立了一個span,你必須在未來的某個時刻停止它。

trace:一系列spans組成的一個樹狀結構,例如,如果你正在跑一個分布式大資料工程,你可能需要建立一個trace。

annotation:用來及時記錄一個事件的存在,一些核心annotations用來定義一個請求的開始和結束

cs - client sent -用戶端發起一個請求,這個annotion描述了這個span的開始

sr - server received -服務端獲得請求并準備開始處理它,如果将其sr減去cs時間戳便可得到網絡延遲

ss - server sent -注解表明請求處理的完成(當請求傳回用戶端),如果ss減去sr時間戳便可得到服務端需要的處理請求時間

cr - client received -表明span的結束,用戶端成功接收到服務端的回複,如果cr減去cs時間戳便可得到用戶端從服務端擷取回複的所有所需時間

将span和trace在一個系統中使用zipkin注解的過程圖形化:

服務鍊路追蹤(Spring Cloud Sleuth)

四、建構工程

基本知識講解完畢,下面我們來實戰,本文的案例主要有三個工程組成:一個server-zipkin,它的主要作用使用zipkinserver 的功能,收集調用資料,并展示;一個service-hi,對外暴露hi接口;一個service-miya,對外暴露miya接口;這兩個service可以互相調用;并且隻有調用了,server-zipkin才會收集資料的,這就是為什麼叫服務追蹤了。

4.1 建構server-zipkin

建一個spring-boot工程取名為server-zipkin,在其pom引入依賴:

在其程式入口類, 加上注解@enablezipkinserver,開啟zipkinserver的功能:

指定端口:

4.2 建立service-hi

在其pom引入依賴:

在其配置檔案指定“spring.zipkin.base-url”:

通過引入spring-cloud-starter-zipkin依賴和設定spring.zipkin.base-url就可以了。

對外暴露接口:

4.3 建立service-miya

建立過程痛service-hi,引入相同的依賴,配置下spring.zipkin.base-url。

4.4 啟動工程,示範追蹤

服務鍊路追蹤(Spring Cloud Sleuth)
服務鍊路追蹤(Spring Cloud Sleuth)

點選find traces,可以看到具體服務互相調用的資料:

服務鍊路追蹤(Spring Cloud Sleuth)

本文源碼下載下傳:

<a href="https://github.com/forezp/springcloudlearning/tree/master/chapter9">https://github.com/forezp/springcloudlearning/tree/master/chapter9</a>