欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

得物云原生全鏈路追蹤Trace2.0-采集篇

OSC開源社區(qū) ? 來源:OSC開源社區(qū) ? 作者:OSC開源社區(qū) ? 2022-12-13 15:05 ? 次閱讀

0

0xcc 開篇

2020 年 3月,得物技術(shù)團(tuán)隊(duì)在三個(gè)月的時(shí)間內(nèi)完成了整個(gè)交易體系的重構(gòu),交付了五彩石項(xiàng)目,業(yè)務(wù)系統(tǒng)也進(jìn)入了微服務(wù)時(shí)代。系統(tǒng)服務(wù)拆分之后,雖然每個(gè)服務(wù)都會(huì)有不同的團(tuán)隊(duì)各司其職,但服務(wù)之間的依賴也變得復(fù)雜,對(duì)服務(wù)治理等相關(guān)的基礎(chǔ)建設(shè)要求也更高。

對(duì)服務(wù)進(jìn)行監(jiān)控是服務(wù)治理、穩(wěn)定性建設(shè)中的一個(gè)重要的環(huán)節(jié),它能幫助提早發(fā)現(xiàn)問題,預(yù)估系統(tǒng)水位,以及對(duì)故障進(jìn)行分析等等。從 2019 年末到現(xiàn)在,得物的應(yīng)用服務(wù)監(jiān)控系統(tǒng)經(jīng)歷了三大演進(jìn)階段,如今,整個(gè)得物的應(yīng)用微服務(wù)監(jiān)控體系已經(jīng)全面融入云原生可觀測(cè)性技術(shù) OpenTelemetry。

b0d1df9c-7a83-11ed-8abf-dac502259ad0.png

回顧過去十年間,應(yīng)用服務(wù)監(jiān)控行業(yè)的競(jìng)爭(zhēng)也很激烈,相關(guān)產(chǎn)品如雨后春筍般涌現(xiàn),如推特在 2012 年開源的 Zipkin,韓國最大的搜索引擎和門戶網(wǎng)站 Naver 開源的 Pinpoint,近幾年 Uber 公司開源的 Jaeger,以及我們國內(nèi)吳晟開源的 SkyWalking。

有人說,這些其實(shí)都?xì)w功于 Google 在 2010 年基于其內(nèi)部大規(guī)模分布式鏈路追蹤系統(tǒng) Dapper 實(shí)踐而發(fā)表的論文,它的設(shè)計(jì)理念是一切分布式調(diào)用鏈追蹤系統(tǒng)的始祖,但其實(shí)早在二十年前(2002年),當(dāng)年世界上最大的電商平臺(tái) eBay 就已擁有了調(diào)用鏈追蹤系統(tǒng) CAL(Centralized Application Logging)。2011 年,原eBay的中國研發(fā)中心的資深架構(gòu)師吳其敏跳槽至大眾點(diǎn)評(píng),并且深入吸收消化了 CAL 的設(shè)計(jì)思想,主導(dǎo)研發(fā)并開源了CAT(Centralized Application Tracking)。

b0e3015a-7a83-11ed-8abf-dac502259ad0.png

CAT 作為國人主導(dǎo)的開源系統(tǒng),其本地化工作也是做得非常到位,而憑借著架構(gòu)簡(jiǎn)單,開箱即用的特點(diǎn),CAT 也是我們得物使用的第一個(gè)應(yīng)用監(jiān)控系統(tǒng)。

1

0x01 第一階段

從0~1基于CAT的實(shí)時(shí)應(yīng)用監(jiān)控

在得物五彩石項(xiàng)目交付之前,系統(tǒng)僅有基礎(chǔ)設(shè)施層面的監(jiān)控,CAT 的引入,很好地彌補(bǔ)了應(yīng)用監(jiān)控盲區(qū)。它支持提供各個(gè)維度的性能監(jiān)控報(bào)表,健康狀況檢測(cè),異常統(tǒng)計(jì),對(duì)故障問題排查起到了積極推動(dòng)的作用,同時(shí)也提供簡(jiǎn)單的實(shí)時(shí)告警的能力。

b0f47084-7a83-11ed-8abf-dac502259ad0.png

CAT 擁有指標(biāo)分鐘級(jí)別的聚合統(tǒng)計(jì)的能力,從 UI 上不難看出,它擁有豐富的報(bào)表統(tǒng)計(jì)能力和問題排障能力。

b113f36e-7a83-11ed-8abf-dac502259ad0.png

但隨著公司業(yè)務(wù)規(guī)模逐步擴(kuò)大,微服務(wù)粒度也不可避免地變小,我們發(fā)現(xiàn),CAT 已經(jīng)逐步無法滿足我們的使用場(chǎng)景了:

  • 無法直觀呈現(xiàn)全鏈路視圖:

問題排障與日常性能分析的場(chǎng)景也越來越復(fù)雜,對(duì)于一個(gè)核心場(chǎng)景,其內(nèi)部的調(diào)用鏈路通常復(fù)雜多變,站在流量角度上看,需要完整地知道它的來源,上下游鏈路,異步調(diào)用等等,這對(duì)于 CAT 來說可能略顯超綱。

  • 缺少圖表定制化能力:
