偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

分布式鏈路追蹤,一文幫你掌握它!

開(kāi)發(fā) 系統(tǒng)
本文分析了什么是分布式追蹤、為什么需要分布式追蹤以及分布式追蹤如何工作的。

隨著互聯(lián)網(wǎng)的快速發(fā)展,諸如云計(jì)算、微服務(wù)、開(kāi)源工具和基于容器交付等技術(shù),使得應(yīng)用程序在日益復(fù)雜的環(huán)境中更加分散,因此,追蹤請(qǐng)求在分布式系統(tǒng)中鏈路變得至關(guān)重要。

那么,什么是分布式追蹤?它又是如何工作的呢?本文我們將深入進(jìn)行分析。

什么是分布式追蹤?

分布式追蹤(Distributed Tracing)是一種用于監(jiān)控和診斷分布式應(yīng)用程序性能的技術(shù)。在分布式系統(tǒng)中,服務(wù)通常會(huì)被拆分成多個(gè)微服務(wù),它們可能運(yùn)行在不同的服務(wù)器或容器中,并通過(guò)網(wǎng)絡(luò)相互通信。分布式追蹤通過(guò)跟蹤和記錄請(qǐng)求在整個(gè)系統(tǒng)中的傳播路徑和性能數(shù)據(jù),幫助開(kāi)發(fā)人員和運(yùn)維團(tuán)隊(duì)分析服務(wù)之間的調(diào)用關(guān)系、排查性能瓶頸和故障。

通常,分布式追蹤系統(tǒng)會(huì)生成唯一標(biāo)識(shí)每個(gè)請(qǐng)求的 TraceId,并記錄每個(gè)服務(wù)處理請(qǐng)求的時(shí)間、耗時(shí)、調(diào)用鏈路等信息。這些數(shù)據(jù)可以用于生成可視化的調(diào)用圖,幫助開(kāi)發(fā)者理解系統(tǒng)內(nèi)部各個(gè)服務(wù)之間的依賴(lài)關(guān)系和性能狀況。如下圖為一個(gè)簡(jiǎn)要的分布式系統(tǒng)追蹤網(wǎng):

為什么需要分布式追蹤?

在單體應(yīng)用程序時(shí)代,掌握系統(tǒng)中發(fā)生的情況相對(duì)簡(jiǎn)單,然而,分布式系統(tǒng)通常由多個(gè)獨(dú)立的微服務(wù)組成,這些服務(wù)之間通過(guò)網(wǎng)絡(luò)進(jìn)行通信,服務(wù)的數(shù)量和相互依賴(lài)關(guān)系的增加使得問(wèn)題的定位和解決變得更加復(fù)雜,這些復(fù)雜性給內(nèi)部協(xié)作帶來(lái)了巨大的挑戰(zhàn),同時(shí)也大大增加了問(wèn)題排查的難度和成本。

因此,急需一種手段,能夠在分布式系統(tǒng)中進(jìn)行全鏈路追蹤,所以分布式追蹤就誕生了。

分布式追蹤對(duì)于監(jiān)視、調(diào)試和優(yōu)化分布式軟件架構(gòu)(如微服務(wù))至關(guān)重要,尤其是在動(dòng)態(tài)微服務(wù)架構(gòu)中,它通過(guò)收集和分析與請(qǐng)求觸及的每個(gè)服務(wù)的每次交互的數(shù)據(jù)來(lái)追蹤單個(gè)請(qǐng)求。

分布式追蹤還可以幫助團(tuán)隊(duì)更快地了解每個(gè)微服務(wù)的執(zhí)行情況,這種理解有助于他們快速解決問(wèn)題,提高客戶(hù)滿(mǎn)意度,確保穩(wěn)定的收入,并為團(tuán)隊(duì)保留創(chuàng)新時(shí)間。通過(guò)這種方式,企業(yè)可以充分利用現(xiàn)代應(yīng)用程序環(huán)境提供的優(yōu)勢(shì),同時(shí)最大限度地減少其固有的復(fù)雜性也可能帶來(lái)的挑戰(zhàn)。

分布式追蹤有哪些類(lèi)型?

