《掌握分散式跟蹤:微服務和複雜系統性能分析》是電子工業出版社出版圖書,作者是【美】Yuri Shkuro
對Jaeger進行了全方位的講述,包括回顧分散式跟蹤的歷史和理論基礎
基本介紹
- 書名:掌握分散式跟蹤:微服務和複雜系統性能分析
- 作者:【美】Yuri Shkuro
- 譯者:馮文輝
- 出版社:電子工業出版社
- 出版時間:2022年4月
- 頁數:416 頁
- 定價:144 元
- 開本:16 開
- ISBN:9787121386824
內容簡介,圖書目錄,作者簡介,
內容簡介
作者基於其在Uber跟蹤團隊擔任技術主管時的個人經歷而寫的
圖書目錄
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分散式跟蹤工作組的特邀專家。
Yuri Shkuro擁有馬里蘭大學帕克分校計算機科學博士學位,以及俄羅斯排名前三的大學MEPhI(Moscow Engineering & Physics Institute)的計算機工程碩士學位。他是許多機器學習和神經網路領域學術論文的作者,其論文已被130多個出版物引用。
在學術研究和職業生涯之外,Yuri還協助編輯和製作了Lev Polyakov導演的幾部動畫短片,比如Only Love(2008年),該片曾在30多個電影節上放映並獲得了多個獎項,以及Piper the Goat and the Peace Pipe(2005年),該片在渥太華國際動畫節上獲獎。
譯者簡介
馮文輝,現任ThoughtWorks中國區資深架構諮詢師,具有11年的軟體行業經驗,曾服務於多個世界500強企業,覆蓋銀行、保險、通信、汽車、物流等行業。為客戶提供敏捷開發、DevOps、架構設計與數位化轉型等諮詢服務。熱衷於探索更好的架構設計方法,助力企業的數位化轉型。譯有《SRE生存指南:系統中斷回響與正常運行時間最大化》。
步驟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分散式跟蹤工作組的特邀專家。
Yuri Shkuro擁有馬里蘭大學帕克分校計算機科學博士學位,以及俄羅斯排名前三的大學MEPhI(Moscow Engineering & Physics Institute)的計算機工程碩士學位。他是許多機器學習和神經網路領域學術論文的作者,其論文已被130多個出版物引用。
在學術研究和職業生涯之外,Yuri還協助編輯和製作了Lev Polyakov導演的幾部動畫短片,比如Only Love(2008年),該片曾在30多個電影節上放映並獲得了多個獎項,以及Piper the Goat and the Peace Pipe(2005年),該片在渥太華國際動畫節上獲獎。
譯者簡介
馮文輝,現任ThoughtWorks中國區資深架構諮詢師,具有11年的軟體行業經驗,曾服務於多個世界500強企業,覆蓋銀行、保險、通信、汽車、物流等行業。為客戶提供敏捷開發、DevOps、架構設計與數位化轉型等諮詢服務。熱衷於探索更好的架構設計方法,助力企業的數位化轉型。譯有《SRE生存指南:系統中斷回響與正常運行時間最大化》。