天天看點

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

一、概述

軟體項目随着業務發展,一個單體的應用的問題會暴露出來,各個開發人員開發不同的功能子產品,造成代碼沖突,單體應用上線必須所有功能一起上線,風險較大。這時項目必然需要被拆分,拆分為一個個獨立的應用服務,拆分後會導緻系統服務間調用鍊路愈發複雜。

此時,一個前端請求可能最終需要調用多個後端服務才能完成實作,當整個請求不可用出現問題時,我們是沒有辦法判斷請求是由哪個後端服務引發問題,這時我們需要快速定位故障點,找到調用異常的服務,跟進一個請求到底有哪些服務參與,參與順序是怎樣,進而達到每個請求的步驟清晰可見。于是就有了分布式系統調用跟蹤的需求。

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

這些開源元件都是基于Google的Dapper。 Google在2010年發表了論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,這篇文章是業内實作鍊路追蹤的标杆和理論基礎,具有非常大的參考價值。

二、Spring Cloud Sleuth

1、基本概念

微服務跟蹤(sleuth)其實是一個工具,它在整個分布式系統中能跟蹤一個使用者請求的過程(包括資料采集,資料傳輸,資料存儲,資料分析,資料可視化),捕獲這些跟蹤資料,就能建構微服務的整個調用鍊的視圖,這是調試和監控微服務的關鍵工具。

Spring Cloud Sleuth有4個特點

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

對于開發者來說,如果想要封裝其他的架構,就需要對跟蹤的資料模型有一個清晰的認識:

Span:基本工作單元,發送一個遠端排程任務 就會産生一個Span,就是每個方法調用的id。

Trace :一組代表一次使用者請求所包含的spans,其中根span隻有一個。

Annotation:包括一個值,時間戳,主機名。用來及時記錄一個事件的,一些核心注解用來定義一個請求的開始和結束 。這些注解包括以下:

cs - Client Sent -用戶端發送一個請求,這個注解描述了這個Span的開始

sr - Server Received -服務端獲得請求并準備開始處理它,如果将其sr減去cs時間戳便可得到網絡傳輸的時間。

ss - Server Sent (服務端發送響應)–該注解表明請求處理的完成(當請求傳回用戶端),如果ss的時間戳減去sr時間戳,就可以得到伺服器請求的時間。

cr - Client Received (用戶端接收響應)-此時Span的結束,如果cr的時間戳減去cs時間戳便可以得到整個請求所消耗的時間。

2、詳細說明

一般情況下,分布式服務跟蹤系統,主要包括有三部分:資料收集、資料存儲和資料展示。根據系統大小不同,每一部分的結構又有一定變化。譬如,對于大規模分布式系統,資料存儲可分為實時資料和全量資料兩部分,實時資料用于故障排查(troubleshooting),全量資料用于系統優化;資料收集除了支援平台無關和開發語言無關系統的資料收集,還包括異步資料收集(需要跟蹤隊列中的消息,保證調用的連貫性),以及確定更小的侵入性;資料展示又涉及到資料挖掘和分析。雖然每一部分都可能變得很複雜,但基本原理都類似。

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

服務追蹤的追蹤單元是從客戶發起請求(request)抵達被追蹤系統的邊界開始,到被追蹤系統向客戶傳回響應(response)為止的過程,稱為一個“trace”。每個 trace 中會調用若幹個服務,為了記錄調用了哪些服務,以及每次調用的消耗時間等資訊,在每次調用服務時,埋入一個調用記錄,稱為一個“span”。這樣,若幹個有序的 span 就組成了一個 trace。在系統向外界提供服務的過程中,會不斷地有請求和響應發生,也就會不斷生成 trace,把這些帶有span 的 trace 記錄下來,就可以描繪出一幅系統的服務拓撲圖。附帶上 span 中的響應時間,以及請求成功與否等資訊,就可以在發生問題的時候,找到異常的服務;根據曆史資料,還可以從系統整體層面分析出哪裡性能差,定位性能優化的目标。

Spring Cloud Sleuth為服務之間調用提供鍊路追蹤。通過Sleuth可以很清楚的了解到一個服務請求經過了哪些服務,每個服務處理花費了多長。進而讓我們可以很友善的理清各微服務間的調用關系。此外Sleuth可以幫助我們:

耗時分析: 通過Sleuth可以很友善的了解到每個采樣請求的耗時,進而分析出哪些服務調用比較耗時;

可視化錯誤: 對于程式未捕捉的異常,可以通過內建Zipkin服務界面上看到;

鍊路優化: 對于調用比較頻繁的服務,可以針對這些服務實施一些優化措施。

spring cloud sleuth可以結合zipkin,将資訊發送到zipkin,利用zipkin的存儲來存儲資訊,利用zipkin ui來展示資料。

三、配置

1、通過Docker 部署zipkin server

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

使用官方鏡像位址:

https://hub.docker.com/r/openzipkin/zipkin

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

2、在微服務項目引入zipkin的支援依賴

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

3、配置檔案,基于Apollo。

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置

4、驗證體驗

springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置
springcloud 鍊路追蹤_微服務SpringCloud之鍊路追蹤一、概述二、Spring Cloud Sleuth三、配置