DevOps 漫談:基於OpenCensus構建分散式跟蹤系統

DevOps 漫談:基於OpenCensus構建分散式跟蹤系統

來自專欄 睿哥雜貨鋪

  • Distributed Tracing and Monitoring System
  • OpenCensus: A framework for distributed tracing

隨著互聯網技術的高速發展,以往單應用的服務架構已經很難處理如山洪般增長的信息數據,隨著雲計算技術的大規模應用,以微服務、RESTful 為代表的各種軟體架構廣泛應用,跨團隊、跨編程語言的大規模分散式系統也越來越多。相對而言,現在要理解系統行為,追蹤診斷性能問題會複雜得多。

在單應用環境下,業務都在同一個伺服器上,如果出現錯誤和異常只需要盯住一個點,就可以快速定位和處理問題;但是在微服務的架構下,功能模塊天然是分散式部署運行的,前後台的業務流會經過很多個微服務的處理和傳遞,就連日誌監控都會成為一個大問題(日誌分散在多個伺服器、無狀態服務下如何查看業務流的處理順序等),更不要說服務之間還有複雜的交互關係。

用戶的一個請求在系統中會經過多個子系統(或者多個微服務)的處理,而且是發生在不同機器甚至是不同集群,當發生異常時需要快速發現問題,並準確定位到是哪個環節出了問題。對系統行為進行跟蹤必須持續進行,因為異常的發生是無法預料的,有些甚至難以重現。跟蹤需要無所不在,否則可能會遺漏某些重要的故障點。

為了解決上述問題,分散式跟蹤系統 一種幫助理解分散式系統行為、幫助分析性能問題的工具應運而生。

Distributed Tracing and Monitoring System


討論分散式跟蹤就一定會談到 Dapper —— Google 公司研發並應用於自己生產環境的一款跟蹤系統(設計之初參考了一些 Magpie 和 X-Trace 的理念 )。Dapper 不僅為業內提供了非常有參考價值的實現,同步發表論文的也成為了當前分散式跟蹤系統的重要理論基礎。

《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》

Modern Internet services are often implemented as complex, large-scale distributed systems.These applications are constructed from collections of software modules that may be developed by different teams, perhaps in different programming languages, and could span many thousands of machines across multiple physical facilities. Tools that aid in understanding system behavior and reasoning about performance issues are invaluable in such an environment.

在這篇論文中,Google 提出了關於分散式跟蹤系統的一些重要概念:

Annotation-based,基於標註或植入點、埋點

在應用程序或中間件中明確定義全局標註(Annotation),一個特殊的ID,通過這個 ID 連接每一條請求記錄。當然,這需要代碼植入,在生產環境中可以通過一個通用組件開放給開發人員。

跟蹤樹和span

在 Dapper 跟蹤樹(Trace tree)中,基本單元是樹節點(分配 spanid)。節點之間通過連線表示父子關係,通過 parentId 和 spanId 把所有的關係串聯起來,實現記錄業務流的作用。

Google Dapper 的理念影響了一批分散式跟蹤系統的發展,例如 2012 年,Twitter 公司嚴格按照 Dapper 論文的要求實現了 Zipkin (Scala 編寫,集成到 Twitter公司自己的分散式服務 Finagle );Uber 公司基於 Google Dapper 和 Twitter Zipkin 的靈感,開發了開源分散式跟蹤系統 Jaeger,例如 Jaeger 規範中同樣定義了 Span(跨度, 跨徑,兩個界限間的距離)。

然而,Google Dapper 的定位更準確的說是分析系統,並不能解決從生產服務中提取數據的難題,OpenCensus 項目為此提供了解決方案。

OpenCensus: A framework for distributed tracing


OpenCensus is a framework for stats collection and distributed tracing.

OpenCensus 項目是 Google 開源的一個用來收集和追蹤應用指標的第三方庫。OpenCensus 能夠提供了一套統一的測量工具:跨服務捕獲跟蹤跨度(span)、應用級別指標以及來自其他應用的元數據(例如日誌)。OpenCensus 有如下一些主要特點:

  • 標準通信協議和一致的 API :用於處理 metric 和 trace
  • 多語言庫,包括Java,C++,Go,.Net,Python,PHP,Node.js,Erlang 和 Ruby
  • 與 RPC 框架的集成,可以提供開箱即用的追蹤和指標。
  • 集成的存儲和分析工具
  • 完全開源,支持第三方集成和輸出的插件化
  • 不需要額外的伺服器或守護進程來支持 OpenCensus
  • In process debugging:一個可選的代理程序,用於在目標主機上顯示請求和指標數據

