分布式 虚拟时间和虚拟同步_分布式虚拟跟踪
分布式 虛擬時間和虛擬同步
跟蹤提供了對系統(tǒng)的可見性,使開發(fā)人員和操作人員可以在運(yùn)行時觀察應(yīng)用程序。 當(dāng)系統(tǒng)不斷增長并與更多微服務(wù)進(jìn)行交互時,跟蹤變得非常有價值。 在這樣的環(huán)境中,這些痕跡非常棒,可以定位導(dǎo)致性能下降的故障和瓶頸。
在這篇文章中,我們將幫助您詳細(xì)了解跟蹤。 我們將通過示例跟蹤事件和問題管理過程中如何使用跟蹤。
什么是痕跡?
在檢查如何捕獲跟蹤及其組成之前,讓我們看一下跟蹤的正式定義:
這樣,您可以將跟蹤視為一棵樹,其根節(jié)點(diǎn)是用戶進(jìn)行的交互,并且這些節(jié)點(diǎn)代表所有參與處理請求和準(zhǔn)備響應(yīng)的微服務(wù)。
分布式跟蹤的外觀如何?
上面的示例說明了一個由七個跨度組成的跡線。 要了解跨度和軌跡,請看一下定義:
- 跟蹤公開了通過分布式系統(tǒng)的執(zhí)行路徑。 跡線由一個或多個跨度組成。
- 跟蹤中的跨度表示執(zhí)行路徑中的一項微服務(wù)。 例如,信用評分檢查可能是貸款申請?zhí)幚磉^程中的跨度。 跨度可以創(chuàng)建多個子跨度,而一個子跨度恰好具有一個父跨度。
因此,將跨度組合到跟蹤中可以揭示整個分布式系統(tǒng)中請求處理的流程。 可視化跟蹤使用父子表示法來顯示跨度之間的依賴性以及每個跨度執(zhí)行所需的時間。
如何捕獲跟蹤?
所有跟蹤解決方案都要求參與處理入站請求的微服務(wù)由代理庫進(jìn)行檢測。 每個這樣的代理庫都捕獲跟蹤的一部分,并將其發(fā)送到組成跟蹤的中央服務(wù)器。 要了解它是如何工作的,讓我們看一個示例電子商店,該例子說明了跟蹤捕獲:
每當(dāng)請求到達(dá)系統(tǒng)邊界時,代理都會通過監(jiān)視第一個節(jié)點(diǎn)為它分配一個唯一的ID。 該標(biāo)識符稱為跟蹤ID。
E-shop前端節(jié)點(diǎn)處理入站請求,并決定調(diào)用下游的SubmitOrder微服務(wù)。 這樣做時,它通常使用自定義HTTP標(biāo)頭將跟蹤ID傳遞到下游。
| SubmitOrder微服務(wù)會在HTTP標(biāo)頭中發(fā)現(xiàn)跟蹤ID。 這使SubmitOrder可以將其跨度與E-shop父級鏈接。 處理請求時, submitOrder微服務(wù)發(fā)現(xiàn)它需要調(diào)用checkInventory微服務(wù)。 再次通過向下游傳遞跟蹤ID來實(shí)現(xiàn)。 checkInventory微服務(wù)現(xiàn)在是該樹中的終端節(jié)點(diǎn),沒有子依賴項。 因此,它僅處理請求并將響應(yīng)發(fā)送回父級。 完成此操作后, checkInventory微服務(wù)中的整個范圍就準(zhǔn)備好了。 |
在SubmitOrder中間節(jié)點(diǎn)和E-shop父節(jié)點(diǎn)中也是如此。 跨度組成,配備有開始和結(jié)束時間戳記,并使用跟蹤ID進(jìn)行鏈接。
代理庫捕獲跨度后,它們會將跨度發(fā)送到集中式服務(wù)器。 在此服務(wù)器中,節(jié)點(diǎn)被組成跟蹤并存儲以進(jìn)行查詢。
該過程的結(jié)果是組成了完整的痕跡。 在上面的示例中,組合的跟蹤看起來類似于以下內(nèi)容:
代理商如何工作?
可以使用兩種不同的方法來構(gòu)建從單個微服務(wù)捕獲跨度的代理:
諸如Zipkin , OpenTracing和Jaeger之類的Tracer庫使應(yīng)用程序開發(fā)人員能夠檢測代碼并將跨度發(fā)送到集中式服務(wù)器。 它們提供了最常用的語言和框架的庫,并在缺少支持的情況下使用戶能夠構(gòu)建自己的庫
舉例說明如何使用Zipkin來檢測PHP微服務(wù)的示例可能會給您一個想法:
SubmitOrder微服務(wù)會在HTTP標(biāo)頭中發(fā)現(xiàn)跟蹤ID。這使SubmitOrder可以將其跨度與E-shop父級鏈接。處理請求時, submitOrder微服務(wù)發(fā)現(xiàn)它需要調(diào)用checkInventory微服務(wù)。 再次通過向下游傳遞跟蹤ID來實(shí)現(xiàn)。 checkInventory微服務(wù)現(xiàn)在是該樹中的終端節(jié)點(diǎn),沒有子依賴項。 因此,它僅處理請求并將響應(yīng)發(fā)送回父級。 完成此操作后, checkInventory微服務(wù)中的整個范圍就準(zhǔn)備好了。
這種方法有其缺點(diǎn)-從將跟蹤庫引入微服務(wù)的示例可以看出,需要更改代碼才能捕獲所需的信息。 要在大型組織中實(shí)現(xiàn)這一目標(biāo),而由不同團(tuán)隊開發(fā)和維護(hù)數(shù)十甚至數(shù)百個微服務(wù),可能是一個艱巨的挑戰(zhàn)。
基于代理的解決方案(例如NewRelic或DataDog或我們自己的Plumbr)使用應(yīng)用程序運(yùn)行時中的低級掛鉤來對微服務(wù)進(jìn)行檢測。 代理已附加在應(yīng)用程序配置中,不需要更改代碼。
例如,使用Plumbr Java代理進(jìn)行跟蹤等效于僅更改JVM啟動參數(shù),類似于:
SubmitOrder微服務(wù)會在HTTP標(biāo)頭中發(fā)現(xiàn)跟蹤ID。這使SubmitOrder可以將其跨度與E-shop父級鏈接。處理請求時, submitOrder微服務(wù)發(fā)現(xiàn)它需要調(diào)用checkInventory微服務(wù)。 再次通過向下游傳遞跟蹤ID來實(shí)現(xiàn)。 checkInventory微服務(wù)現(xiàn)在是該樹中的終端節(jié)點(diǎn),沒有子依賴項。 因此,它僅處理請求并將響應(yīng)發(fā)送回父級。 完成此操作后, checkInventory微服務(wù)中的整個范圍就準(zhǔn)備好了。
因此,推出基于代理的解決方案更加簡單,尤其是在管理更大的部署時。 但是,大多數(shù)基于代理的解決方案都是商業(yè)的, 而不是開放源代碼的跟蹤程序庫,因此涉及一些成本。
標(biāo)記軌跡和跨度
跡線和跨度往往會被標(biāo)記以支持多維查詢以分析跡線。 常用標(biāo)簽的一些示例:
- 用戶身份
- serverId
- clusterId
- API端點(diǎn)
- HTTP響應(yīng)碼
使用標(biāo)簽,可以輕松回答不同的問題:
- 此微服務(wù)中的哪個API端點(diǎn)已損壞?
- 該前端中哪些API端點(diǎn)最慢?
- 哪些用戶遇到了錯誤?
- 罪魁禍?zhǔn)资悄膫€微服務(wù)?
良好的跟蹤提供程序?qū)⒉煌木S度無縫地集成到產(chǎn)品UI和警報設(shè)置中,因此您可以避免使用數(shù)百萬條單獨(dú)的跟蹤,而是立即而及時地獲得寶貴的見解。
帶走
跟蹤是一種非常強(qiáng)大的診斷工具,尤其是在應(yīng)用于分布式環(huán)境時。 由于可以在整個執(zhí)行路徑中觀察每個單獨(dú)的請求,因此問題得以解決。 借助標(biāo)簽,可以公開分析查詢,從而使影響估算變得微不足道。
翻譯自: https://www.javacodegeeks.com/2020/02/distributed-tracing-for-dummies.html
分布式 虛擬時間和虛擬同步
總結(jié)
以上是生活随笔為你收集整理的分布式 虚拟时间和虚拟同步_分布式虚拟跟踪的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你不来我不老歌词 你不来我不老歌曲简介
- 下一篇: 凶猛的英语怎么说 凶猛翻译成英语