预购商品
书目分类
特别推荐
本書是作者基於其在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
Yuri Shkuro是Uber的軟體工程師,專注於分散式跟蹤、可觀察性、可靠性和性能領域的研究。他是Uber 跟蹤團隊的技術負責人。在加入Uber之前,Yuri曾在華爾街工作了15年,為投資銀行、高盛、摩根大通和摩根士丹利的衍生業務構建了交易和風險管理系統。Yuri在開源社區中的貢獻包括,成為OpenTracing專案的聯合創始人,以及Jaeger(Uber開發的分散式跟蹤平臺)的創建者和技術領導者。以上兩個專案都基於雲原生技術基金會(CNCF,Cloud Native Computing Foundation)。Yuri也是W3C分散式跟蹤工作組的特邀專家。 馮文輝,現任ThoughtWorks中國區資深架構諮詢師,具有十四年的軟體行業經驗,曾服務於多個世界500強企業,覆蓋銀行、保險、通信、汽車、物流等行業。為客戶提供敏捷開發、DevOps、架構設計與數位化轉型等諮詢服務。熱衷於探索更好的架構設計方法,助力企業的數位化轉型。譯有《SRE生存指南:系統中斷回應與正常執行時間優化》。
客服公告
热门活动
订阅电子报