CAT 雖供多維度報(bào)表分析,但定制化能力非常有限,在當(dāng)時(shí),業(yè)內(nèi)的圖表組件定制化解決方案逐步向 Grafana + Prometheus 靠攏,但若使用 CAT,則無法享受強(qiáng)大的圖表繪制能力。與此同時(shí),隨著云原生社區(qū)可觀測(cè)性項(xiàng)目 OpenTracing 的崛起,大約不到半年時(shí)間我們逐步下線了 CAT,向 OpenTracing 生態(tài)演進(jìn)。

2

0x02 第二階段

持續(xù)創(chuàng)造 基于OpenTracing全鏈路采樣監(jiān)控

OpenTracing 為全鏈路追蹤 Trace 定制了完整的一套協(xié)議標(biāo)準(zhǔn),本身并不提供實(shí)現(xiàn)細(xì)節(jié)。在 OpenTracing 協(xié)議中,Trace 被認(rèn)為是 Span 的有向無環(huán)圖(DAG)。官方也例舉了以下 8 個(gè) Span 的因果關(guān)系和他們組成的單 Trace示例圖:

b13ef7ee-7a83-11ed-8abf-dac502259ad0.png

在當(dāng)時(shí), OpenTracing 相關(guān)的開源社區(qū)也是異?;钴S,它使用 Jaeger 來解決數(shù)據(jù)的收集,調(diào)用鏈則使用了甘特圖展示:

b15a99b8-7a83-11ed-8abf-dac502259ad0.png

在 OpenTracing 生態(tài)中,我們對(duì)鏈路的采樣使用頭部采樣策略, 對(duì)于指標(biāo) Metrics,OpenTracing 并沒有制定它的規(guī)范,但在 Google SRE Book 里,關(guān)于 Monitoring Distributed System 章節(jié)中提到了四類黃金指標(biāo):

  1. 吞吐量:如每秒請(qǐng)求數(shù),通常的實(shí)現(xiàn)方式是,設(shè)定一個(gè)計(jì)數(shù)器,每完成一次請(qǐng)求將自增。通過計(jì)算時(shí)間窗口內(nèi)的變化率來計(jì)算出每秒的吞吐量。

  1. 延遲:處理請(qǐng)求的耗時(shí)。

  1. 錯(cuò)誤率/錯(cuò)誤數(shù):如 HTTP 500 錯(cuò)誤。當(dāng)然,有些即便是 HTTP 200 狀態(tài)也需要根據(jù)特定業(yè)務(wù)邏輯來區(qū)分當(dāng)前請(qǐng)求是否屬于“錯(cuò)誤”請(qǐng)求。

  1. 飽和度:類似服務(wù)器硬件資源如CPU,內(nèi)存,網(wǎng)絡(luò)的使用率等等。

所以,我們決定使用 Micrometer 庫來對(duì)各個(gè)組件進(jìn)行吞吐量,延遲和錯(cuò)誤率的埋點(diǎn),從而對(duì) DB 類,RPC類的組件做性能監(jiān)控。因此也可以說,我們第二階段的監(jiān)控是以指標(biāo)監(jiān)控為主,調(diào)用鏈監(jiān)控為輔的應(yīng)用性能監(jiān)控。2.1 使用 Endpoint 貫穿指標(biāo)埋點(diǎn)幫助性能分析在指標(biāo)埋點(diǎn)過程中,我們?cè)谒械闹笜?biāo)中引入了“流量入口(Endpoint)”標(biāo)簽。這個(gè)標(biāo)簽的引入,實(shí)現(xiàn)了根據(jù)不同流量入口來區(qū)分關(guān)聯(lián) DB,緩存,消息隊(duì)列,遠(yuǎn)程調(diào)用類的行為。通過流量入口,貫穿了一個(gè)實(shí)例的所有組件指標(biāo),基本滿足了以下場(chǎng)景的監(jiān)控:
  • RPC 調(diào)用排障,調(diào)用方除了擁有下游接口信息,也可溯源自身觸發(fā)該調(diào)用的接口。

b1796924-7a83-11ed-8abf-dac502259ad0.png

  • 接口高耗時(shí)分析,根據(jù)指標(biāo),可還原出單位時(shí)間窗口的耗時(shí)分解圖快速查看耗時(shí)組件。

b1a4120a-7a83-11ed-8abf-dac502259ad0.png

2.2 關(guān)于選型的疑問

你可能會(huì)問,鏈路監(jiān)控領(lǐng)域在業(yè)內(nèi)有現(xiàn)成的 APM 產(chǎn)品,比如 Zipkin, Pinpoint, SkyWalking 等,為什么當(dāng)時(shí)會(huì)選擇 OpenTracing + Prometheus 自行埋點(diǎn)?主要有兩大因素:

第一,在當(dāng)時(shí),CAT 無法滿足全鏈路監(jiān)控和一些定制化的報(bào)表分析,而得物交易鏈路五彩石項(xiàng)目交付也趨于尾聲,貿(mào)然去集成外部一款龐大的 APM 產(chǎn)品在沒有充分的驗(yàn)證下,會(huì)給服務(wù)帶來穩(wěn)定性風(fēng)險(xiǎn),在極其有限的時(shí)間周期內(nèi)不是個(gè)理智的選擇。

