天天看點

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

一. 為什麼要進行鍊路追蹤?

微服務架構是一種分布式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,是以需要有個東西去跟蹤請求鍊路,記錄一個請求都調用了哪些服務單元,調用順序是怎麼樣的以及在各個服務單元處理的時間長短。常見的服務鍊路追蹤元件有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

順序啟動後,注冊中心如圖所示:

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

接下來我們來看具體代碼實作。

四.Zipkin Server端代碼實作

1.搭建項目,代碼目錄結構如下:

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

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.建立啟動類,如圖所示:

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

最主要是應用到了@EnableZipkinServer注解,用于開啟Zipkin Server功能。

4. 建立配置檔案,如圖所示:

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

要向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】,當然了,随便你怎麼通路了,接下來我們可以看到鍊路追蹤的界面:

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

選擇cartgatewayserv,再點選Find Traces按鈕,可以追蹤通路鍊路

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

點選進去,能看到請求都經曆了哪些服務節點。再點相關link,可以檢視調用順序,并且還能看到在各個服務節點的處理的時間長度。

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

切換到依賴畫面,能檢視服務節點的依賴關系

SpringCloud系列十:使用zipkin進行服務鍊路追蹤

好了,就介紹到這裡,如果覺得對您有幫助,請點個贊吧!

繼續閱讀