溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

發(fā)布時(shí)間:2020-09-01 01:32:04 來(lái)源:網(wǎng)絡(luò) 閱讀:837 作者:Java月亮呀 欄目:編程語(yǔ)言

五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

分布式系統(tǒng)調(diào)用鏈監(jiān)控

  • 應(yīng)用架構(gòu)由集中式向分布式演進(jìn)后,整個(gè)調(diào)用關(guān)系變得復(fù)雜。
  • 分布式架構(gòu)由復(fù)雜且較大規(guī)模集群構(gòu)成,各個(gè)應(yīng)用之間相當(dāng)獨(dú)立,可能由不同團(tuán)隊(duì)、不同語(yǔ)言實(shí)現(xiàn)。
  • 系統(tǒng)一個(gè)完整的調(diào)用過(guò)程可能橫跨多個(gè)服務(wù)及數(shù)據(jù)中心。
    • 復(fù)雜的調(diào)用導(dǎo)致系統(tǒng)出問(wèn)題后難以定位問(wèn)題。
  • 無(wú)法準(zhǔn)確知道整體系統(tǒng)性能及運(yùn)行情況。

    全鏈路性能監(jiān)控

    一個(gè)請(qǐng)求完整的調(diào)用鏈可能如下圖,經(jīng)過(guò)多個(gè)系統(tǒng)服務(wù),調(diào)用關(guān)系復(fù)雜。
    五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

期間我們會(huì)關(guān)注各個(gè)調(diào)用的各項(xiàng)性能指標(biāo),比如吞吐量(TPS)、響應(yīng)時(shí)間及錯(cuò)誤記錄等。

  • 吞吐量,根據(jù)拓?fù)淇上鄳?yīng)計(jì)算組件、平臺(tái)、物理設(shè)備的實(shí)時(shí)吞吐量。
  • 響應(yīng)時(shí)間,包括整體調(diào)用的響應(yīng)時(shí)間和各個(gè)服務(wù)的響應(yīng)時(shí)間等。
  • 錯(cuò)誤記錄,根據(jù)服務(wù)返回統(tǒng)計(jì)單位時(shí)間異常次數(shù)。

全鏈路性能監(jiān)控從整體維度到局部維度展示各項(xiàng)指標(biāo),將跨應(yīng)用的所有調(diào)用鏈性能信息集中展現(xiàn),可方便度量整體和局部性能,并且方便找到故障產(chǎn)生的源頭,生產(chǎn)上可極大縮短故障排除時(shí)間。

Google Dapper

系統(tǒng)整個(gè)調(diào)用鏈

  1. 當(dāng)用戶發(fā)起一個(gè)請(qǐng)求時(shí),首先到達(dá)前端A服務(wù),然后分別對(duì)B服務(wù)和C服務(wù)進(jìn)行RPC調(diào)用;
  2. B服務(wù)處理完給A做出響應(yīng),但是C服務(wù)還需要和后端的D服務(wù)和E服務(wù)交互之后再返還給A服務(wù),最后由A服務(wù)來(lái)響應(yīng)用戶的請(qǐng)求;
    五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

對(duì)整個(gè)調(diào)用過(guò)程的追蹤

  1. 請(qǐng)求到來(lái)生成一個(gè)全局TraceID,通過(guò)TraceID可以串聯(lián)起整個(gè)調(diào)用鏈,一個(gè)TraceID代表一次請(qǐng)求。
  2. 除了TraceID外,還需要SpanID用于記錄調(diào)用父子關(guān)系。每個(gè)服務(wù)會(huì)記錄下parent id和span id,通過(guò)他們可以組織一次完整調(diào)用鏈的父子關(guān)系。
  3. 一個(gè)沒(méi)有parent id的span成為root span,可以看成調(diào)用鏈入口。
  4. 所有這些ID可用全局唯一的64位整數(shù)表示;
  5. 整個(gè)調(diào)用過(guò)程中每個(gè)請(qǐng)求都要透?jìng)鱐raceID和SpanID。
  6. 每個(gè)服務(wù)將該次請(qǐng)求附帶的TraceID和附帶的SpanID作為parent id記錄下,并且將自己生成的SpanID也記錄下。
  7. 要查看某次完整的調(diào)用則只要根據(jù)TraceID查出所有調(diào)用記錄,然后通過(guò)parent id和span id組織起整個(gè)調(diào)用父子關(guān)系。
    五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

