3個(gè)開源分布式跟蹤系統(tǒng),都很不錯(cuò)!
分布式跟蹤系統(tǒng)使用戶能夠通過分布在多個(gè)應(yīng)用程序,服務(wù)和數(shù)據(jù)庫以及代理等中介上的軟件系統(tǒng)來跟蹤請(qǐng)求。這樣可以更深入地了解軟件系統(tǒng)中發(fā)生的情況。這些系統(tǒng)生成圖形表示,顯示請(qǐng)求在每個(gè)步驟上花費(fèi)了多少時(shí)間并列出每個(gè)已知步驟。
用戶可以確定系統(tǒng)在哪里遇到延遲或阻塞。當(dāng)請(qǐng)求開始失敗時(shí),操作員和開發(fā)人員可以確切地看到問題的開始位置,而不是像二進(jìn)制搜索樹那樣測試系統(tǒng)。這還可以揭示從部署到部署可能發(fā)生的性能變化。通過警告異常行為而不是讓客戶告訴你,***自動(dòng)捕獲回歸。
跟蹤事件是如何工作的?每個(gè)請(qǐng)求都會(huì)獲得一個(gè)特殊的ID,通常會(huì)將其注入到標(biāo)頭中。此ID唯一標(biāo)識(shí)該事務(wù)。此事務(wù)通常稱為跟蹤。跟蹤是整個(gè)事務(wù)的整體抽象概念。每個(gè)跟蹤都由span組成。這些span是正在執(zhí)行的實(shí)際工作,如服務(wù)調(diào)用或數(shù)據(jù)庫請(qǐng)求。每個(gè)span也有一個(gè)唯一的ID。span可以創(chuàng)建稱為子span的后續(xù)span,并且子span可以具有多個(gè)父級(jí)。
OpenTracing API
OpenTracing是一種源自Zipkin的規(guī)范,旨在提供跨平臺(tái)兼容性。它提供了供應(yīng)商中立的API,用于向應(yīng)用程序添加跟蹤并將數(shù)據(jù)傳遞到分布式跟蹤系統(tǒng)。為OpenTracing規(guī)范編寫的庫可以與任何符合OpenTracing的系統(tǒng)一起使用。Zipkin,Jaeger和Appdash是采用開放標(biāo)準(zhǔn)的開源工具的例子,但即使是像Datadog和Instana這樣的專有工具也在采用它。隨著OpenTracing無處不在,這種情況有望繼續(xù)下去。
OpenCensus
有OpenTracing,但是OpenCensus呢?它是競爭標(biāo)準(zhǔn),完全不同的東西,還是互補(bǔ)的東西?
OpenTracing專注于建立開放的API和規(guī)范,而不是針對(duì)每種語言和跟蹤系統(tǒng)的開放實(shí)現(xiàn)。OpenCensus不僅提供規(guī)范,還提供語言實(shí)現(xiàn)和有線協(xié)議。它還包括通過包含通常在分布式跟蹤系統(tǒng)范圍之外的其他度量標(biāo)準(zhǔn)來進(jìn)行跟蹤。
OpenCensus允許在運(yùn)行應(yīng)用程序的主機(jī)上查看數(shù)據(jù),但它還具有可插拔的導(dǎo)出系統(tǒng),用于將數(shù)據(jù)導(dǎo)出到中央聚合器。
二者有重疊。一個(gè)不一定比另一個(gè)好,但重要的是要知道每個(gè)做什么和不做什么。OpenTracing主要是一個(gè)規(guī)范。OpenCensus為本地組件提供了一種整體方法,具有更多的觀點(diǎn),但仍需要其他系統(tǒng)進(jìn)行遠(yuǎn)程聚合。
Zipkin
是最早的此類系統(tǒng)之一。它是由Twitter基于Google Dapper論文開發(fā)的,內(nèi)容涉及Google使用的內(nèi)部系統(tǒng)。Zipkin是使用Java編寫的,它可以使用Cassandra或ElasticSearch作為可擴(kuò)展的后端。大多數(shù)公司應(yīng)該對(duì)其中一種選擇感到滿意。支持***的Java版本是Java 6.它還使用Thrift二進(jìn)制通信協(xié)議,該協(xié)議在Twitter堆棧中很流行,并作為Apache項(xiàng)目托管。
該系統(tǒng)由reporters(客戶端),收集器(collectors),查詢服務(wù)和Web UI組成。Zipkin通過在事務(wù)上下文中僅傳輸跟蹤ID來通知接收者正在進(jìn)行跟蹤,從而保證生產(chǎn)中的安全。然后將每個(gè)報(bào)告器中收集的數(shù)據(jù)異步傳輸?shù)绞占?。收集器將這些span存儲(chǔ)在數(shù)據(jù)庫中,并且Web UI以可使用的格式將該數(shù)據(jù)呈現(xiàn)給最終用戶。向收集器傳遞數(shù)據(jù)可以通過三種不同的方法進(jìn)行:HTTP,Kafka和Scribe。
Zipkin與OpenTracing標(biāo)準(zhǔn)兼容,流行的Spring框架有一個(gè)名為Spring Cloud Sleuth的組件,它與Zipkin兼容。
Jaeger
Jaeger是Uber Technologies的一個(gè)新項(xiàng)目,CNCF已將其作為孵化項(xiàng)目采用。它是用Golang編寫的,因此你不必?fù)?dān)心在主機(jī)上安裝依賴項(xiàng)或者解釋器或語言虛擬機(jī)的任何開銷。與Zipkin類似,Jaeger也支持Cassandra和ElasticSearch作為可擴(kuò)展的存儲(chǔ)后端。Jaeger還完全兼容OpenTracing標(biāo)準(zhǔn)。
Jaeger的架構(gòu)與Zipkin類似,包括客戶端(reporters),收集器,查詢服務(wù)和Web UI,但它在每個(gè)主機(jī)上都有一個(gè)本地聚合數(shù)據(jù)的代理。代理通過UDP連接接收數(shù)據(jù),并將其批處理并發(fā)送給收集器。收集器以Thrift協(xié)議的形式接收該數(shù)據(jù),并將該數(shù)據(jù)存儲(chǔ)在Cassandra或ElasticSearch中。查詢服務(wù)可以直接訪問數(shù)據(jù)存儲(chǔ)并將該信息提供給Web UI。
默認(rèn)情況下,用戶不會(huì)從Jaeger客戶端獲取所有跟蹤。系統(tǒng)會(huì)對(duì)通過每個(gè)客戶端的0.1%(1/1000)跟蹤進(jìn)行采樣。保留和傳輸所有跟蹤對(duì)于大多數(shù)系統(tǒng)來說有點(diǎn)壓力。但是,可以通過配置客戶端進(jìn)行配置的代理來增加或減少這種情況。然而,這種抽樣并不是完全隨機(jī)的,它正在變得越來越好。Jaeger使用概率抽樣,試圖對(duì)是否應(yīng)該對(duì)新蹤跡進(jìn)行抽樣進(jìn)行有根據(jù)的猜測。自適應(yīng)采樣是其路線圖,它將通過添加額外的上下文來制定決策來改進(jìn)采樣算法。
Appdash
Appdash是一個(gè)用Golang編寫的分布式跟蹤系統(tǒng),就像Jaeger一樣。它是由Sourcegraph基于Google的Dapper和Twitter的Zipkin創(chuàng)建的。與Jaeger和Zipkin類似,Appdash支持OpenTracing標(biāo)準(zhǔn)。
Appdash的架構(gòu)主要由三個(gè)部分組成:客戶端,本地收集器和遠(yuǎn)程收集器。沒有很多文檔,所以這個(gè)描述來自測試系統(tǒng)和查看代碼。Appdash中的客戶端會(huì)添加到你的代碼中。 Appdash提供Python,Golang和Ruby實(shí)現(xiàn),但OpenTracing庫可以與Appdash的OpenTracing實(shí)現(xiàn)一起使用??蛻舳耸占痵pan并將它們發(fā)送到本地收集器。然后,本地收集器將數(shù)據(jù)發(fā)送到運(yùn)行其自己的本地收集器的集中式Appdash服務(wù)器,該收集器是系統(tǒng)中所有其他節(jié)點(diǎn)的遠(yuǎn)程收集器。















 
 
 







 
 
 
 