分布式追蹤系統(tǒng)主要有以下幾種類(lèi)型:

(1) 基于采樣的追蹤

采樣方式又可以細(xì)分三種,其詳情如下:

  • 全量采樣(Full Tracing):對(duì)所有請(qǐng)求進(jìn)行追蹤記錄。這種方式可以提供最全面的數(shù)據(jù),但可能會(huì)帶來(lái)較高的性能開(kāi)銷(xiāo)和存儲(chǔ)需求。
  • 隨機(jī)采樣(Random Sampling):隨機(jī)選擇部分請(qǐng)求進(jìn)行追蹤??梢酝ㄟ^(guò)設(shè)置采樣率(如10%)來(lái)控制追蹤的請(qǐng)求比例,減少開(kāi)銷(xiāo)。
  • 基于策略的采樣(Policy-based Sampling):根據(jù)特定的規(guī)則或策略進(jìn)行采樣,如對(duì)特定類(lèi)型的請(qǐng)求、特定用戶(hù)或特定時(shí)間段的請(qǐng)求進(jìn)行追蹤。

(2) 基于調(diào)用鏈的追蹤

基于調(diào)用鏈也可以分為兩種方式,其詳情如下:

  • 端到端追蹤(End-to-End Tracing):從請(qǐng)求的入口到最終響應(yīng)的整個(gè)過(guò)程中,對(duì)所有涉及的服務(wù)和組件進(jìn)行追蹤。
  • 局部追蹤(Local Tracing):只對(duì)某個(gè)服務(wù)或組件的內(nèi)部調(diào)用進(jìn)行追蹤,適用于關(guān)注特定服務(wù)性能的場(chǎng)景。

(3) 基于日志的追蹤

  • 日志增強(qiáng)型追蹤(Log-enhanced Tracing):在現(xiàn)有的日志系統(tǒng)中添加追蹤信息,通過(guò)日志來(lái)還原請(qǐng)求的調(diào)用鏈路和性能數(shù)據(jù)。
  • 獨(dú)立追蹤系統(tǒng)(Standalone Tracing System):使用專(zhuān)門(mén)的追蹤系統(tǒng)和工具來(lái)收集和分析追蹤數(shù)據(jù),如Jaeger、Zipkin等。

(4) 基于事件的追蹤

  • 同步事件追蹤(Synchronous Event Tracing):對(duì)同步調(diào)用鏈進(jìn)行追蹤,適用于傳統(tǒng)的同步HTTP請(qǐng)求場(chǎng)景。
  • 異步事件追蹤(Asynchronous Event Tracing):對(duì)異步調(diào)用鏈進(jìn)行追蹤,適用于基于消息隊(duì)列、異步任務(wù)等場(chǎng)景。

分布式追蹤的原理

分布式追蹤的工作原理涉及多個(gè)組件和步驟,我們通過(guò)以下 7個(gè)主要流程進(jìn)行分析:

(1) 唯一標(biāo)識(shí)

在分布式追蹤中,一般都會(huì)存在兩個(gè)重要的唯一標(biāo)識(shí):Trace ID 和 Span ID。

  • Trace ID:每個(gè)請(qǐng)求被分配一個(gè)唯一的 Trace ID,用于標(biāo)識(shí)整個(gè)請(qǐng)求的生命周期。
  • Span ID:每個(gè)服務(wù)在處理請(qǐng)求時(shí),會(huì)生成一個(gè) Span ID,用于標(biāo)識(shí)該服務(wù)的處理單元,一個(gè) Trace ID下可以包含多個(gè) Span。

(2) 追蹤上下文傳遞

當(dāng)一個(gè)請(qǐng)求從一個(gè)服務(wù)傳遞到另一個(gè)服務(wù)時(shí),Trace ID 和 Span ID 會(huì)放置在請(qǐng)求頭中傳遞,以確保追蹤上下文在整個(gè)調(diào)用鏈中保持一致。

例如,在 HTTP請(qǐng)求中,追蹤信息可以通過(guò)特定的 HTTP頭(如 X-B3-TraceId, X-B3-SpanId 等)傳遞。