第二,監(jiān)控組件是隨著統(tǒng)一的基礎(chǔ)框架來發(fā)布,同時(shí),由另一團(tuán)隊(duì)牽頭開發(fā)的全鏈路影子庫路由組件借助了 OpenTracing 隨行數(shù)據(jù)透?jìng)鳈C(jī)制,且與監(jiān)控組件是強(qiáng)耦合關(guān)系,而基礎(chǔ)框架將統(tǒng)籌監(jiān)控,壓測(cè)和其他模塊,借助Spring Boot Starter 機(jī)制,一定程度上做到了功能的開箱即用,無縫集成。而使用字節(jié)碼增強(qiáng)方式的 Pinpoint, SkyWalking,無法很好地做到與基礎(chǔ)框架集成,若并行開發(fā),也會(huì)多出基礎(chǔ)框架與 Java Agent 兩邊的管理和維護(hù)成本,減緩迭代速度。

b1d2b48e-7a83-11ed-8abf-dac502259ad0.png

在之后將近兩年的時(shí)間里,應(yīng)用服務(wù)監(jiān)控覆蓋了得物技術(shù)部使用的將近 70% 的組件,為得物App在 2021 年實(shí)現(xiàn)全年 99.97% 的 SLA 提供了強(qiáng)有力的支持?,F(xiàn)在看來,基于 OpenTracing + Prometheus 生態(tài),很好地解決了分布式系統(tǒng)的調(diào)用鏈監(jiān)控,借助 Grafana 圖表工具,做到了靈活的指標(biāo)監(jiān)控,融合基礎(chǔ)框架,讓業(yè)務(wù)方開箱即用…然而,我們說第二階段是基于 OpenTracing 全鏈路采樣監(jiān)控,隨著業(yè)務(wù)的高速發(fā)展,這套架構(gòu)的不足點(diǎn)也逐漸顯露出來。

2.3 架構(gòu)特點(diǎn)

  • 體驗(yàn)層面
    • 指標(biāo):覆蓋面廣,維度細(xì),能清晰地根據(jù)各模塊各維度來統(tǒng)計(jì)分析,基本做到了監(jiān)控靈活的圖表配置需求。但不可否認(rèn)它是一種時(shí)序聚合數(shù)據(jù),無法細(xì)化為個(gè)體。假如在某個(gè)時(shí)間點(diǎn)發(fā)生過幾次高耗時(shí)操作,當(dāng)吞吐量達(dá)到一定時(shí),平均耗時(shí)指標(biāo)曲線仍然趨于平穩(wěn),沒有明顯的突出點(diǎn),導(dǎo)致問題發(fā)現(xiàn)能力降低。

  • b1eed786-7a83-11ed-8abf-dac502259ad0.png

    • 鏈路:1%的采樣率使得業(yè)務(wù)服務(wù)基本不會(huì)因調(diào)用鏈發(fā)送量大而導(dǎo)致性能問題,但同時(shí)也往往無法從錯(cuò)誤,高耗時(shí)的場(chǎng)景中找到正好采樣的鏈路。期間,我們?cè)?jīng)考慮將頭部采樣策略改為尾部采樣,但面臨著非常高昂的 SDK 改造成本和復(fù)雜調(diào)用情況下(如異步)采樣策略的回溯,且無法保證發(fā)生每個(gè)高耗時(shí),錯(cuò)誤操作時(shí)能還原整個(gè)完整的調(diào)用鏈路。

    • 集成方式:業(yè)務(wù)和基礎(chǔ)框架均采用 Maven 來構(gòu)建項(xiàng)目,使用 Spring Boot Starter "all in one"開箱即用方式集成,極大降低了集成成本的同時(shí),也給依賴沖突問題埋下了隱患。

  • 項(xiàng)目迭代層面

迭代周期分化矛盾,與基礎(chǔ)框架的集成是當(dāng)時(shí)快速推廣落地全鏈路監(jiān)控的不二選擇,通過這種方式,Java 服務(wù)的接入率曾一度接近100%,但在業(yè)務(wù)高速發(fā)展的背景下,基礎(chǔ)框架的迭代速度已經(jīng)遠(yuǎn)遠(yuǎn)跟不上業(yè)務(wù)迭代速度了,這也間接制約了整個(gè)監(jiān)控系統(tǒng)的迭代。

  • 數(shù)據(jù)治理層面
數(shù)據(jù)治理成本逐步偏高,由于基礎(chǔ)框架和業(yè)務(wù)系統(tǒng)的迭代節(jié)奏天然的不一致,且每個(gè)業(yè)務(wù)系統(tǒng)也有自身的迭代節(jié)奏,放眼全網(wǎng)后端服務(wù)上看,基礎(chǔ)框架版本參差不齊。

b1faa2dc-7a83-11ed-8abf-dac502259ad0.png

盡管監(jiān)控系統(tǒng)在每一次迭代時(shí)都會(huì)盡可能保證最大的向后兼容,但將近兩年的迭代周期里,不同版本造成的數(shù)據(jù)差異也極大制約了監(jiān)控門戶系統(tǒng)天眼的迭代,開發(fā)人員長(zhǎng)時(shí)間奔波于數(shù)據(jù)上的妥協(xié),在很多功能的實(shí)現(xiàn)上曲線救國。

  • 穩(wěn)定性層面

相關(guān)預(yù)案依托于 Spring 框架 Bean 的自動(dòng)裝配邏輯,業(yè)務(wù)方理解成本低,便于變更,但缺少細(xì)粒度的預(yù)案,比如運(yùn)行時(shí)期間特定邏輯降級(jí)等等。

    • 2021 年下半年開始,為了充分平衡以上的收益與風(fēng)險(xiǎn),我們決定將監(jiān)控采集端與基礎(chǔ)框架解耦,獨(dú)立迭代。在此之前,在 CNCF(云原生計(jì)算基金會(huì))的推動(dòng)下,OpenTracing 也與 OpenCensus 合并成為了一個(gè)新項(xiàng)目 OpenTelemetry。