調(diào)用鏈監(jiān)控核心工作

  • 調(diào)用鏈數(shù)據(jù)的生成,對(duì)整個(gè)調(diào)用過(guò)程的所有應(yīng)用進(jìn)行埋點(diǎn)并輸出日志。
  • 調(diào)用鏈數(shù)據(jù)采集,對(duì)各個(gè)應(yīng)用中的日志數(shù)據(jù)進(jìn)行采集。
  • 調(diào)用鏈數(shù)據(jù)存儲(chǔ)及查詢,對(duì)采集到的數(shù)據(jù)進(jìn)行存儲(chǔ),由于日志數(shù)據(jù)量一般都很大,不僅要能對(duì)其存儲(chǔ),還需要能提供快速查詢。
  • 指標(biāo)運(yùn)算、存儲(chǔ)及查詢,對(duì)采集到的日志數(shù)據(jù)進(jìn)行各種指標(biāo)運(yùn)算,將運(yùn)算結(jié)果保存起來(lái)。
  • 告警功能,提供各種閥值警告功能。

    整體架構(gòu)

    五分鐘教會(huì)你分布式系統(tǒng)調(diào)用鏈監(jiān)控

  • 通過(guò)AGENT生成調(diào)用鏈日志。
  • 通過(guò)logstash采集日志到kafka。
  • kafka負(fù)責(zé)提供數(shù)據(jù)給下游消費(fèi)。
  • storm計(jì)算匯聚指標(biāo)結(jié)果并落到es。
  • storm抽取trace數(shù)據(jù)并落到es,這是為了提供比較復(fù)雜的查詢。比如通過(guò)時(shí)間維度查詢調(diào)用鏈,可以很快查詢出所有符合的traceID,根據(jù)這些traceID再去hbase查數(shù)據(jù)就快了。
  • logstash將kafka原始數(shù)據(jù)拉取到hbase中。hbase的rowkey為traceID,根據(jù)traceID查詢是很快的。

AGENT無(wú)侵入部署

通過(guò)AGENT代理的無(wú)侵入式部署,將性能測(cè)量與業(yè)務(wù)邏輯完全分離,可以測(cè)量任意類的任意方法的執(zhí)行時(shí)間,這種方式大大提高了采集效率,并且減少運(yùn)維成本。根據(jù)服務(wù)跨度主要分為兩大類AGENT:

  1. 服務(wù)內(nèi)AGENT,這種方式是通過(guò)Java的agent機(jī)制,對(duì)服務(wù)內(nèi)部的方法調(diào)用層次信息進(jìn)行數(shù)據(jù)收集,如方法調(diào)用耗時(shí)、入?yún)ⅰ⒊鰠⒌刃畔ⅰ?/p>

  2. 跨服務(wù)AGENT,這種情況需要對(duì)主流RPC框架以插件形式提供無(wú)縫支持。并通過(guò)提供標(biāo)準(zhǔn)數(shù)據(jù)規(guī)范以適應(yīng)自定義RPC框架:
  • Dubbo支持
  • Rest支持
  • 自定義RPC支持

比如生成的數(shù)據(jù)格式如下:

{
    "hostIp": "192.168.4.1",
    "instanceName": "TracingDemo",
    "isEntry": true,
    "errCode": 0,
    "spanId": "3cbfe7f0-141c-4597-8b15-38d2fb145e01",
    "parentId": "16a52a9f-e697-45ce-92fb-7395339eae4b",
    "traceId": "e5549498-60f3-4870-8483-fe26f6d0367b",
    "className": "dao.impl.ProductDaoImpl",
    "methodName": "queryProduct",
    "inParam": "",
    "createTime": 1448442004537,
    "returnTime": 1448442004537,
    "callTime": 5
}

調(diào)用鏈監(jiān)控好處

  • 準(zhǔn)確掌握生產(chǎn)一線應(yīng)用部署情況;
  • 從調(diào)用鏈全流程性能角度,識(shí)別對(duì)關(guān)鍵調(diào)用鏈,并進(jìn)行優(yōu)化。
  • 提供可追溯的性能數(shù)據(jù),量化 IT 運(yùn)維部門業(yè)務(wù)價(jià)值。
  • 快速定位代碼性能問(wèn)題,協(xié)助開發(fā)人員持續(xù)性的優(yōu)化代碼;
  • 協(xié)助開發(fā)人員進(jìn)行白盒測(cè)試,縮短系統(tǒng)上線穩(wěn)定期。
向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI