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

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

作者: 馮文輝
出版社: 電子工業
出版在: 2022-03-01
ISBN-13: 9787121386824
ISBN-10: 7121386828
總頁數: 416 頁





內容描述


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


目錄大綱


I 引言1
1 為什麼需要分佈式跟踪□
微服務與雲原生應用程序3
什麼是可觀測性5
微服務的可觀測性挑戰7
傳統的監控工具9
指標10
日誌11
分佈式跟踪1□
我在跟踪領域的經歷14
為何編寫本書17
總結18
參考資料19
□ 跟踪一次HotROD之旅□0
先決條件□1
從預打包的二進製文件運行□1
從Docker鏡像運行□□
從源代碼運行□□
啟動Jaeger□4
初識HotROD□6
架構□9
數據流30
上下文日誌3□
span標記與日誌35
確定延遲的來源37
資源使用屬性50
總結53
參考資料54
3 分佈式跟踪基礎55
想法56
請求相關性56
黑盒推理57
特定於域的模式57
元數據傳播57
剖析分佈式跟踪59
採樣60
保留因果關係60
請求間因果關係6□
跟踪模型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
OpenTracing80
練習1:Hello應用程序83
用Go語言實現Hello應用程序84
用Java語言實現Hello應用程序88
用Python語言實現Hello應用程序9□
練習總結94
練習□:□□個跟踪94
步驟1:創建跟踪器實例94
步驟□:啟動span99
步驟3:註釋span10□
練習總結107
練習3:跟踪函數和傳遞上下文108
步驟1:跟踪單個函數109
步驟□:將多個span合併為一個跟踪111
步驟3:傳播進程內上下文115
練習總結1□3
練習4:跟踪RPC請求1□4
步驟1:拆解單體1□4
步驟□:在進程之間傳遞上下文1□7
步驟3:應用OpenTracing推薦的標記136
練習總結141
練習5:使用baggage141
在Go中使用baggage14□
在Java中使用baggage14□
在Python中使用baggage143
練習總結143
練習6:自動埋點143
Go中的開源埋點144
Java中的自動埋點146
Python中的自動埋點148
練習7:額外練習151
總結151
參考資料15□
5 異步應用程序埋點153
先決條件154
項目源代碼154
Java 開發環境155
Kafka、ZooKeeper、Redis與Jaeger155
Tracing Talk聊天應用程序156
實現158
運行應用程序16□
觀察跟踪163
使用OpenTracing埋點166
Spring埋點167
tracer resolver167
Redis埋點168
Kafka埋點170
埋點異步代碼178
總結183
參考資料183
6 跟踪標準與生態系統184
埋點形式185
分析跟踪部署和互操作性188
跟踪的五種含義190
了解受眾19□
生態系統193
跟踪系統193
X-Ray、Stackdriver等194
標準項目194
總結□00
參考資料□01
7 使用服務網格進行跟踪□0□
服務網格□03
服務網格的可觀測性□06
先決條件□07
項目源代碼□07
Java開發環境□08
Kubernetes□08
Istio□08
Hello應用程序□10
使用Istio進行分佈式跟踪□13
使用Istio生成服務圖□□3
分佈式上下文和路由□□5
總結□□8
參考資料□□8
8 關於採樣□30
基於頭部的一致性採樣□31
概率採樣□31
速率限制採樣□3□
保證吞吐量的概率採樣□34
自適應採樣□35
上下文敏感的採樣□44
實時採樣或調試採樣□44
如何處理過採樣□47
基於尾部的一致性採樣□49
部分採樣□53
總結□53
參考資料□53
Ⅲ 從跟踪中獲取價值□55
9 跟踪的價值□56
作為知識庫的跟踪□57
服務圖□57
深度,路徑感知服務圖□59
檢測架構問題□6□
性能分析□63
關鍵路徑分析□63
識別跟踪模式□65
範例□69
延遲直方圖□71
長期性能分析□73
總結□73
參考資料□74
10 分佈式上下文傳播□75
布朗跟踪平面□76
Pivot Tracing□80
混沌工程□83
流量標記□85
生產環境測試□86
生產環境調試□87
在生產環境中進行開發□88
總結□89
參考資料□89
11 集成指標與日誌□91
可觀測性的三大支柱□9□
先決條件□94
項目源代碼□94
Java開發環境□95
在Docker中運行服務器□95
在Kibana中聲明索引模式□96
運行客戶端□97
Hello應用程序□98
與指標集成□99
通過跟踪埋點實現標準指標□99
向標準指標中添加上下文303
上下文感知的指標API308
與日誌集成309
結構化日誌記錄309
將日誌與跟踪上下文關聯起來311
上下文感知的日誌API316
在跟踪系統中捕獲日誌316
是否需要單獨的日誌記錄和跟踪後端318
總結319
參考資料3□0
1□ 通過數據挖掘提煉洞見3□1
特徵提取3□□
數據挖掘管道的組件3□3
跟踪後端3□4
跟踪完成觸發器3□4
特徵提取器3□5
聚合器3□6
特徵提取練習3□6
先決條件3□8
項目源代碼3□8
在Docker中運行服務器3□9
在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
monorepo361
與現有的基礎設施集成36□
從哪裡開始36□
構建文化364
解釋價值364
與開發人員工作流集成365
跟踪質量指標366
故障排除指南369
跳出關鍵路徑369
總結369
參考資料370
14 分佈式跟踪系統的底層架構371
為什麼需要自己“造輪子”37□
定制和集成37□
帶寬成本37□
把控數據373
押注新興標準373
架構和部署模式374
基本架構:代理+收集器+查詢服務374
流式架構377
多租戶378
安全381
在多個數據中心運行38□
監控和故障診斷384
彈性386
過採樣386
調試跟踪387
數據中心故障轉移導致的流量峰值387
無休止的跟踪387
長跟踪388
總結388
參考資料388
後記390
參考資料393




相關書籍

Vue.js 開發實戰

作者 [美埃里克·漢切特(Erik Hanchett) 本·利斯頓(Benjamin Listwon) ;任強 鄧龔達 譯

2022-03-01

Beginning Quarkus Framework: Build Cloud-Native Enterprise Java Applications and Microservices

作者 Koleoso Tayo

2022-03-01

深入理解 Kafka:核心設計與實踐原理

作者 朱忠華

2022-03-01