日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

微服務平臺之全鏈路追蹤

 

轉載本文需注明出處:微信公眾號EAWorld,違者必究。

 

前言:

 

隨著微服務架構技術的普及和廣泛在企業應用中落地,由于微服務架構本身的特性,架構由一系列相對獨立的細粒度的服務組成,一個完整的業務邏輯調用請求的背后可能牽涉后端幾個、幾十個甚至上百個服務接口,每個服務可能是由不同的團隊開發,使用了不同的編程語言,還有可能部署在不同的機器上,分布在不同的數據中心,對于這樣的一個邏輯調用關系,如果在調用過程中發生問題,比如說調用失敗,或者調用過程響應很慢,如何在這樣一個分布式環境下快速定位問題所在、快速分析業務處理中的響應慢的瓶頸在哪?多個微服務之間存在調用關系,如何在系統運行時總覽一個系統中微服務間的拓撲關系?如何完整還原一次請求的鏈路情況?

以上這些問題可以借助鏈路追蹤技術進行解決。鏈路追蹤組件通過在微服務應用中以代碼侵入或者非侵入的方式進行數據表示、埋點、傳遞、收集、存儲、展示等技術手段,達到將一次分布式請求還原成調用鏈路,將一次分布式請求的調用情況集中展示,比如各個服務節點上的耗時、請求具體到達哪臺機器上、每個服務節點的請求狀態等等。

 

目錄:

 

1.鏈路追蹤的應用場景

2.鏈路追蹤基本原理

3.鏈路追蹤的Demo實現

4.普元微服務平臺的鏈路追蹤應用

 

1.鏈路追蹤的應用場景

移動平臺8.0打開了以往eclipse平臺的枷鎖,全面擁抱了主流的VSCode編輯器,包括支持實用的cli命令行支持、及優秀的跨平臺開發框架ReactNative。

微服務平臺之全鏈路追蹤

 

在微服務架構下,分布式系統變得日趨復雜,越來越多的組件開始走向分布式化,如微服務、分布式數據庫、分布式緩存等,使得后臺服務構成了一種復雜的分布式網絡,這樣一個場景下,對于用戶的每一次請求調用,后端執行了多少組件間的調用無法知曉,由于分布式的調用,增加了程序調用異常的錯誤率,在這樣的應用場景下,新的架構技術帶來了新的問題。

場景下的關鍵問題

1. 如何在請求發生異常時快速定義問題所在

2. 如何在請求響應慢的時候快速找出慢的原因

3. 如何通過日志文件快速定位問題的根本原因

傳統的問題排查手段

一般在系統發生問題時,比如系統異常或者系統性能出現問題時,通常都是從系統記錄的日志文件中找出蛛絲馬腳,而對于微服務架構下的分布式部署,日志文件的分散,想從日志中查找問題工作量很大。對于用戶某一次請求調用后端哪些服務,每個服務執行情況,想從日志中獲得更是不可能的事。

對于傳統的監控告警平臺也緊針對平臺資源的監控包括cpu、內存、網絡帶寬情況等,對業務微服務應用的指標(平均響應時間、慢端點情況等)的監控顯得無從下手。

微服務平臺之全鏈路追蹤

 

在這樣的背景下,新的監控體系下的細分領域-鏈路追蹤問世了。

微服務平臺之全鏈路追蹤

 

首先,我們來看看在系統監控的體系下具體的細分領域的專注點:

Logging - 用于記錄離散的事件。例如,應用程序的調試信息或錯誤信息。它是我們診斷問題的依據。

Metrics - 用于記錄可聚合的數據。例如,隊列的當前深度可被定義為一個度量值,在元素入隊或出隊時被更新;HTTP 請求個數可被定義為一個計數器,新請求到來時進行累加。

Tracing - 用于記錄請求范圍內的信息。例如,一次遠程方法調用的執行過程和耗時。它是我們排查系統性能問題的利器。

2.鏈路追蹤基本原理

在每個請求調用的入口和出口進行代碼埋點記錄調用之間的關系、每個調用處理時間點信息。

通過調用關系梳理出一次請求的完整鏈路還原、請求具體到達哪臺機器。

通過每次處理記錄的時間點,計算出相關的調用執行時間、響應時間、網絡延時。

對調用請求量進行統計。

顯示鏈路拓撲結構、應用依賴關系。

微服務平臺之全鏈路追蹤

 

Trace:指一個請求經過后端所有服務的路徑,每一條鏈路都用一個全局唯一的traceid來標識。