(3) 生成和記錄Span

每個(gè)服務(wù)在接收到請(qǐng)求時(shí),會(huì)生成一個(gè) Span,記錄該請(qǐng)求的開(kāi)始時(shí)間、結(jié)束時(shí)間、處理時(shí)長(zhǎng)、調(diào)用的下游服務(wù)等信息。Span 還可以包含標(biāo)簽(tags)和日志(logs),用于記錄額外的上下文信息,如請(qǐng)求參數(shù)、錯(cuò)誤信息等。

(4) 數(shù)據(jù)收集和傳輸

每個(gè)服務(wù)會(huì)將生成的 Span 數(shù)據(jù)發(fā)送到集中式追蹤收集器(Collector),可以通過(guò)多種方式傳輸數(shù)據(jù),如 HTTP、gRPC 等。數(shù)據(jù)收集器接收到 Span 數(shù)據(jù)后,會(huì)對(duì)其進(jìn)行處理、存儲(chǔ)和聚合。

(5) 數(shù)據(jù)存儲(chǔ)

收集到的追蹤數(shù)據(jù)通常會(huì)存儲(chǔ)在分布式存儲(chǔ)系統(tǒng)中,如 Elasticsearch、Cassandra、Jaeger內(nèi)置存儲(chǔ)等,以支持高效的查詢(xún)和分析。

(66) 數(shù)據(jù)分析和可視化

通過(guò)追蹤系統(tǒng)的用戶(hù)界面或可視化工具,用戶(hù)可以查詢(xún)和分析追蹤數(shù)據(jù),生成調(diào)用圖、時(shí)間線(xiàn)圖等,直觀地展示請(qǐng)求的路徑和各個(gè)服務(wù)的性能。常見(jiàn)的可視化工具包括 Jaeger UI、Zipkin UI 等,它們提供了豐富的過(guò)濾、搜索和分析功能。

(7) 集成和擴(kuò)展

分布式追蹤系統(tǒng)通常提供多種 SDK 和集成工具,支持在不同的編程語(yǔ)言和框架中嵌入追蹤代碼。還可以與其他監(jiān)控和日志系統(tǒng)集成,形成統(tǒng)一的可觀測(cè)性平臺(tái),如與 Prometheus、Grafana、ELK 等工具集成。

通過(guò)上述步驟,分布式追蹤系統(tǒng)能夠全面地跟蹤和分析請(qǐng)求在分布式系統(tǒng)中的傳播路徑和性能,幫助開(kāi)發(fā)者和運(yùn)維人員深入理解系統(tǒng)的行為和性能,以下為一張簡(jiǎn)要的追蹤原理圖:

分布式追蹤的挑戰(zhàn)

盡管分布式追蹤為企業(yè)提供了許多優(yōu)勢(shì),但在實(shí)現(xiàn)和維護(hù)過(guò)程中面臨一些挑戰(zhàn),包括技術(shù)復(fù)雜性、性能開(kāi)銷(xiāo)、數(shù)據(jù)管理等方面,以下是一些主要的挑戰(zhàn):

(1) 性能開(kāi)銷(xiāo)

追蹤數(shù)據(jù)的收集、傳輸和存儲(chǔ)會(huì)帶來(lái)額外的性能開(kāi)銷(xiāo),特別是在高并發(fā)和大規(guī)模系統(tǒng)中,這種開(kāi)銷(xiāo)可能會(huì)影響系統(tǒng)的整體性能。

(2) 數(shù)據(jù)量大

分布式系統(tǒng)中的每個(gè)請(qǐng)求可能涉及多個(gè)服務(wù),每個(gè)服務(wù)都會(huì)生成追蹤數(shù)據(jù),導(dǎo)致數(shù)據(jù)量非常龐大。有效地存儲(chǔ)、管理和查詢(xún)這些數(shù)據(jù)是一項(xiàng)重大挑戰(zhàn)。

(3) 全鏈路追蹤的難度

確保追蹤上下文在整個(gè)調(diào)用鏈中傳遞一致性是一個(gè)復(fù)雜的問(wèn)題,尤其是在跨語(yǔ)言、跨平臺(tái)和跨團(tuán)隊(duì)的系統(tǒng)中。任何一個(gè)環(huán)節(jié)出現(xiàn)問(wèn)題,都會(huì)導(dǎo)致追蹤數(shù)據(jù)的不完整或不準(zhǔn)確。

(4) 采樣策略的選擇

在高流量系統(tǒng)中,不可能對(duì)每個(gè)請(qǐng)求都進(jìn)行追蹤,需要選擇合適的采樣策略來(lái)平衡追蹤數(shù)據(jù)的代表性和系統(tǒng)的性能開(kāi)銷(xiāo)。制定和調(diào)整采樣策略需要對(duì)系統(tǒng)有深入的了解。

(5) 可視化和分析

大量的追蹤數(shù)據(jù)需要有效的可視化和分析工具來(lái)幫助開(kāi)發(fā)者和運(yùn)維人員理解系統(tǒng)的行為和性能。設(shè)計(jì)和實(shí)現(xiàn)高效的可視化工具是一個(gè)挑戰(zhàn)。

(6) 數(shù)據(jù)一致性和可靠性

確保追蹤數(shù)據(jù)的準(zhǔn)確性和一致性,避免數(shù)據(jù)丟失或錯(cuò)誤,尤其是在系統(tǒng)發(fā)生故障或網(wǎng)絡(luò)不穩(wěn)定的情況下。

(7) 跨團(tuán)隊(duì)協(xié)作

實(shí)現(xiàn)和維護(hù)分布式追蹤需要開(kāi)發(fā)、運(yùn)維、安全等多個(gè)團(tuán)隊(duì)的協(xié)作。不同團(tuán)隊(duì)之間的溝通和協(xié)調(diào)是一個(gè)重要的挑戰(zhàn)。

(8) 隱私和安全

追蹤數(shù)據(jù)可能包含敏感信息,確保數(shù)據(jù)的隱私和安全是必須的。需要采取適當(dāng)?shù)拇胧﹣?lái)保護(hù)數(shù)據(jù)不被未經(jīng)授權(quán)的訪問(wèn)和泄露。

(9) 適應(yīng)多樣化技術(shù)棧

現(xiàn)代分布式系統(tǒng)通常使用多種編程語(yǔ)言、框架和平臺(tái)。需要支持多樣化技術(shù)棧的追蹤工具和標(biāo)準(zhǔn),以確保在不同環(huán)境中的一致性和兼容性。

(10) 成本管理

存儲(chǔ)和處理大量追蹤數(shù)據(jù)可能帶來(lái)高昂的成本。需要有效的成本管理策略,如數(shù)據(jù)壓縮、歸檔和自動(dòng)刪除過(guò)期數(shù)據(jù)等。通過(guò)識(shí)別和應(yīng)對(duì)這些挑戰(zhàn),可以更好地實(shí)現(xiàn)和維護(hù)分布式追蹤系統(tǒng),從而充分發(fā)揮其在性能監(jiān)控和故障診斷中的優(yōu)勢(shì)。

分布式追蹤工具

對(duì)于分布式追蹤工具,市面上主要有三類(lèi):自研,開(kāi)源,商業(yè)版。以下是一些常用的分布式追蹤工具:

(1) Zipkin

Zipkin是 Twitter基于 Java語(yǔ)言開(kāi)發(fā)的開(kāi)源分布式追蹤系統(tǒng),支持多種語(yǔ)言和框架,易于集成。Zipkin提供簡(jiǎn)單的用戶(hù)界面,用于查看和分析追蹤數(shù)據(jù),支持多種存儲(chǔ)后端,如 MySQL、Elasticsearch等。

(2) SkyWalking

SkyWalking 是一個(gè)開(kāi)源的應(yīng)用性能監(jiān)控和分布式追蹤系統(tǒng),由國(guó)內(nèi) Apache基金會(huì)成員吳晟創(chuàng)立。它支持多種語(yǔ)言,包括Java、C#、Go等,能夠監(jiān)控和追蹤分布式系統(tǒng)中的調(diào)用鏈路。

(3) Pinpoint

