掌握分佈式跟蹤:微服務和復雜系統性能分析

馮文輝

買這商品的人也買了...

商品描述

本書是作者基於其在Uber跟蹤團隊擔任技術主管時的個人經歷而寫的。本書分4部分共14章,內容包括:為什麽需要分佈式跟蹤、跟蹤一次HotROD之旅、分佈式跟蹤基礎、OpenTracing的埋點基礎、異步應用程序埋點、跟蹤標準與生態系統、使用服務網格進行跟蹤、關於採樣、跟蹤的價值、分佈式上下文傳播、集成指標與日誌、通過數據挖掘提煉洞見、在大型組織中實施跟蹤、分佈式跟蹤系統的底層架構。希望讀者能通過本書瞭解分佈式跟蹤及其相關應用的基本原則和設計思路,從而找到將其應用到自己的項目和系統中的有效方法。本書的目標讀者包括應用程序開發人員、SRE工程師、DevOps工程師、框架和基礎設施開發人員、技術經理和管理人員、跟蹤團隊等。

目錄大綱

I 引言 1 1 為什麽需要分佈式跟蹤 2 微服務與雲原生應用程序 3 什麽是可觀測性 5 微服務的可觀測性挑戰 7 傳統的監控工具 9 指標 10 日誌 11 分佈式跟蹤 12 我在跟蹤領域的經歷 14 為何編寫本書 17 總結 18 參考資料 19 2 跟蹤一次HotROD之旅 20 先決條件 21 從預打包的二進制文件運行 21 從Docker鏡像運行 22 從源代碼運行 22 啟動Jaeger 24 初識HotROD 26 架構 29 數據流 30 上下文日誌 32 span標記與日誌 35 確定延遲的來源 37 資源使用屬性 50 總結 53 參考資料 54 3 分佈式跟蹤基礎 55 想法 56 請求相關性 56 黑盒推理 57 特定於域的模式 57 元數據傳播 57 剖析分佈式跟蹤 59 採樣 60 保留因果關系 60 請求間因果關系 62 跟蹤模型 63 事件模型 63 span模型 65 時鐘偏差調整 67 跟蹤分析 69 總結 70 參考資料 70 Ⅱ 數據收集問題 73 4 OpenTracing的埋點基礎 74 先決條件 76 項目源代碼 76 Go開發環境 77 Java開發環境 78 Python開發環境 78 MySQL數據庫 78 查詢工具(curl或wget) 79 跟蹤後端(Jaeger) 79 OpenTracing 80 練習1:Hello應用程序 83 用Go語言實現Hello應用程序 84 用Java語言實現Hello應用程序 88 用Python語言實現Hello應用程序 92 練習總結 94 練習2:第一個跟蹤 94 步驟1:創建跟蹤器實例 94 步驟2:啟動span 99 步驟3:註釋span 102 練習總結 107 練習3:跟蹤函數和傳遞上下文 108 步驟1:跟蹤單個函數 109 步驟2:將多個span合並為一個跟蹤 111 步驟3:傳播進程內上下文 115 練習總結 123 練習4:跟蹤RPC請求 124 步驟1:拆解單體 124 步驟2:在進程之間傳遞上下文 127 步驟3:應用OpenTracing推薦的標記 136 練習總結 141 練習5:使用baggage 141 在Go中使用baggage 142 在Java中使用baggage 142 在Python中使用baggage 143 練習總結 143 練習6:自動埋點 143 Go中的開源埋點 144 Java中的自動埋點 146 Python中的自動埋點 148 練習7:額外練習 151 總結 151 參考資料 152 5 異步應用程序埋點 153 先決條件 154 項目源代碼 154 Java 開發環境 155 Kafka、ZooKeeper、Redis與Jaeger 155 Tracing Talk聊天應用程序 156 實現 158 運行應用程序 162 觀察跟蹤 163 使用OpenTracing埋點 166 Spring埋點 167 tracer resolver 167 Redis埋點 168 Kafka埋點 170 埋點異步代碼 178 總結 183 參考資料 183 6 跟蹤標準與生態系統 184 埋點形式 185 分析跟蹤部署和互操作性 188 跟蹤的五種含義 190 瞭解受眾 192 生態系統 193 跟蹤系統 193 X-Ray、Stackdriver等 194 標準項目 194 總結 200 參考資料 201 7 使用服務網格進行跟蹤 202 服務網格 203 服務網格的可觀測性 206 先決條件 207 項目源代碼 207 Java開發環境 208 Kubernetes 208 Istio 208 Hello應用程序 210 使用Istio進行分佈式跟蹤 213 使用Istio生成服務圖 223 分佈式上下文和路由 225 總結 228 參考資料 228 8 關於採樣 230 基於頭部的一致性採樣 231 概率採樣 231 速率限制採樣 232 保證吞吐量的概率採樣 234 自適應採樣 235 上下文敏感的採樣 244 實時採樣或調試採樣 244 如何處理過採樣 247 基於尾部的一致性採樣 249 部分採樣 253 總結 253 參考資料 253 Ⅲ 從跟蹤中獲取價值 255 9 跟蹤的價值 256 作為知識庫的跟蹤 257 服務圖 257 深度,路徑感知服務圖 259 檢測架構問題 262 性能分析 263 關鍵路徑分析 263 識別跟蹤模式 265 範例 269 延遲直方圖 271 長期性能分析 273 總結 273 參考資料 274 10 分佈式上下文傳播 275 布朗跟蹤平面 276 Pivot Tracing 280 混沌工程 283 流量標記 285 生產環境測試 286 生產環境調試 287 在生產環境中進行開發 288 總結 289 參考資料 289 11 集成指標與日誌 291 可觀測性的三大支柱 292 先決條件 294 項目源代碼 294 Java開發環境 295 在Docker中運行服務器 295 在Kibana中聲明索引模式 296 運行客戶端 297 Hello應用程序 298 與指標集成 299 通過跟蹤埋點實現標準指標 299 向標準指標中添加上下文 303 上下文感知的指標API 308 與日誌集成 309 結構化日誌記錄 309 將日誌與跟蹤上下文關聯起來 311 上下文感知的日誌API 316 在跟蹤系統中捕獲日誌 316 是否需要單獨的日誌記錄和跟蹤後端 318 總結 319 參考資料 320 12 通過數據挖掘提煉洞見 321 特徵提取 322 數據挖掘管道的組件 323 跟蹤後端 324 跟蹤完成觸發器 324 特徵提取器 325 聚合器 326 特徵提取練習 326 先決條件 328 項目源代碼 328 在Docker中運行服務器 329 在Elasticsearch中定義索引映射 330 Java開發環境 331 微服務模擬器 331 在Kibana中定義索引模式 334 span計數作業 336 跟蹤完成觸發器 338 特徵提取器 340 觀測趨勢 341 謹防推斷 349 歷史分析 350 實時分析 350 總結 353 參考資料 353 Ⅳ 部署和維護跟蹤基礎設施 355 13 在大型組織中實施跟蹤 356 為什麽很難部署跟蹤埋點 357 減少採用障礙 358 標準框架 359 內部適配器庫 360 默認啟用跟蹤 361 monorepo 361 與現有的基礎設施集成 362 從哪裡開始 362 構建文化 364 解釋價值 364 與開發人員工作流集成 365 跟蹤質量指標 366 故障排除指南 369 跳出關鍵路徑 369 總結 369 參考資料 370 14 分佈式跟蹤系統的底層架構 371 為什麽需要自己“造輪子” 372 定製和集成 372 帶寬成本 372 把控數據 373 押註新興標準 373 架構和部署模式 374 基本架構:代理+收集器+查詢服務 374 流式架構 377 多租戶 378 安全 381 在多個數據中心運行 382 監控和故障診斷 384 彈性 386 過採樣 386 調試跟蹤 387 數據中心故障轉移導致的流量峰值 387 無休止的跟蹤 387 長跟蹤 388 總結 388 參考資料 388 後記 390 參考資料 393