Span:鏈路中的調用由span來表示,每個span由spanid和parentid來標識,可以記錄調用的父子關系。

Timestamp:調用點的時間戳,記錄每個執行點的時間信息。

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

微服務平臺之全鏈路追蹤

 

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

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

3.鏈路追蹤的Demo實現

前面我們介紹了鏈路追蹤的技術原理,以及相關的實現鏈路追蹤的開源組件,那么我們實際在項目中要怎么做,是否需要根據技術原理去實現底層的相關開發。通過這個章節,我簡單的通過一個demo去演示如何在微服務架構系統中完成鏈路追蹤的功能。

我們簡單描述一下demo的相關情況,首先demo是要基于微服務架構的,那么我們提供2個微服務應用(訂單服務、產品服務),并且提供一個服務注冊發現中心,訂單服務會調用產品服務,并且是通過注冊中心去發現服務調用服務,這樣從前端請求調用訂單服務,再由訂單服務調用產品服務,完成了一個簡單的鏈路調用,需求鏈路很短,只有兩次調用,足夠演示demo的鏈路追蹤功能。

微服務平臺之全鏈路追蹤

 

通過demo將教打家一步一步的去實現鏈路的相關功能,包括還原請求的完整調用鏈路情況,能夠查看請求過程中訂單服務,產品服務執行的耗時情況,總的請求響應時間,并且可以根據請求鏈路的traceid查看到對應的請求處理的日志信息。

微服務平臺之全鏈路追蹤

 

首先創建springboot項目,通過依賴eureka組件,提供服務的注冊中心,實現服務的注冊與發現。

添加依賴

微服務平臺之全鏈路追蹤

 

Properties配置信息

微服務平臺之全鏈路追蹤

 

再添加兩個springboot項目,一個訂單服務,一個產品服務

微服務平臺之全鏈路追蹤

 

由于服務需要注冊到注冊中心,因此兩個項目需要添加依賴

微服務平臺之全鏈路追蹤

 

并添加配置信息

微服務平臺之全鏈路追蹤

 

并且訂單服務需要調用產品服務的方法,在demo中我們使用feign的方式進行服務調用,因此在訂單服務項目中需要添加依賴

微服務平臺之全鏈路追蹤

 

由于是demo,因此我們服務中的方法就簡單通過返回字符串的方式實現。

至此我們啟動兩個微服務應用,可以在注冊中心中看到兩個服務都已經注冊上來,再通過瀏覽器請求訂單服務的接口,可以看到后端通過調用產品服務的接口,并返回信息。

微服務平臺之全鏈路追蹤

 

到目前為止,我們只是構建好了微服務應用,對應鏈路追蹤功能還沒有實現,其實在微服務架構下實現鏈路追蹤很簡單,畢竟有很多開源的組件封裝了底層實現原理,我們只需要引用這些組件就可以實現鏈路追蹤功能,在demo中我通過skywalking來進行鏈路追蹤,由于skywalking本身的特性無需代碼侵入,只需要以探針的方式啟動微服務應用即可。并自動采集服務調用的相關信息,寫入數據庫,然后通過自帶的dashboard查看相關信息。

首先我們先下載skywalking

微服務平臺之全鏈路追蹤

 

其中,agent目錄是應用啟動時用的代理,bin目錄是skywalking后端服務和dashboard,在bin目錄執行startup.bat文件,啟動服務。

在訂單服務和產品服務的項目啟動配置中,加上jvm參數,以探針方式啟動2個服務應用

微服務平臺之全鏈路追蹤

 

啟動后,我們可以通過skywalking自帶的dashboard查看信息。

微服務平臺之全鏈路追蹤

 

可以看到請求的鏈路情況,以及每個路徑上的處理時間,總的響應時間等信息。

還有一個目標就是,如何將鏈路跟我們實際的日志記錄進行綁定,這樣方便在某個鏈路出現問題時,我們可以針對這個具體的鏈路去查看具體問題原因。

在demo中,我們通過logback記錄日志,添加依賴

微服務平臺之全鏈路追蹤

 

目前很多的鏈路追蹤組件都已經實現了與日志組件的集成,只需要引入依賴,即可完成將鏈路traceid對應寫入到日志中。

微服務平臺之全鏈路追蹤

 


微服務平臺之全鏈路追蹤

 

在代碼中加入寫日志的代碼

微服務平臺之全鏈路追蹤

 

增加配置信息,以及logback-spring.xml文件

微服務平臺之全鏈路追蹤

 