b2278a68-7a83-11ed-8abf-dac502259ad0.png

3

0x03 第三階段

向前一步 基于OpenTelemetry全鏈路應(yīng)用性能監(jiān)控

OpenTelemetry 的定位在于可觀測(cè)性領(lǐng)域中對(duì)遙測(cè)數(shù)據(jù)采集和語義規(guī)范的統(tǒng)一,有 CNCF (云原生計(jì)算基金會(huì))的加持,近兩年里隨著越來越多的人關(guān)注和參與,整個(gè)體系也越發(fā)成熟穩(wěn)定。

其實(shí),我們?cè)?020年底就已開始關(guān)注 OpenTelemetry 項(xiàng)目,只不過當(dāng)時(shí)該項(xiàng)目仍處于萌芽階段, Trace, Metrics API 還在 Alpha 階段,有很多不穩(wěn)定因素,考慮到需盡快投入生產(chǎn)使用,筆者曾在 2021 年中到年末期間也或多或少參與了 OpenTelemetry 社區(qū)相關(guān) issue 的討論,遙測(cè)模塊的開發(fā),底層數(shù)據(jù)協(xié)議的一致和一些 BUG 的修復(fù)。在這半年期間,相關(guān) API 和 SDK 隨著越來越多的人參與也逐步趨于穩(wěn)定。

OpenTelemetry架構(gòu)(圖源自 opentelemetry.io)

b253ba84-7a83-11ed-8abf-dac502259ad0.png

3.1 邁入 Trace2.0 時(shí)代

OpenTelemetry 的定位致力于將可觀測(cè)性三大要素 Metrics,Trace,Log 進(jìn)行統(tǒng)一,在遙測(cè) API 制定上,提供了統(tǒng)一的上下文以便 SDK 實(shí)現(xiàn)層去關(guān)聯(lián)。如 Metrics 與 Trace 的關(guān)聯(lián),筆者認(rèn)為體現(xiàn)在 OpenTelemetry 在 Metrics 的實(shí)現(xiàn)上包含了對(duì) OpenMetrics 標(biāo)準(zhǔn)協(xié)議的支持,其中 Exemplar 格式的數(shù)據(jù)打通了 Trace 與 Metrics 的橋梁:

b277debe-7a83-11ed-8abf-dac502259ad0.png

OpenMetrics 是建立在 Prometheus 格式之上的規(guī)范,做了更細(xì)粒度的調(diào)整,且基本向后兼容 Prometheus 格式。

在這之前,Metrics 指標(biāo)類型的數(shù)據(jù)無法精確關(guān)聯(lián)到具體某個(gè)或某些 Trace 鏈路,只能根據(jù)時(shí)間戳粗略關(guān)聯(lián)特定范圍內(nèi)的鏈路。這個(gè)方案的缺陷源自指標(biāo)采集器 vmagent 每隔 10s~30s 的 Pull 模式中,指標(biāo)的時(shí)間戳取決于采集時(shí)刻,與 Trace 調(diào)用時(shí)間并不匹配。

b2973bba-7a83-11ed-8abf-dac502259ad0.png

Exemplar 數(shù)據(jù)在直方圖度量格式末尾會(huì)追加當(dāng)前上下文中的 Trace ID,Span ID 信息,如下:
shadower_virtual_field_map_operation_seconds_bucket{holder="Filter:Factory",key="WebMvcMetricsFilter",operation="get",tcl="AppClassLoader",value="Servlet3FilterMappingResolverFactory",le="0.2"} 3949.0 1654575981.216 # {span_id="48f29964fceff582",trace_id="c0a80355629ed36bcd8fb1c6c89dedfe"} 1.0 1654575979.751
為了采集 Exemplar 格式指標(biāo),同時(shí)又需防止分桶標(biāo)簽“l(fā)e”產(chǎn)生的高基數(shù)問題,我們二次開發(fā)了指標(biāo)采集 vmagent,額外過濾攜帶 Exemplar 數(shù)據(jù)的指標(biāo),并將這類數(shù)據(jù)異步批量發(fā)送到了 Kafka,經(jīng)過 Flink 消費(fèi)后落入 Clickhouse 后,由天眼監(jiān)控門戶系統(tǒng)提供查詢接口和UI。

b2b930f8-7a83-11ed-8abf-dac502259ad0.png

分位線統(tǒng)計(jì)與Exemplar 數(shù)據(jù)關(guān)聯(lián)UI示意圖

b2dafb70-7a83-11ed-8abf-dac502259ad0.jpg

在數(shù)據(jù)上報(bào)層,OpenTelemetry Java SDK 使用了比 JDK 原生的阻塞隊(duì)列性能更好的 Mpsc (多生產(chǎn)單消費(fèi))隊(duì)列,它使用大量的 long 類型字段來做內(nèi)存區(qū)域填充,用空間換時(shí)間解決了偽共享問題,減少了并發(fā)情況下的寫競(jìng)爭(zhēng)來提高性能。

