耐克公司的WingTips分散式跟蹤系統
分散式跟蹤是一種透過分散式網路跟蹤請求的系統,這樣能夠在複雜的微服務系統中建立一種透明的呼叫路徑,一條請求可能會經過成百上千個微服務呼叫環節,如同樹形結構一樣分散開來,如果沒有分散式跟蹤,很難確定某個微服務是否是整個路徑上的效能瓶頸。
分散式跟蹤提供了近乎實時的監控和歷史分析,它提供必要工具收集和解釋跟蹤,能夠讓你方便看到應用花費的時間。
一個分散式跟蹤系統由以下部分組成:
1.每個分散式跟蹤包含一個TraceID,代表整個跨多個伺服器或微服務的請求,這些TraceID會是唯一64位整數long型。
2.在分散式跟蹤系統中每個單元被定義為Span,Span通常分為overall-request-time和downstream-call-time兩種,前者是伺服器/微服務的整個請求花費時間,後者是下游花費時間,Span由SpanID標識,也是一種64位long型。
3.Span能夠有父Span,這樣建立跨多個伺服器/服務的基於請求行為的樹形圖,ParentSpanID是Span的SpanID的父節點。
4.所有Span包含有關整個跟蹤的TreacID。
5.Span包含SpanName,這是供人工讀取的標識,比如GET_/some/endpoint是REST請求的整個Span,或者downstream-POST_https://otherservice.com/other/endpoint是執行另外一個服務的下游呼叫Span。
6.Span包含計時資訊,一個開始時間戳和花費時間值。
Wingtips是一個基於Java 7的分散式跟蹤解決方案,有幾個模組:
wingtips-core - 提供分散式跟蹤功能的核心庫
wingtips-servlet-api - 基於Sevlet應用的外掛,能夠在一個Servlet過濾器中整合分散式跟蹤。
wingtips-zipkin - 一個易於整合Zipkin的外掛。
下面是每個請求一個執行緒框架場景下的虛擬碼演示:
如果基於非堵塞非同步的 reactive場景,透過下面幾個方法進行跟蹤:
Tracer.registerWithThread(Deque)
Tracer.unregisterFromThread()
Tracer.getCurrentSpanStackCopy()
分散式跟蹤提供了近乎實時的監控和歷史分析,它提供必要工具收集和解釋跟蹤,能夠讓你方便看到應用花費的時間。
一個分散式跟蹤系統由以下部分組成:
1.每個分散式跟蹤包含一個TraceID,代表整個跨多個伺服器或微服務的請求,這些TraceID會是唯一64位整數long型。
2.在分散式跟蹤系統中每個單元被定義為Span,Span通常分為overall-request-time和downstream-call-time兩種,前者是伺服器/微服務的整個請求花費時間,後者是下游花費時間,Span由SpanID標識,也是一種64位long型。
3.Span能夠有父Span,這樣建立跨多個伺服器/服務的基於請求行為的樹形圖,ParentSpanID是Span的SpanID的父節點。
4.所有Span包含有關整個跟蹤的TreacID。
5.Span包含SpanName,這是供人工讀取的標識,比如GET_/some/endpoint是REST請求的整個Span,或者downstream-POST_https://otherservice.com/other/endpoint是執行另外一個服務的下游呼叫Span。
6.Span包含計時資訊,一個開始時間戳和花費時間值。
Wingtips是一個基於Java 7的分散式跟蹤解決方案,有幾個模組:
wingtips-core - 提供分散式跟蹤功能的核心庫
wingtips-servlet-api - 基於Sevlet應用的外掛,能夠在一個Servlet過濾器中整合分散式跟蹤。
wingtips-zipkin - 一個易於整合Zipkin的外掛。
下面是每個請求一個執行緒框架場景下的虛擬碼演示:
import com.nike.wingtips.Span; import com.nike.wingtips.Tracer; // ======As early in the request cycle as possible====== try { // 檢查請求比如請求頭部決定父span是否存在 Span parentSpan = extractParentSpanFromRequest(request); // 開始整個請求span (對於當前執行緒會成為"current span" ,除非或直至子Span sub-span被建立) if (parentSpan == null) Tracer.getInstance().startRequestWithRootSpan("newRequestSpanName"); else Tracer.getInstance().startRequestWithChildSpan(parentSpan, "newRequestSpanName"); // 推薦在響應頭部包含整個請求的跟蹤ID addTraceIdToResponseHeaders(response, Tracer.getInstance().getCurrentSpan()); // 執行正常的請求邏輯 doRequestLogic(); } finally { // ======As late in the request/response cycle as possible====== Tracer.getInstance().completeRequestSpan(); // Completes the overall request span and logs it to SLF4J } <p class="indent"> |
如果基於非堵塞非同步的 reactive場景,透過下面幾個方法進行跟蹤:
Tracer.registerWithThread(Deque)
Tracer.unregisterFromThread()
Tracer.getCurrentSpanStackCopy()
相關文章
- 分散式系統的跟蹤系統分散式
- 分散式跟蹤系統zipkin簡介分散式
- 【分散式跟蹤系統Zipkin 介紹】分散式
- Zipkin開源分散式跟蹤系統分散式
- Dapper分散式跟蹤系統論文APP分散式
- 分散式跟蹤系統——產品對比分散式
- Dapper,大規模分散式系統的跟蹤系統APP分散式
- Dapper:谷歌的大規模分散式跟蹤系統APP谷歌分散式
- 日誌系統實戰(三)-分散式跟蹤的Net實現分散式
- 稜鏡-分散式實時計算的跟蹤校驗系統分散式
- DiagnosticSource DiagnosticListener 無侵入式分散式跟蹤分散式
- 分散式跟蹤系統的四大功能模組如何協同工作分散式
- 像跟蹤分散式服務呼叫那樣跟蹤 Go 函式呼叫鏈分散式Go函式
- 分散式追蹤系統dapper分散式APP
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 中介軟體---分散式跟蹤---Pinpoint分散式
- Welcome to YARP - 8.分散式跟蹤分散式
- 微服務分散式跟蹤工具Brave簡介微服務分散式
- ATC系統跟蹤事項
- 分散式應用追蹤系統 - Skywalking分散式
- 分散式追蹤系統,最佳核心設計實踐分散式
- OpenTracing——設計分散式追蹤系統的有效方法分散式
- 分散式系統2:分散式系統中的時鐘分散式
- Dubbo 整合 Pinpoint 做分散式服務請求跟蹤分散式
- 使用zipKin構建NetCore分散式鏈路跟蹤NetCore分散式
- 使用Spring Cloud Sleuth和OpenTelemetry實現分散式跟蹤SpringCloud分散式
- 分散式 - 分散式系統的特點分散式
- Centos下分散式跟蹤工具Pinpoint的完整部署記錄CentOS分散式
- 18款最佳Bug跟蹤管理系統
- 部署Zipkin分散式效能追蹤日誌系統的操作記錄分散式
- 使用Spring Cloud Sleuth實現分散式系統的鏈路追蹤SpringCloud分散式
- 分散式系統分散式
- Dream缺陷跟蹤系統 2.0版本
- Ftrace使用指南及跟蹤系統呼叫
- OpenTelemetry分散式追蹤分散式
- 分散式系統:系統模型分散式模型
- 原理 | 分散式鏈路跟蹤元件 SOFATracer 和 Zipkin 模型轉換分散式元件模型
- 分散式呼叫鏈跟蹤工具Jaeger?兩分鐘極速體驗分散式