微服務平臺之全鏈路追蹤

 

可以看到控制臺日志中,記錄的日志前面都加上了TID信息,也就是traceid。

4.普元微服務平臺的鏈路追蹤應用

上面的demo只是簡單的驗證了如何快速通過第三方組件實現微服務架構下的鏈路追蹤功能,對于在實際項目應用中我們需要進行優化和整合,這章節中介紹我們普元微服務平臺在鏈路追蹤中的相關應用場景:

1. 系統拓撲結構

2. 應用運行時

3. 業務鏈路

4. 跟蹤日志

5. 服務統計

微服務平臺之全鏈路追蹤

 

在鏈路追蹤下,系統可以根據請求調用關系繪制去系統拓撲結構,通過系統拓撲結構你可以清楚知道當前系統下有多少微服務應用,微服務應用間是否有調用關系,每個服務的具體概況。

 

由于微服務架構下,一個系統的微服務相對比較多,如果沒有這個系統拓撲結構,后期對系統的情況,尤其是系統間的調用依賴關系跟蹤也很困難。

微服務平臺之全鏈路追蹤

 

 

應用運行時,通過收集統計相關調用請求信息,計算相關性能指標,幫助系統管理員運維人員快速了解系統的相關情況,主要是微服務應用實例的能力指標,比如平均響應時間、平均響應成功率等指標。

 

由于普元微服務平臺的架構特性,每一個服務對應多個應用實例組,因此在查看時可以選擇具體實例組下的實例節點。幫助我們了解應用節點的性能,以及慢節點情況。

微服務平臺之全鏈路追蹤

 

業務鏈路,快速查看某個應用、甚至應用下某個具體的操作的完整鏈路調用情況,鏈路中每個過程處理的時間信息,每個鏈路上顯示traceid信息,并提供快速復制功能,方便用戶在跟蹤日志中快速查看此次鏈路對應的日志信息。

 

根據請求中的時間信息,在請求響應慢的時候追溯具體慢的操作。

微服務平臺之全鏈路追蹤

 

鏈路調用的時序情況,通過不同顏色區分應用系統,可以查看具體調用的詳細信息(組件、url、請求方式、異常信息等)。

微服務平臺之全鏈路追蹤

 

鏈路日志,前面我們已經完成了請求完整鏈路的還原,不過這些信息還不能查出根本原因,對應異常發生的根本原因,我們有時還需要通過系統記錄的日志文件進行查看,通過日志文件記錄的錯誤信息進行排查根本原因。

我們在查看日志文件時,也不是直接顯示日志文件所有內容,而是通過以與鏈路對應的方式,顯示每個鏈路環節中記錄的日志信息,查看異常詳細原因。

另外,在跟蹤日志模塊,我們針對性的過濾篩選錯誤日志、事務日志等信息。

微服務平臺之全鏈路追蹤

 

 

平臺通過鏈路組件采集的請求處理信息,對這些信息進行統計,從多個維度提供統計數據供運維人員進行參考分析

 

統計某個應用、某個請求路徑的總請求數、正常響應數、錯誤響應數、最長處理時間、最少處理時間、平均處理時間以及各類異常處理的統計

微服務平臺之全鏈路追蹤

 

在平臺正常運行一段時間后,運維人員普遍關注平臺的運行情況,尤其是哪些請求比較頻繁、哪些請求比較耗時、哪些請求錯誤率比較高、哪些錯誤數多,而這些信息對于運維人員比較敏感,因此平臺中提供直接顯示統計數據的方式供參考。

本文主要介紹微服務架構下的鏈路追蹤的應用場景,主要解決哪些問題,對于一個剛接觸鏈路追蹤的新人來說,如何快速上手將鏈路追蹤引入到項目中,也將我們普元微服務平臺下的鏈路追蹤的應用簡單介紹了一下,便于大家在項目中進行實際的應用參考。文中沒有對目前市場上開源的鏈路追蹤的組件做過多介紹以及之間的比較,也沒有對skywalking這個組件的使用配置做詳細介紹,相關的這些知識我們有專欄介紹,大家可以查看歷史文章進行了解。

 

關于作者:軒雨,普元產品經理,主要負責公司微服務、容器云相關產品的研發和實施,在分布式架構、微服務、DevOps、容器云、軟件工程等領域方向具有較深的積累,擁有十多年的產品研發與多個大型平臺項目管理經驗。

關于EAWorld:微服務,DevOps,數據治理,移動架構原創技術分享。

分享到:
標簽:微服 鏈路 追蹤
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定