一. 為什麼要進行鍊路追蹤?
微服務架構是一種分布式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,是以需要有個東西去跟蹤請求鍊路,記錄一個請求都調用了哪些服務單元,調用順序是怎麼樣的以及在各個服務單元處理的時間長短。常見的服務鍊路追蹤元件有google的dapper、twitter的zipkin、阿裡的鷹眼等,它們都是出衆的開源鍊路追蹤元件。
二.Zipkin介紹
spring cloud 有自己的元件來內建這些開源元件,它就是spring cloud sleuth,它可以友善的整合zipkin進行服務鍊路追蹤,它為服務鍊路追蹤提供了一套完整的解決方案。
zipkin分服務端和用戶端。用戶端就是我們的服務單元,用來發送鍊路資訊到服務端;服務端用來接收用戶端發送來的鍊路資訊,并進行處理,它包括4個部分:
1.Collector元件:用來接收用戶端發送的鍊路資訊然後整理成zipkin能處理的格式,供後續存儲或向外部提供查詢使用。
2.Storage元件:對鍊路資訊進行儲存,預設存儲在記憶體,通過配置還可以儲存到mysql等地方。
3.Restful API元件:對其他服務單元提供api接口進行查詢鍊路資訊。
4.Web UI元件:調用API 元件的接口并将資訊顯示到web 畫面。
三. 項目架構
節點 | 服務 | 服務名 | 啟動順序 |
192.168.68.128:911 | eureka注冊中心 | eureka-center | 1 |
localhost:5200 | 鍊路追蹤服務 | zipkin-service | 2 |
localhost:2221 | 服務提供者1:cart-service | cart-service | 3 |
localhost:2222 | 服務提供者2:cart-service | cart-service | 4 |
localhost:9999 | 服務消費者 | cart-client | 5 |
localhost:1111 | 網關服務 | cartGatewayServ | 6 |
順序啟動後,注冊中心如圖所示:
接下來我們來看具體代碼實作。
四.Zipkin Server端代碼實作
1.搭建項目,代碼目錄結構如下:
2.Pom檔案中主要是要引入如下三個依賴:
<!-- 引入eureka 用戶端依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<!-- 引入zipkin-server依賴,提供server端功能 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-server</artifactId>
</dependency>
<!-- 引入zipkin-autoconfigure-ui依賴,用來提供zipkin web ui元件的功能,友善檢視相關資訊 -->
<dependency>
<groupId>io.zipkin.java</groupId>
<artifactId>zipkin-autoconfigure-ui</artifactId>
</dependency>
3.建立啟動類,如圖所示:
最主要是應用到了@EnableZipkinServer注解,用于開啟Zipkin Server功能。
4. 建立配置檔案,如圖所示:
要向eureka注冊中心注冊自己。
五.Zipkin Client端代碼實作
用戶端的實作非常簡單,我們隻要在前面已經搭建的微服務上稍作改動即可。
1.引入依賴:
<!-- 引入zipkin 依賴 ,提供zipkin用戶端的功能 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2. 修改配置檔案,追加兩項配置
#指定zipkin服務端的url
spring.zipkin.base-url=http://localhost:5200
#設定樣本收集的比率為100%
spring.sleuth.sampler.percentage=1.0
由于分布式系統的請求量一般比較大,不可能把所有的請求鍊路進行收集整理,是以sleuth采用抽樣收集的方式,設定一個抽樣百分比。在開發階段,我們一般設定百分比為100%也就是1。
六.執行測試
按照項目架構列出的順序依次啟動服務。主要要先通路一下相關的微服務,鍊路追蹤界面才能看得到。我們先通過服務消費者通路服務【http://localhost:9999/client/list.do】,再通過網關通路服務【http://localhost:1111/cart-service/flow/cart/list.do?token=aa】,當然了,随便你怎麼通路了,接下來我們可以看到鍊路追蹤的界面:
選擇cartgatewayserv,再點選Find Traces按鈕,可以追蹤通路鍊路
點選進去,能看到請求都經曆了哪些服務節點。再點相關link,可以檢視調用順序,并且還能看到在各個服務節點的處理的時間長度。
切換到依賴畫面,能檢視服務節點的依賴關系
好了,就介紹到這裡,如果覺得對您有幫助,請點個贊吧!