1. 程式人生 > >關於分散式鏈路追蹤的一些記錄

關於分散式鏈路追蹤的一些記錄

  • 基本原理

    目前所有的分散式鏈路追蹤都是來自於谷歌的一篇論文。論文地址如下:

https://www.jianshu.com/p/cdefc9971951?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

核心資料結構

Annotation(用途:用於定位一個request的開始和結束,cs/sr/ss/cr含有額外的資訊,比如說時間點)
  cs:Client Start,表示客戶端發起請求一個span的開始
  sr:Server Receive,表示服務端收到請求
  ss:Server Send,表示服務端完成處理,並將結果傳送給客戶端
   cr:Client Received,表示客戶端獲取到服務端返回資訊
注意:時間點計算
sr-cs:網路延遲
ss-sr:邏輯處理時間
cr-cs:整個流程時間
BinaryAnnotation(用途:提供一些額外資訊,一般已key-value對出現)
Span:一個請求(包含一組Annotation和BinaryAnnotation);它是基本工作單元,一次鏈路呼叫(可以是RPC,DB等沒有特定的限制)建立一個span,通過一個64位ID標識它。span通過還有其他的資料,例如描述資訊,時間戳,key-value對的(Annotation)tag資訊,parent-id等,其中parent-id 可以表示span呼叫鏈路來源,通俗的理解span就是一次請求資訊

Trace:類似於樹結構的Span集合,表示一條呼叫鏈路,存在唯一標識 trace通過traceId、spanId和parentId,被收集到的span會匯聚成一個tree,從而提供出一個request的整體流程。

主要產品
zipkin ,阿里鷹眼,ELK,大眾點評cat ,pinpoint,Hlog(亞信自研)
其他付費產品:聽雲

主要實現模式:探針(JAVA),埋點

待詳細記錄:ZIPKIN原始碼分析

zipkin主要涉及四個元件 collector storage Query web UI
Collector接收各service傳輸的資料
Cassandra作為Storage的一種,也可以是mysql等,預設儲存在記憶體中。也可以是elasticsearch 
Query負責查詢Storage中儲存的資料,提供簡單的JSON API獲取資料,主要提供給web UI使用

Web 提供簡單的web介面

提出的一些思考

  1. 該在如何埋點
  2. 該如何記錄業務資訊
  3. 如何實現記錄之後的快速檢索