Pinpoint是由韓國(guó) Naver開(kāi)源的分布式追蹤系統(tǒng),專(zhuān)注于 Java和 PHP應(yīng)用的監(jiān)控和追蹤,它能夠詳細(xì)記錄服務(wù)的調(diào)用鏈路和性能數(shù)據(jù),幫助開(kāi)發(fā)者優(yōu)化系統(tǒng)性能。

Pinpoint 提供直觀的界面,方便用戶(hù)分析和定位問(wèn)題,支持自定義插件,方便集成到不同的系統(tǒng)中。適用于需要詳細(xì)調(diào)用鏈路和性能數(shù)據(jù)的 Java和 PHP應(yīng)用。

(4) CAT

CAT(Central Application Tracking)是由國(guó)內(nèi)知名互聯(lián)網(wǎng)公司美團(tuán)點(diǎn)評(píng)開(kāi)源的分布式追蹤和監(jiān)控系統(tǒng),專(zhuān)注于應(yīng)用性能監(jiān)控和故障排查,它能夠?qū)崟r(shí)收集和分析系統(tǒng)中的調(diào)用鏈路和性能數(shù)據(jù)。

CAT能夠?qū)崟r(shí)收集和分析系統(tǒng)中的調(diào)用鏈路和性能數(shù)據(jù),支持Java、C++、Node.js等多種語(yǔ)言,提供強(qiáng)大的可視化界面,幫助用戶(hù)深入分析系統(tǒng)性能。適用于需要實(shí)時(shí)監(jiān)控和故障排查的分布式系統(tǒng)。

(5) 其他

另外還有一些國(guó)外比較流行(可能在國(guó)內(nèi)不常用)的追蹤工具,比如:Jaeger,OpenTelemetry,AWS X-Ray,Azure Application Insights,Google Cloud Trace,Elastic APM等。

總結(jié)

本文分析了什么是分布式追蹤?為什么需要分布式追蹤以及分布式追蹤如何工作的,其實(shí),分布式追蹤就是讓錯(cuò)綜復(fù)雜的分布式系統(tǒng)調(diào)用變得透明化和可視化。

有了分布式追蹤,我們才能更好的掌握服務(wù)之間的調(diào)用關(guān)系,及時(shí)監(jiān)控服務(wù)器的各項(xiàng)指標(biāo),當(dāng)出現(xiàn)故障時(shí)可以快死定位,因此,分布式追蹤是分布式系統(tǒng)中不可或缺的一項(xiàng)技術(shù),在國(guó)內(nèi)的中大型互聯(lián)網(wǎng)公司,都有一個(gè)專(zhuān)門(mén)的部門(mén)在維護(hù)著這樣的服務(wù),足以可見(jiàn)其重要性。

責(zé)任編輯:趙寧寧 來(lái)源: 猿java
相關(guān)推薦

2020-12-16 09:24:18

Skywalking分布式鏈路追蹤

2024-06-07 13:04:31

2024-01-26 07:49:49

Go分布式鏈路

2021-02-22 07:58:51

分布式鏈路追蹤

2023-09-21 16:10:44

2023-09-20 22:56:45

分布式追蹤應(yīng)用程序

2020-09-11 09:44:04

微服務(wù)分布式鏈路

2024-08-21 08:09:17

2019-08-07 10:44:28

MySQLGoogle

2016-10-25 14:35:05

分布式系統(tǒng) 存儲(chǔ)

2023-11-21 08:25:09

2024-11-28 08:57:21

分布式鏈路Skywalking

2021-11-08 14:10:37

分布式Spring鏈路

2022-12-21 08:40:05

限流器分布式限流

2017-10-20 13:39:29

分布式系統(tǒng)數(shù)據(jù)存儲(chǔ)數(shù)據(jù)量

2022-11-26 09:49:07

分布式鏈路追蹤技術(shù)

2020-04-14 11:14:02

PostgreSQL分布式數(shù)據(jù)庫(kù)

2022-08-05 10:03:17

分布式微服務(wù)

2022-05-23 08:23:24

鏈路追蹤SleuthSpring

2023-10-26 00:00:00

分布式系統(tǒng)定位
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)