在流量高峰時(shí)期,鏈路數(shù)據(jù)的發(fā)送隊(duì)列這一塊的性能從火焰圖上看 CPU 占比平均小于2%,日常服務(wù)CPU整體水位與0采樣相比幾乎沒有明顯差距,因此我們經(jīng)過多方面壓測(cè)對(duì)比后,決定在生產(chǎn)環(huán)境客戶端側(cè)開放鏈路數(shù)據(jù)的全量上報(bào),實(shí)現(xiàn)了在得物技術(shù)史上的全鏈路 100% 采樣,終結(jié)了一直以來因?yàn)榈筒蓸勇蕦?dǎo)致問題排查困難的問題,至此,在第三階段,得物的全鏈路追蹤技術(shù)正式邁入 Trace2.0 時(shí)代。

得益于 OpenTelemetry 整體的可插拔式 API 設(shè)計(jì),我們二次開發(fā)了 OpenTelemetry Java Instrumentation 項(xiàng)目 Shadower Java,擴(kuò)展了諸多功能特性:

3.2 引入控制平面管理客戶端采集行

b30c1ffc-7a83-11ed-8abf-dac502259ad0.png

使用控制平面,通過客戶端監(jiān)聽機(jī)制來確保配置項(xiàng)的下發(fā)動(dòng)作,包括:

  • 實(shí)時(shí)動(dòng)態(tài)采樣控制
  • 診斷工具 Arthas 行為控制
  • 實(shí)時(shí)全局降級(jí)預(yù)案
  • 遙測(cè)組件運(yùn)行時(shí)開關(guān)
  • 實(shí)時(shí) RPC 組件出入?yún)⑹占_關(guān)
  • 實(shí)時(shí)高基數(shù)指標(biāo)標(biāo)簽的降級(jí)控制
  • 按探針版本的預(yù)案管理
  • 基于授權(quán)數(shù)的灰度接入策略。

b32dda3e-7a83-11ed-8abf-dac502259ad0.png

  • ... ...

控制平面的引入,彌補(bǔ)了無降級(jí)預(yù)案的空白,也提供了更加靈活的配置,支持了不同流量場(chǎng)景下快速變更數(shù)據(jù)采集方案:

b3606b66-7a83-11ed-8abf-dac502259ad0.png

b372aab0-7a83-11ed-8abf-dac502259ad0.png

3.3 獨(dú)立的啟動(dòng)模塊

為了解決業(yè)務(wù)方因集成基礎(chǔ)框架而長(zhǎng)期面臨的依賴沖突問題,以及多版本共存引起的數(shù)據(jù)格式分散與兼容問題,我們自研了無極探針工具箱 Promise, 它是個(gè)通用的 javaagent launcher, 結(jié)合遠(yuǎn)端存儲(chǔ),支持可配置化任意 javaagent 的下載,更新,安裝和啟動(dòng):

[plugins]
enables = shadower,arthas,pyroscope,chaos-agent
[shadower]
artifact_key = /javaagent/shadower-%s-final.jar
boot_class = com.shizhuang.apm.javaagent.bootstrap.AgentBootStrap
classloader = system
default_version = 115.16
[arthas]
artifact_key = /tools/arthas-bin.zip
;boot_class = com.taobao.arthas.agent334.AgentBootstrap
boot_artifact = arthas-agent.jar
premain_args = .attachments/arthas/arthas-core.jar;;ip=127.0.0.1
[pyroscope]
artifact_key = /tools/pyroscope.jar
[chaos-agent]
artifact_key = /javaagent/chaos-agent.jar
boot_class = com.chaos.platform.agent.DewuChaosAgentBootstrap
classloader = system
apply_envs = dev,test,local,pre,xdw
b3958b52-7a83-11ed-8abf-dac502259ad0.png

3.4 基于 Otel API 的擴(kuò)展

3.4.1 豐富的組件度量

在第二階段 OpenTracing 時(shí)期,我們使用 Endpoint 貫穿了多個(gè)組件的指標(biāo)埋點(diǎn),這個(gè)優(yōu)秀的特性也延續(xù)至第三階段,我們基于底層 Prometheus SDK 設(shè)計(jì)了一套完善的指標(biāo)埋點(diǎn) SDK,并且借助字節(jié)碼插樁的便捷,優(yōu)化并豐富了更多了組件庫。(在此階段,OpenTelemetry SDK 主版本是 1.3.x ,相關(guān) Metrics SDK 還處于Alpha 階段)

Otel 的 Java Instrumnetation 主要使用 WeakConcurrentMap 來做異步鏈路上下文數(shù)據(jù)傳遞和同線程上下文關(guān)聯(lián)的容器,由于 Otel 對(duì)許多流行組件庫做了增強(qiáng),因此 WeakConcurrentMap 的使用頻率也是非常高的,針對(duì)這個(gè)對(duì)象的 size 做監(jiān)控,有助于排查因探針導(dǎo)致的內(nèi)存泄露問題,且它的增長(zhǎng)率一旦達(dá)到我們?cè)O(shè)定的閾值便會(huì)告警,提早進(jìn)行人工干預(yù),執(zhí)行相關(guān)預(yù)案,防止線上故障發(fā)生。

部分自監(jiān)控面板

b3ab5bee-7a83-11ed-8abf-dac502259ad0.png

3.4.2擴(kuò)展鏈路透?jìng)鲄f(xié)

1) 引入RPC ID

