分布式鏈路追蹤技術適用場景

2021-10-19 05:36:01 字數 1214 閱讀 9581

為了⽀撐⽇益增⻓的龐⼤業務量,我們會使⽤微服務架構設計我們的系統,使得我們的系統不僅能夠通過集群部署抵擋流量的衝擊,⼜能根據業務進⾏靈活的擴充套件。

那麼,在微服務架構下,⼀次請求少則經過三四次服務調⽤完成,多則跨越⼏⼗個甚⾄是上百個服務節點。那麼問題接踵⽽來:

如何動態展示服務的調⽤鏈路?(⽐如a服務調⽤了哪些其他的服務—依賴關係)

如何分析服務調⽤鏈路中的瓶頸節點並對其進⾏調優?(⽐如a—>b—>c,c服務處理時間特別⻓)

如何快速進⾏服務鏈路的故障發現?

這就是分布式鏈路追蹤技術存在的⽬的和意義。

如果我們在⼀個請求的調⽤處理過程中,在各個鏈路節點都能夠記錄下⽇志,並最終將⽇志進⾏集中視覺化展示,那麼我們想監控調⽤鏈路中的⼀些指標就有希望了~~~⽐如,請求到達哪個服務例項?請求被處理的狀態怎樣?處理耗時怎樣?這些都能夠分析出來了…

分布式環境下基於這種想法實現的監控技術就是就是分布式鏈路追蹤(全鏈路追蹤)。

分布式鏈路追蹤技術已然成熟,產品也不少,國內外都有,⽐如

本質:記錄⽇志,作為⼀個完整的技術,分布式鏈路追蹤也有⾃⼰的理論和概念。

微服務架構中,針對請求處理的調⽤鏈可以展現為⼀棵樹,示意如下

上圖描述了⼀個常⻅的調⽤場景,⼀個請求通過⽹關服務路由到下游的微服務-1,然後微服務-1調⽤微服務-2,拿到結果後再調⽤微服務-3,最後組合微服務-2和微服務-3的結果,通過⽹關返回給⽤戶

每⼀個span都會有⼀個唯⼀跟蹤標識 span id,若⼲個有序的 span 就組成了⼀個trace。span可以認為是⼀個⽇志資料結構,在⼀些特殊的時機點會記錄了⼀些⽇志資訊,⽐如有時間戳、spanid、traceid,parentide等,span中也抽象出了另外⼀個概念,叫做事件,核⼼事件如下:

spring cloud sleuth (追蹤服務框架)可以追蹤服務之間的調⽤,sleuth可以記錄⼀個服務請求經過哪些服務、服務處理時⻓等,根據這些,我們能夠理清各微服務間的調⽤關係及進⾏問題追蹤分析。

注意:我們往往把spring cloud sleuth 和 zipkin 一起使用,把 sleuth 的資料資訊傳送給 zipkin 進行聚合,利用 zipkin 儲存並展示資料。

spring cloud 分布式鏈路追蹤

微服務之間進行呼叫 那麼如果我負責乙個模組 別人負責另乙個模組 我呼叫了他的方法 測試那邊卻報了錯 那是我的問題還是他的問題 這個時候大家應該就能想到日誌可以解決這個問題 如何使用日誌呢 先在配置檔案中加 logging path d logs poppy mall 日誌的存放位址最好再加個專案名的...

docker zipkin(分布式鏈路追蹤)實踐

參考 dependenciesspring name test 在zipkin上顯示的服務名,不寫則是 default zipkin base url zipkin服務的位址 sender type web 網上有人在zipkin上查不到記錄,說加上這個即可,但本人親測不加也是可以查到記錄 sleu...

zookeeper適用場景 分布式鎖實現

在zookeeper應用場景有關於分布式集群配置檔案同步問題的描述,設想一下如果有100臺機器同時對同一臺機器上某個檔案進行修改,如何才能保證文字不會被寫亂,這就是最簡單的分布式鎖,本文介紹利用zk實現分布式鎖。下面是寫鎖的實現步驟 分布式寫鎖 create乙個persistent型別的znode,...