OpenCensus Concepts

Tags | 標籤

OpenCensus 允許系統在記錄時將度量與維度相關聯。記錄的數據使我們能夠從各種不同的角度分析測量結果,即使在高度互連和複雜的系統中也能夠應付。

Stats | 統計

Stats 收集庫和應用程序記錄的測量結果,匯總、導出統計數據。

Trace | 跟蹤

Trace 是嵌套 Span (跨度)的集合。Trace 包括單個用戶請求的處理進度,直到用戶請求得到響應。Trace 通常跨越分散式系統中的多個節點。跟蹤由 TraceId 唯一標識, Trace 中的所有 Span 都具有相同的 TraceId 。

一個 Span 代表一個操作或一個工作單位。多個 Span 可以是「Trace」的一部分,它代表跨多個進程/節點的執行路徑(通常是分散式的)。同一軌跡內的 Span 具有相同的 TraceId。

Span 共有屬性:

  • TraceId
  • SpanId
  • Start Time
  • End Time
  • Status

Span 可選屬性:

  • Parent SpanId
  • Remote Parent
  • Attributes
  • Annotations
  • Message Events
  • Links

Exporter

OpenCensus 是獨立於供應商的,可以通過各種 Exporter 實現將數據上傳到任何後端。儘管OpenCensus 為一些後端服務提供了 API ,但用戶也可以實現自己的 Exporter。

Introspection | 內省

OpenCensus 提供在線儀錶板,顯示進程中的診斷數據。這些頁面被稱為 z-pages ,它們有助於了解如何查看來自特定進程的數據,而不必依賴任何度量收集器或分散式跟蹤後端。

創建指標

  • 定義指標類型
  • 定義顯示方式

Track Metrics 一般需要考慮服務負載(Server Load)、響應時間(Response Time)、誤碼率(Error Rates)等。

收集指標數據

第三方數據介面

OpenCensus 收集和跟蹤的應用指標可以在本地顯示,也可將其發送到第三方分析工具或監控系統實現可視化,例如:

  • Prometheus|普羅米修斯
  • Stackdriver|適用於 Google Cloud Platform 與 AWS 應用的監控、日誌記錄和診斷工具 | 示例
  • Zipkin
  • OpenCensus Tracing with Uber』s Jaeger project

OpenZipkin 數據可視化示例

  • 函數內容為空(微秒級)

  • 串列調用函數方法,內容包括網路訪問和持久化操作(毫秒級)

  • 並行調用函數方法(Go routine),內容與上同

  • 多服務調用


工程師的自我修養:全英文技術學習實踐

Kanban看板管理實踐精要

DevOps 漫談:《鳳凰項目》從作坊到工廠的寓言故事

DevOps 漫談:選擇基礎設施部署和配置管理工具

黑客與技術、產業及其精神世界

黑客與技術、產業及其精神世界(二):論思想自由和知識產權制度

黑客與技術、產業及其精神世界(三):論設計者的品味 Part A

里程碑:DTrace 切換到 GPL 許可證

玩轉編程語言:構建自定義代碼生成器

芝加哥大學:貧窮如何改變你的思維模式

讀書筆記|《顧准日記》之 商城日記

讀書筆記|張集馨《時晴齋主人自敘年譜》

Machine Learning 資訊 | 經濟學家如何看人工智慧

太公分豬肉--香港特區授勛及嘉獎制度觀察

外軍研究|美軍授勛及嘉獎制度觀察

讀書筆記|黃仁宇《明代的漕運》

紅樓故事:康熙的秘密情報系統

Economist譯文:The Saudi blueprint 沙特王國的改革藍圖

《Linux Perf Master》Edition 0.3 發布

weixin.qq.com/r/q3VkfFf (二維碼自動識別)


推薦閱讀:

00後是不是大多數不知道什麼是YouTube?
如何評價mix2、iphone x、note8手感好?
谷歌的界面設計很差?
如何看待 Facebook 把谷歌爆料/抹黑?

TAG:分散式系統 | 谷歌Google | 性能分析 |