分佈式系統調用鏈監控

分佈式系統調用鏈監控

  • 應用架構由集中式向分佈式演進後,整個調用關係變得複雜。
  • 分佈式架構由複雜且較大規模集羣構成,各個應用之間至關獨立,可能由不一樣團隊、不一樣語言實現。
  • 系統一個完整的調用過程可能橫跨多個服務及數據中心。
  • 複雜的調用致使系統出問題後難以定位問題。
  • 沒法準確知道總體系統性能及運行狀況。

全鏈路性能監控

一個請求完整的調用鏈可能以下圖,通過多個系統服務,調用關係複雜。javascript

期間咱們會關注各個調用的各項性能指標,好比吞吐量(TPS)、響應時間及錯誤記錄等。html

  • 吞吐量,根據拓撲可相應計算組件、平臺、物理設備的實時吞吐量。
  • 響應時間,包括總體調用的響應時間和各個服務的響應時間等。
  • 錯誤記錄,根據服務返回統計單位時間異常次數。

全鏈路性能監控從總體維度到局部維度展現各項指標,將跨應用的全部調用鏈性能信息集中展示,可方便度量總體和局部性能,而且方便找到故障產生的源頭,生產上可極大縮短故障排除時間。前端

Google Dapper

系統整個調用鏈java

  1. 當用戶發起一個請求時,首先到達前端A服務,而後分別對B服務和C服務進行RPC調用;
  2. B服務處理完給A作出響應,可是C服務還須要和後端的D服務和E服務交互以後再返還給A服務,最後由A服務來響應用戶的請求;

對整個調用過程的追蹤後端

  1. 請求到來生成一個全局TraceID,經過TraceID能夠串聯起整個調用鏈,一個TraceID表明一次請求。
  2. 除了TraceID外,還須要SpanID用於記錄調用父子關係。每一個服務會記錄下parent id和span id,經過他們能夠組織一次完整調用鏈的父子關係。
  3. 一個沒有parent id的span成爲root span,能夠當作調用鏈入口。
  4. 全部這些ID可用全局惟一的64位整數表示;
  5. 整個調用過程當中每一個請求都要透傳TraceID和SpanID。
  6. 每一個服務將該次請求附帶的TraceID和附帶的SpanID做爲parent id記錄下,而且將本身生成的SpanID也記錄下。
  7. 要查看某次完整的調用則只要根據TraceID查出全部調用記錄,而後經過parent id和span id組織起整個調用父子關係。

調用鏈監控核心工做

  • 調用鏈數據的生成,對整個調用過程的全部應用進行埋點並輸出日誌。
  • 調用鏈數據採集,對各個應用中的日誌數據進行採集。
  • 調用鏈數據存儲及查詢,對採集到的數據進行存儲,因爲日誌數據量通常都很大,不只要能對其存儲,還須要能提供快速查詢。
  • 指標運算、存儲及查詢,對採集到的日誌數據進行各類指標運算,將運算結果保存起來。
  • 告警功能,提供各類閥值警告功能。

總體架構

  • 經過AGENT生成調用鏈日誌。
  • 經過logstash採集日誌到kafka。
  • kafka負責提供數據給下游消費。
  • storm計算匯聚指標結果並落到es。
  • storm抽取trace數據並落到es,這是爲了提供比較複雜的查詢。好比經過時間維度查詢調用鏈,能夠很快查詢出全部符合的traceID,根據這些traceID再去hbase查數據就快了。
  • logstash將kafka原始數據拉取到hbase中。hbase的rowkey爲traceID,根據traceID查詢是很快的。

AGENT無侵入部署

經過AGENT代理的無侵入式部署,將性能測量與業務邏輯徹底分離,能夠測量任意類的任意方法的執行時間,這種方式大大提升了採集效率,而且減小運維成本。根據服務跨度主要分爲兩大類AGENT:架構

  • 服務內AGENT,這種方式是經過Java的agent機制,對服務內部的方法調用層次信息進行數據收集,如方法調用耗時、入參、出參等信息。app

  • 跨服務AGENT,這種狀況須要對主流RPC框架以插件形式提供無縫支持。並經過提供標準數據規範以適應自定義RPC框架:框架

  1. Dubbo支持
  2. Rest支持
  3. 自定義RPC支持

好比生成的數據格式以下:運維

{
    "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
}複製代碼

調用鏈監控好處

  • 準確掌握生產一線應用部署狀況;
  • 從調用鏈全流程性能角度,識別對關鍵調用鏈,並進行優化。
  • 提供可追溯的性能數據,量化 IT 運維部門業務價值。
  • 快速定位代碼性能問題,協助開發人員持續性的優化代碼;
  • 協助開發人員進行白盒測試,縮短系統上線穩按期。

一些效果圖

====廣告時間,可直接跳過====分佈式

鄙人的新書《Tomcat內核設計剖析》已經在京東預售了,有須要的朋友能夠到 item.jd.com/12185360.ht… 進行預約。感謝各位朋友。

=========================

歡迎關注:

相關文章
相關標籤/搜索