為了更好地關(guān)聯(lián)上下游應(yīng)用,讓每個(gè)流量都有“身份”,我們擴(kuò)展了 TextMapPropagator 接口,讓每個(gè)流量在鏈路上都知道請(qǐng)求的來源,這對(duì)跨區(qū)域,環(huán)境調(diào)用排障場(chǎng)景起到關(guān)鍵性作用。

b3cdd6d8-7a83-11ed-8abf-dac502259ad0.png

此外,對(duì)于跨端場(chǎng)景,我們參考了阿里鷹眼調(diào)用鏈RPCID模型,增加了RpcID字段,這個(gè)字段在每次發(fā)生跨端調(diào)用時(shí)末尾數(shù)值會(huì)自增,而對(duì)于下游應(yīng)用,字段本身的層級(jí)自增:

b3fb7462-7a83-11ed-8abf-dac502259ad0.png

該字段擁有以下作用:

持提供精簡(jiǎn)化的調(diào)用鏈路視圖,查詢臃腫鏈路(如那些涉及緩存,DB調(diào)用大于 2000 Span的鏈路)時(shí)只提供 RPC 調(diào)用節(jié)點(diǎn)和調(diào)用層次關(guān)系。

鏈路保真,客戶端鏈路數(shù)據(jù)上報(bào)隊(duì)列并不是個(gè)無界限隊(duì)列,當(dāng)客戶端自身調(diào)用頻繁時(shí),若上報(bào)隊(duì)列堆積達(dá)到閾值即會(huì)丟棄,這會(huì)造成整個(gè)鏈路的不完整,當(dāng)然這是預(yù)期內(nèi)的現(xiàn)象,但若沒有RpcID字段,鏈路視圖將無法關(guān)聯(lián)丟失的節(jié)點(diǎn),從而導(dǎo)致整個(gè)鏈路層級(jí)混亂失真。

b41556ca-7a83-11ed-8abf-dac502259ad0.png

2) 自定義 Trace ID

為了實(shí)現(xiàn)鏈路詳情頁高效的檢索效率,我們擴(kuò)展 TraceID 生成邏輯,ID的前8位使用實(shí)例IP,中8位使用當(dāng)前時(shí)間戳,后16位采用隨機(jī)數(shù)生成。

32位自定義traceId:c0a8006b62583a724327993efd1865d8


c0a8006b  62583a72   4327993efd1865d8
   |         |             |
高8位(IP) 中8位(Timestmap) 低16位(Random)

這樣的好處有兩點(diǎn):

通過 TraceID 反向解析時(shí)間戳,鎖定時(shí)間范圍,有助于提高存儲(chǔ)庫 Clickhouse 的檢索效率,此外也能幫助決定當(dāng)前的 Trace 應(yīng)該查詢熱庫還是冷庫。

b42aebc0-7a83-11ed-8abf-dac502259ad0.png

綁定實(shí)例 IP,有助于關(guān)聯(lián)當(dāng)前 Trace 流量入口所屬的實(shí)例,在某些極端場(chǎng)景,當(dāng)鏈路上的節(jié)點(diǎn)檢索不到時(shí),也能通過實(shí)例和時(shí)間兩個(gè)要素來做溯源。

3) 異步調(diào)用識(shí)別

業(yè)務(wù)系統(tǒng)為了提高服務(wù)吞吐量,充分運(yùn)用硬件資源,異步調(diào)用場(chǎng)景可謂無處不在。我們基于Otel實(shí)現(xiàn)的異步鏈路上下文傳遞的基礎(chǔ)上,額外擴(kuò)充了"async_flag"字段來標(biāo)識(shí)當(dāng)前節(jié)點(diǎn)相對(duì)于父節(jié)點(diǎn)的調(diào)用關(guān)系,從而在展示層上能迅速找出發(fā)生異步調(diào)用的場(chǎng)景

b44602a2-7a83-11ed-8abf-dac502259ad0.png

3.4.3 更清晰的調(diào)用鏈結(jié)構(gòu)

在 Otel 支持的部分組件中,有些操作不涉及到網(wǎng)絡(luò)調(diào)用,或者具有非常頻繁的操作,如 MVC 過程,數(shù)據(jù)庫連接獲取等,通常來說這類節(jié)點(diǎn)在鏈路詳情主視圖中的意義不大,因此我們對(duì)這類節(jié)點(diǎn)的產(chǎn)生邏輯進(jìn)行了優(yōu)化調(diào)整,使得整個(gè)鏈路主體結(jié)構(gòu)聚焦于“跨端”,同時(shí),對(duì)部分核心組件關(guān)鍵內(nèi)部方法細(xì)節(jié)做了增強(qiáng),以“事件”的形式掛載于它們的父節(jié)點(diǎn)上,便于更細(xì)粒度的排查:

RPC 調(diào)用關(guān)鍵內(nèi)部事件

b4564856-7a83-11ed-8abf-dac502259ad0.png

DB 調(diào)用連接獲取事件

b4679980-7a83-11ed-8abf-dac502259ad0.png

3.4.4 profiling 的支持

1)線程棧分析的集成。通過集成 Arthas 這類工具,可以很方便地查看某個(gè)實(shí)例線程的實(shí)時(shí)堆棧信息,同時(shí)對(duì)采樣間隔做控制,避免頻繁抓取影響業(yè)務(wù)自身性能。

b49bbd0a-7a83-11ed-8abf-dac502259ad0.png

