分散式鏈路追蹤的利器——Zipkin
作者:個推應用平臺基礎架構高階研發工程師 阿飛
01
業務背景
隨著微服務架構的流行,系統變得越來越複雜,單體的系統被拆成很多個模組,各個模組透過輕量級的通訊協議進行通訊,相互協作,共同實現系統功能。
單體架構時,一個請求的呼叫鏈路很清晰,一般由負載均衡器將使用者請求轉發到後端服務,由後端服務進行業務處理,需要的資料從外部的儲存中獲取,處理完請求後,再經由負載均衡器返回給使用者。
而在微服務架構中,一個請求往往需要多個模組共同協作處理,不同模組可能還依賴於不同的外部儲存,各個模組的實現技術還不盡相同,一個請求是如何在整個系統不同模組間進行流轉,整個呼叫鏈上的各個模組之間的呼叫關係如何,每個微服務處理的時間長短,處理的結果是否正確,很難去進行追蹤,而這些資訊對於整個系統運維、效能分析、故障追蹤都特別有幫助,也正因為此,才有了各種分散式鏈路追蹤的技術。
02
分散式鏈路追蹤現狀
分散式鏈路追蹤的技術有很多,有開源的也有閉源的。開源的有Jaeger、PinPoint、Zipkin、SkyWalking、CAT等,閉源的有Google Dapper、淘寶的鷹眼Tracing、新浪的Watchman、美團的MTrace等。CNCF(Cloud Native Computing Foundation)為了解決業界分散式追蹤系統跨平臺相容性問題,設計了trace的標準,提出了分散式跟蹤系統產品的統一正規化-OpenTracing,Zipkin也部分支援OpenTracing標準。
03
選擇Zipkin的原因
在實踐的過程中,基於以下原因選擇了Zipkin來進行鏈路追蹤:
• 開源,社群活躍
• 支援多種語言,Nodejs,Lua,Java都有開源實現,而我們的服務主要是這三種語言實現的
• 提供查詢API,方便二次開發
04
Zipkin的架構介紹
Zipkin的整體架構如下圖所示:
Zipkin的整體架構
(引用自Zipkin官網:)
其中:
• Instrumented client和Instrumented server需要整合在分散式系統的具體服務中,採集跟蹤資訊,呼叫Transport,把跟蹤資訊傳送給Zipkin的Server。
• Transport是Zipkin對外提供的介面,支援HTTP、Kafka、Scribe等通訊方式。
• Zipkin即Zipkin server,主要包括四個模組:
-
Collector: 用於接收各個應用服務傳輸的追蹤資訊;
-
Storage:Zipkin的後端儲存,支援In-Memory、MySql、Elasticsearch和Cassandra;
-
API:提供對外的查詢介面;
-
UI:提供對外的Web介面。
Http Tracing的時序圖
(引用自Zipkin官網:)
以上是Http Tracing的時序圖,使用者的請求/foo首先被Trace Instrumentationlan攔截,記錄下Tags,時間戳,同時在Header裡增加Trace資訊,然後再流轉到後端服務進行處理,處理完成後,正常響應,Trace Instrumentationlan攔截響應,記錄處理延時後,將Response正常返回給呼叫方,同時非同步地將Trace的Span傳送給Zipkin Server。Span中的traceId是在整個呼叫鏈路上唯一的ID,用於唯一標識一條呼叫鏈。
05
個推的Zipkin實踐
個推的微服務是基於Kubernetes和Docker進行部署的,每個微服務對應於Kubernetes中的一組Pod。
在整個微服務體系中,API閘道器是基於Openresty開發的,主要使用Lua進行開發;後端服務主要使用Node.js和Java進行開發實現。在對接Zipkin時,不同的微服務採用不同的方式進行實現。
API閘道器主要透過增加閘道器外掛(主要參考了Kong的Zipkin外掛實現)來實現與Zipkin的對接;Node.js實現的服務主要使用了中介軟體實現與Zipkin的對接;Java服務使用了spring-cloud-sleuth來與Zipkin對接。 整體的架構如下圖所示:
個推基於Zipkin的分散式鏈路追蹤系統的整體架構
其中,Zipkin也容器化部署在Kubernetes叢集中,簡化了Zipkin的搭建和部署。如下圖所示,透過Zipkin可以很方便地追蹤請求的呼叫鏈路,整個呼叫鏈上各個服務的處理耗時,響應狀態,服務間的呼叫關係都可以方便地在Zipkin中進行查詢。Zipkin對於分析整個系統的效能瓶頸,定位故障也都有很大的幫助。
Zipkin的Web介面
06
總結
Zipkin作為一個分散式鏈路追蹤系統, 有著應用侵入較小、社群活躍度較高、支援多種語言等優勢, 一般基於開源的實現稍做修改就可以實現與Zipkin的對接。因此個推在微服務架構中也引入了Zipkin,用Zipkin來追蹤微服務的呼叫關係,對微服務進行效能分析和故障診斷。未來,個推會基於Zipkin做二次開發,提供更為友好的介面。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556026/viewspace-2646266/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- zipkin分散式鏈路追蹤介紹分散式
- dubbo分散式應用中使用zipkin做鏈路追蹤分散式
- 分散式鏈路追蹤之Spring Cloud Sleuth+Zipkin最全教程!分散式SpringCloud
- 分散式鏈路追蹤技術分散式
- 分散式系統中的分散式鏈路追蹤與分散式呼叫鏈路分散式
- 使用zipKin構建NetCore分散式鏈路跟蹤NetCore分散式
- 【Springboot】例項講解Springboot整合OpenTracing分散式鏈路追蹤系統(Jaeger和Zipkin)Spring Boot分散式
- BOS分散式鏈路追蹤產品揭秘分散式
- 分散式鏈路追蹤框架的基本實現原理分散式框架
- 微服務 Zipkin 鏈路追蹤原理(圖文詳解)微服務
- 原理 | 分散式鏈路跟蹤元件 SOFATracer 和 Zipkin 模型轉換分散式元件模型
- .NET Core 中的日誌與分散式鏈路追蹤分散式
- 分散式服務呼叫鏈追蹤分散式
- 分散式鏈路追蹤自從用了SkyWalking,睡得真香!分散式
- SkyWalking —— 分散式應用監控與鏈路追蹤分散式
- 利用Zipkin追蹤Mysql資料庫呼叫鏈MySql資料庫
- Zipkin — 微服務鏈路跟蹤.微服務
- 使用Spring Cloud Sleuth實現分散式系統的鏈路追蹤SpringCloud分散式
- 鏈路追蹤
- 微服務整合Spring Cloud Zipkin實現鏈路追蹤並整合Dubbo微服務SpringCloud
- 08.Sleuth(Micrometer)+ZipKin分散式鏈路追逐分散式
- OpenTelemetry分散式追蹤分散式
- go的鏈路追蹤Go
- DHorse的鏈路追蹤
- 一文搞懂基於zipkin的分散式追蹤系統原理與實現分散式
- 一文詳解|Go 分散式鏈路追蹤實現原理Go分散式
- .NET Core整合SkyWalking+SkyAPM-dotne實現分散式鏈路追蹤分散式
- skywalking鏈路追蹤
- 分散式跟蹤系統zipkin簡介分散式
- 分散式鏈路追蹤Jaeger + 微服務Pig在Rainbond上的實踐分享分散式微服務AI
- Spring Cloud 鏈路追蹤SpringCloud
- ASP.NET Core整合Zipkin鏈路跟蹤ASP.NET
- 讓你的Nginx支援分散式追蹤Nginx分散式
- 跟我學SpringCloud | 第十一篇:使用Spring Cloud Sleuth和Zipkin進行分散式鏈路跟蹤SpringGCCloud分散式
- 輕量級的分散式日誌追蹤利器,十分鐘即可接入,從此日誌追蹤無難事分散式
- golang 接入鏈路追蹤(opentracing)Golang
- Istio Trace鏈路追蹤方案
- 「Java分享客棧」隨時用隨時翻:微服務鏈路追蹤之zipkin搭建Java微服務