微服務鏈路追蹤原理

2022-07-03 19:09:11 字數 1949 閱讀 1038

在微服務橫行的時代,服務化思維逐漸成為了程式設計師的基本思維模式,但是,由於絕大部分專案只是一味地增加服務,並沒有對其妥善管理,當介面出現問題時,很難從錯綜複雜的服務呼叫網路中找到問題根源,從而錯失了止損的**時機。

而鏈路追蹤的出現正是為了解決這種問題,它可以在複雜的服務呼叫中定位問題,還可以在新人加入後台團隊之後,讓其清楚地知道自己所負責的服務在哪一環。

除此之外,如果某個介面突然耗時增加,也不必再逐個服務查詢耗時情況,我們可以直觀地分析出服務的效能瓶頸,方便在流量激增的情況下精準合理地擴容。

如果想知道乙個介面在哪個環節出現了問題,就必須清楚該介面呼叫了哪些服務,以及呼叫的順序,如果把這些服務串起來,看起來就像鏈條一樣,我們稱其為呼叫鏈。

想要實現呼叫鏈,就要為每次呼叫做個標識,然後將服務按標識大小排列,可以更清晰地看出呼叫順序,我們暫且將該標識命名為spanid。

實際場景中,我們需要知道某次請求呼叫的情況,所以只有spanid還不夠,得為每次請求做個唯一標識,這樣才能根據標識查出本次請求呼叫的所有服務,而這個標識我們命名為traceid。

現在根據spanid可以輕易地知道被呼叫服務的先後順序,但無法體現呼叫的層級關係,正如下圖所示,多個服務可能是逐級呼叫的鏈條,也可能是同時被同乙個服務呼叫。

所以應該每次都記錄下是誰呼叫的,我們用parentid作為這個標識的名字。

到現在,已經知道呼叫順序和層級關係了,但是介面出現問題後,還是不能找到出問題的環節,如果某個服務有問題,那個被呼叫執行的服務一定耗時很長,要想計算出耗時,上述的三個標識還不夠,還需要加上時間戳,時間戳可以更精細一點,精確到微秒級。

只記錄發起呼叫時的時間戳還算不出耗時,要記錄下服務返回時的時間戳,有始有終才能算出時間差,既然返回的也記了,就把上述的三個標識都記一下吧,不然區分不出是誰的時間戳。

雖然能計算出從服務呼叫到服務返回的總耗時,但是這個時間包含了服務的執行時間和網路延遲,有時候我們需要區分出這兩類時間以方便做針對性優化。那如何計算網路延遲呢?我們可以把呼叫和返回的過程分為以下四個事件。

假如在這四個事件發生時記錄下時間戳,就可以輕鬆計算出耗時,比如sr減去cs就是呼叫時的網路延遲,ss減去sr就是服務執行時間,cr減去ss就是服務響應的延遲,cr減cs就是整個服務呼叫執行的時間。

其實span塊內除了記錄這幾個引數之外,還可以記錄一些其他資訊,比如發起呼叫服務名稱、被調服務名稱、返回結果、ip、呼叫服務的名稱等,最後,我們再把相同spanid的資訊合成乙個大的span塊,就完成了乙個完整的呼叫鏈。感興趣的同學可以去深入了解一下鏈路追蹤,希望本文對你有所幫助。

skywalking原理 微服務鏈路追蹤原理

背景介紹 在微服務橫行的時代,服務化思維逐漸成為了程式設計師的基本思維模式,但是,由於絕大部分專案只是一味地增加服務,並沒有對其妥善管理,當介面出現問題時,很難從錯綜複雜的服務呼叫網路中找到問題根源,從而錯失了止損的 時機。而鏈路追蹤的出現正是為了解決這種問題,它可以在複雜的服務呼叫中定位問題,還可...

微服務的鏈路追蹤概述

微服務架構下的問題 在大型系統的微服務化構建中,乙個系統會被拆分成許多模組。這些模組負責不同的功能,組合成系 統,最終可以提供豐富的功能。在這種架構中,一次請求往往需要涉及到多個服務。網際網路應用構建在 不同的軟體模組集上,這些軟體模組,有可能是由不同的團隊開發 可能使用不同的程式語言來實現 有可能...

微服務鏈路追蹤 微服務的戰爭 選型?分布式鏈路追蹤

在經歷微服務的戰爭 級聯故障和雪崩 的 p0 級別事件後,你小手一攤便葛優躺了。開始進行自我覆盤,想起這次排查經歷,由於現在什麼基礎設施都還沒有,因此在接收到客戶反饋後,你是通過錯誤日誌進行問題檢查的。但在級聯錯誤中,錯誤日誌產生的實在是太多了,不同的服務不同的鏈路幾乎都擠在一起,修復時間都主要用在...