2)通過集成 pyroscope,打通高延遲性能排查最后一公里。Pyroscope 對(duì) async profiler 做了二次開發(fā),同時(shí)也支持 Otel 去集成,但截至目前,官方并沒有實(shí)現(xiàn)完整的 Profiling 行為的生命周期,而 Profiling 行為一定程度上會(huì)影響性能,于是我們對(duì)官方 Pyroscope 的生命周期做了擴(kuò)展,實(shí)現(xiàn)“停止”行為的同時(shí),采用時(shí)間輪算法來檢測(cè)特定操作的耗時(shí),當(dāng)達(dá)到期望的閾值將觸發(fā)開啟 profiling, 待操作結(jié)束或超過最大閾值則停止。

b4d13ade-7a83-11ed-8abf-dac502259ad0.png

b4f223a2-7a83-11ed-8abf-dac502259ad0.png

關(guān)于性能診斷相關(guān)的運(yùn)用,請(qǐng)期待后續(xù)診斷專題。

4

0xff 結(jié)語

縱觀得物在應(yīng)用監(jiān)控采集領(lǐng)域的三大里程碑迭代,第一階段的 CAT 則是 0~1 的過程,它提供了應(yīng)用服務(wù)對(duì)自身觀測(cè)的途徑,讓業(yè)務(wù)方第一次真實(shí)地了解了服務(wù)運(yùn)行狀況,而第二階段開始,隨著業(yè)務(wù)發(fā)展的飛速提升,業(yè)務(wù)方對(duì)監(jiān)控系統(tǒng)的要求就不僅只是從無到有了,而是要精細(xì),準(zhǔn)確。

因此,快速迭代的背景下,功能與架構(gòu)演進(jìn)層面的矛盾,加上外部云原生大背景下可觀測(cè)領(lǐng)域的發(fā)展因素,促使我們進(jìn)行了基于 OpenTelemetry 體系的第三階段的演進(jìn)。功能,產(chǎn)品層面均取得了優(yōu)異的結(jié)果。如今,我們即將進(jìn)行下一階段的演進(jìn),深度結(jié)合調(diào)用鏈與相關(guān)診斷工具,以第三階段為基礎(chǔ),讓得物全鏈路追蹤技術(shù)正式邁入性能分析診斷時(shí)代。

審核編輯 :李倩



聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 監(jiān)控系統(tǒng)

    關(guān)注

    21

    文章

    3948

    瀏覽量

    177429
  • cat
    cat
    +關(guān)注

    關(guān)注

    1

    文章

    75

    瀏覽量

    21344
  • 微服務(wù)
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    7447

原文標(biāo)題:得物云原生全鏈路追蹤Trace2.0-采集篇

