天天看點

Spring Cloud的服務鍊路追蹤Sleuth

Spring Cloud Sleuth是Spring Cloud的一個元件,它的主要功能是在分布式系統中提供服務鍊路追蹤的解決方案。

為什麼需要Spring Cloud Sleuth?

微服務架構是一個分布式架構,微服務系統按業務劃分服務單元,一個微服務系統往往有很多個服務單元。由于服務單元數量衆多,業務的複雜性較高,如果出現了錯誤和異常,很難去定位。主要展現在一個請求可能需要調用很多個服務,而内部服務的調用複雜性決定了問題難以定位。是以在微服務架構中,必須實作分布式鍊路追蹤,去跟進一個請求到底有哪些服務參與,參與的順序又是怎樣的,進而達到每個請求的步驟清晰可見,出了問題能夠快速定位的目的。

在微服務系統中,一個來自使用者的請求先到到達前端A,然後通過遠端調用RPC,到達系統的中間件B、C(如負載均衡、網關等),最後到達後端服務D、E,後端經過一系列的業務邏輯計算,最後将資料傳回給使用者。對于這樣一個請求,經曆了這麼多個服務,怎麼樣将它的請求過程用資料記錄下來呢?這就需要用到服務鍊路追蹤。

目前,常見了鍊路追蹤元件有Google的Drapper、Twitter的Zipkin,以及阿裡的Eagleeye鷹眼等,它們都是非常優秀的鍊路追蹤開源元件。

建立Zipkin作為工程,作為鍊路追蹤服務中心,負責存儲鍊路資料。其他工程之間有互相之間的api調用,有的使用Feign調用,有的使用Ribbon結合RestTemplate調用。

鍊路追蹤服務中心maven引入依賴eureka-server作為服務注冊中心,引入zipkin依賴zipkin-server和zipkin server的UI界面依賴zipkin-autoconfigure-ui。

Spring Cloud的服務鍊路追蹤Sleuth

application啟動類

Spring Cloud的服務鍊路追蹤Sleuth

application.yml

Spring Cloud的服務鍊路追蹤Sleuth

其他服務提供者的工程,maven依賴要加入spring-cloud-starter-zipkin依賴。application.yml中需要配置zipkin-server的base-url

Spring Cloud的服務鍊路追蹤Sleuth

application.yml

Spring Cloud的服務鍊路追蹤Sleuth

除了上面的連結追蹤,還可以在鍊路追蹤中添加自定義資料,比如操作人等資料。也可以使用RabbitMQ傳輸鍊路資料,在Mysql資料庫中存儲鍊路資料等等,這裡就不總結了。

繼續閱讀