文章出處:【微信號(hào):OSC開源社區(qū),微信公眾號(hào):OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    云原生AI服務(wù)怎么樣

    云原生AI服務(wù),是指采用云原生的原則和技術(shù)來構(gòu)建、部署和管理人工智能應(yīng)用及工作負(fù)載的方法和模式。那么,云原生AI服務(wù)怎么樣呢?下面,AI部落小編帶您了解。
    的頭像 發(fā)表于 01-23 10:47 ?133次閱讀

    云原生LLMOps平臺(tái)作用

    云原生LLMOps平臺(tái)是一種基于云計(jì)算基礎(chǔ)設(shè)施和開發(fā)工具,專門用于構(gòu)建、部署和管理大型語言模型(LLM)生命周期的平臺(tái)。以下,是對(duì)云原生LLMOps平臺(tái)作用的梳理,由AI部落小編整理。
    的頭像 發(fā)表于 01-06 10:21 ?122次閱讀

    如何選擇云原生機(jī)器學(xué)習(xí)平臺(tái)

    當(dāng)今,云原生機(jī)器學(xué)習(xí)平臺(tái)因其彈性擴(kuò)展、高效部署、低成本運(yùn)營等優(yōu)勢(shì),逐漸成為企業(yè)構(gòu)建和部署機(jī)器學(xué)習(xí)應(yīng)用的首選。然而,市場(chǎng)上的云原生機(jī)器學(xué)習(xí)平臺(tái)種類繁多,功能各異,如何選擇云原生機(jī)器學(xué)習(xí)平臺(tái)呢?下面,AI部落小編帶您探討。
    的頭像 發(fā)表于 12-25 11:54 ?171次閱讀

    構(gòu)建云原生機(jī)器學(xué)習(xí)平臺(tái)流程

    構(gòu)建云原生機(jī)器學(xué)習(xí)平臺(tái)是一個(gè)復(fù)雜而系統(tǒng)的過程,涉及數(shù)據(jù)收集、處理、特征提取、模型訓(xùn)練、評(píng)估、部署和監(jiān)控等多個(gè)環(huán)節(jié)。
    的頭像 發(fā)表于 12-14 10:34 ?180次閱讀

    什么是云原生MLOps平臺(tái)

    云原生MLOps平臺(tái),是指利用云計(jì)算的基礎(chǔ)設(shè)施和開發(fā)工具,來構(gòu)建、部署和管理機(jī)器學(xué)習(xí)模型的生命周期的平臺(tái)。以下,是對(duì)云原生MLOps平臺(tái)的介紹,由AI部落小編整理。
    的頭像 發(fā)表于 12-12 13:13 ?177次閱讀

    梯度科技入選2024云原生企業(yè)TOP50榜單

    近日,國內(nèi)專業(yè)咨詢機(jī)構(gòu)DBC德本咨詢發(fā)布“2024云原生企業(yè)TOP50”榜單。梯度科技憑借自主研發(fā)的“梯度智能云平臺(tái)”入選該榜單,彰顯公司在該領(lǐng)域的行業(yè)競(jìng)爭(zhēng)力。
    的頭像 發(fā)表于 12-06 11:35 ?343次閱讀

    軟通動(dòng)力榮登2024云原生企業(yè)TOP50榜單

    近日,DBC德本咨詢發(fā)布“2024云原生企業(yè)TOP50”榜單,軟通動(dòng)力憑借自研的“天鶴云原生數(shù)據(jù)庫平臺(tái)” 榮登該榜單第8名,彰顯了公司在該領(lǐng)域的行業(yè)競(jìng)爭(zhēng)力。
    的頭像 發(fā)表于 12-04 11:27 ?294次閱讀

    云原生和數(shù)據(jù)庫哪個(gè)好一些?

    云原生和數(shù)據(jù)庫哪個(gè)好一些?云原生和數(shù)據(jù)庫各有其獨(dú)特的優(yōu)勢(shì),適用于不同的場(chǎng)景。云原生強(qiáng)調(diào)高效資源利用、快速開發(fā)部署和高可伸縮性,適合需要高度靈活性和快速迭代的應(yīng)用。而數(shù)據(jù)庫則注重?cái)?shù)據(jù)一致性、共享和獨(dú)立性,確保數(shù)據(jù)的穩(wěn)定和安全,適用
    的頭像 發(fā)表于 11-29 10:07 ?218次閱讀

    k8s微服務(wù)架構(gòu)就是云原生嗎??jī)烧呤鞘裁搓P(guān)系

    k8s微服務(wù)架構(gòu)就是云原生嗎?K8s微服務(wù)架構(gòu)并不等同于云原生,但兩者之間存在密切的聯(lián)系。Kubernetes在云原生架構(gòu)中扮演著核心組件的角色,它簡(jiǎn)化了容器化應(yīng)用程序的管理,提供了彈性、自動(dòng)化
    的頭像 發(fā)表于 11-25 09:39 ?201次閱讀

    云原生和非云原生哪個(gè)好?六大區(qū)別詳細(xì)對(duì)比

    云原生和非云原生各有優(yōu)劣,具體選擇取決于應(yīng)用場(chǎng)景。云原生利用云計(jì)算的優(yōu)勢(shì),通過微服務(wù)、容器化和自動(dòng)化運(yùn)維等技術(shù),提高了應(yīng)用的可擴(kuò)展性、更新速度和成本效益。非云原生則可能更適合對(duì)延遲敏感
    的頭像 發(fā)表于 09-13 09:53 ?481次閱讀

    京東云原生安全產(chǎn)品重磅發(fā)布

    “安全產(chǎn)品那么多,我怎么知道防住了?”“大家都說自己是云原生的,我看都是換湯不換藥”在與客戶溝通云原生安全方案的時(shí)候,經(jīng)常會(huì)遇到這樣的吐槽。越來越的客戶已經(jīng)開始了云原生化的技術(shù)架構(gòu)改造,也意識(shí)到
    的頭像 發(fā)表于 07-26 10:36 ?553次閱讀
    京東<b class='flag-5'>云原生</b>安全產(chǎn)品重磅發(fā)布

    從積木式到裝配式云原生安全

    云原生安全風(fēng)險(xiǎn) 隨著云原生架構(gòu)的快速發(fā)展,核心能力逐漸穩(wěn)定,安全問題日趨緊急。在云原生安全領(lǐng)域不但有新技術(shù)帶來的新風(fēng)險(xiǎn),傳統(tǒng)IT基礎(chǔ)設(shè)施下的安全威脅也依然存在。要想做好云原生安全,就要
    的頭像 發(fā)表于 07-26 10:35 ?359次閱讀
    從積木式到裝配式<b class='flag-5'>云原生</b>安全

    基于DPU與SmartNic的云原生SDN解決方案

    隨著云計(jì)算,大數(shù)據(jù)和人工智能等技術(shù)的蓬勃發(fā)展,數(shù)據(jù)中心面臨著前所未有的數(shù)據(jù)洪流和計(jì)算壓力,這對(duì)SDN提出了更高的性能和效率要求。自云原生概念被提出以來,Kubernetes為云原生應(yīng)用的落地提供了一
    的頭像 發(fā)表于 07-22 11:44 ?800次閱讀
    基于DPU與SmartNic的<b class='flag-5'>云原生</b>SDN解決方案

    云原生轉(zhuǎn)型中從理念到實(shí)踐的探索與挑戰(zhàn)

    以“全面智能化,躍升數(shù)智生產(chǎn)力”為主題的華為第21屆全球分析師大會(huì)近日在深圳舉行。在本次大會(huì)的“5.5G Core,智能化點(diǎn)亮世界”云核心網(wǎng)分論壇上,廣東移動(dòng)網(wǎng)絡(luò)云運(yùn)維總監(jiān)王喆發(fā)表了“云原生轉(zhuǎn)型
    的頭像 發(fā)表于 04-23 11:45 ?508次閱讀

    云原生是大模型“降本增效”的解藥嗎?

    云原生AI正當(dāng)時(shí)
    的頭像 發(fā)表于 02-20 09:31 ?444次閱讀