掌握分布式跟蹤:微服務(wù)和復(fù)雜系統(tǒng)性能分析
定 價(jià):144 元
- 作者:(美)Yuri Shkuro(尤里·史庫羅)
- 出版時(shí)間:2022/3/1
- ISBN:9787121386824
- 出 版 社:電子工業(yè)出版社
- 中圖法分類:TP274
- 頁碼:416
- 紙張:
- 版次:01
- 開本:16開
本書是作者基于其在Uber跟蹤團(tuán)隊(duì)擔(dān)任技術(shù)主管時(shí)的個(gè)人經(jīng)歷而寫的。本書分4部分共14章,內(nèi)容包括:為什么需要分布式跟蹤、跟蹤一次HotROD之旅、分布式跟蹤基礎(chǔ)、OpenTracing的埋點(diǎn)基礎(chǔ)、異步應(yīng)用程序埋點(diǎn)、跟蹤標(biāo)準(zhǔn)與生態(tài)系統(tǒng)、使用服務(wù)網(wǎng)格進(jìn)行跟蹤、關(guān)于采樣、跟蹤的價(jià)值、分布式上下文傳播、集成指標(biāo)與日志、通過數(shù)據(jù)挖掘提煉洞見、在大型組織中實(shí)施跟蹤、分布式跟蹤系統(tǒng)的底層架構(gòu)。希望讀者能通過本書了解分布式跟蹤及其相關(guān)應(yīng)用的基本原則和設(shè)計(jì)思路,從而找到將其應(yīng)用到自己的項(xiàng)目和系統(tǒng)中的有效方法。本書的目標(biāo)讀者包括應(yīng)用程序開發(fā)人員、SRE工程師、DevOps工程師、框架和基礎(chǔ)設(shè)施開發(fā)人員、技術(shù)經(jīng)理和管理人員、跟蹤團(tuán)隊(duì)等。
Yuri Shkuro是Uber的軟件工程師,專注于分布式跟蹤、可觀察性、可靠性和性能領(lǐng)域的研究。他是Uber 跟蹤團(tuán)隊(duì)的技術(shù)負(fù)責(zé)人。在加入U(xiǎn)ber之前,Yuri曾在華爾街工作了15年,為頂級投資銀行、高盛、摩根大通和摩根士丹利的衍生業(yè)務(wù)構(gòu)建了交易和風(fēng)險(xiǎn)管理系統(tǒng)。Yuri在開源社區(qū)中的貢獻(xiàn)包括,成為OpenTracing項(xiàng)目的聯(lián)合創(chuàng)始人,以及Jaeger(Uber開發(fā)的分布式跟蹤平臺(tái))的創(chuàng)建者和技術(shù)領(lǐng)導(dǎo)者。以上兩個(gè)項(xiàng)目都基于云原生技術(shù)基金會(huì)(CNCF,Cloud Native Computing Foundation)。Yuri也是W3C分布式跟蹤工作組的特邀專家。
馮文輝,現(xiàn)任ThoughtWorks中國區(qū)資深架構(gòu)咨詢師,具有11年的軟件行業(yè)經(jīng)驗(yàn),曾服務(wù)于多個(gè)世界500強(qiáng)企業(yè),覆蓋銀行、保險(xiǎn)、通信、汽車、物流等行業(yè)。為客戶提供敏捷開發(fā)、DevOps、架構(gòu)設(shè)計(jì)與數(shù)字化轉(zhuǎn)型等咨詢服務(wù)。熱衷于探索更好的架構(gòu)設(shè)計(jì)方法,助力企業(yè)的數(shù)字化轉(zhuǎn)型。譯有《SRE生存指南:系統(tǒng)中斷響應(yīng)與正常運(yùn)行時(shí)間最大化》。
I 引言 1
1 為什么需要分布式跟蹤 2
微服務(wù)與云原生應(yīng)用程序 3
什么是可觀測性 5
微服務(wù)的可觀測性挑戰(zhàn) 7
傳統(tǒng)的監(jiān)控工具 9
指標(biāo) 10
日志 11
分布式跟蹤 12
我在跟蹤領(lǐng)域的經(jīng)歷 14
為何編寫本書 17
總結(jié) 18
參考資料 19
2 跟蹤一次HotROD之旅 20
先決條件 21
從預(yù)打包的二進(jìn)制文件運(yùn)行 21
從Docker鏡像運(yùn)行 22
從源代碼運(yùn)行 22
啟動(dòng)Jaeger 24
初識(shí)HotROD 26
架構(gòu) 29
數(shù)據(jù)流 30
上下文日志 32
span標(biāo)記與日志 35
確定延遲的來源 37
資源使用屬性 50
總結(jié) 53
參考資料 54
3 分布式跟蹤基礎(chǔ) 55
想法 56
請求相關(guān)性 56
黑盒推理 57
特定于域的模式 57
元數(shù)據(jù)傳播 57
剖析分布式跟蹤 59
采樣 60
保留因果關(guān)系 60
請求間因果關(guān)系 62
跟蹤模型 63
事件模型 63
span模型 65
時(shí)鐘偏差調(diào)整 67
跟蹤分析 69
總結(jié) 70
參考資料 70
Ⅱ 數(shù)據(jù)收集問題 73
4 OpenTracing的埋點(diǎn)基礎(chǔ) 74
先決條件 76
項(xiàng)目源代碼 76
Go開發(fā)環(huán)境 77
Java開發(fā)環(huán)境 78
Python開發(fā)環(huán)境 78
MySQL數(shù)據(jù)庫 78
查詢工具(curl或wget) 79
跟蹤后端(Jaeger) 79
OpenTracing 80
練習(xí)1:Hello應(yīng)用程序 83
用Go語言實(shí)現(xiàn)Hello應(yīng)用程序 84
用Java語言實(shí)現(xiàn)Hello應(yīng)用程序 88
用Python語言實(shí)現(xiàn)Hello應(yīng)用程序 92
練習(xí)總結(jié) 94
練習(xí)2:第一個(gè)跟蹤 94
步驟1:創(chuàng)建跟蹤器實(shí)例 94
步驟2:啟動(dòng)span 99
步驟3:注釋span 102
練習(xí)總結(jié) 107
練習(xí)3:跟蹤函數(shù)和傳遞上下文 108
步驟1:跟蹤單個(gè)函數(shù) 109
步驟2:將多個(gè)span合并為一個(gè)跟蹤 111
步驟3:傳播進(jìn)程內(nèi)上下文 115
練習(xí)總結(jié) 123
練習(xí)4:跟蹤RPC請求 124
步驟1:拆解單體 124
步驟2:在進(jìn)程之間傳遞上下文 127
步驟3:應(yīng)用OpenTracing推薦的標(biāo)記 136
練習(xí)總結(jié) 141
練習(xí)5:使用baggage 141
在Go中使用baggage 142
在Java中使用baggage 142
在Python中使用baggage 143
練習(xí)總結(jié) 143
練習(xí)6:自動(dòng)埋點(diǎn) 143
Go中的開源埋點(diǎn) 144
Java中的自動(dòng)埋點(diǎn) 146
Python中的自動(dòng)埋點(diǎn) 148
練習(xí)7:額外練習(xí) 151
總結(jié) 151
參考資料 152
5 異步應(yīng)用程序埋點(diǎn) 153
先決條件 154
項(xiàng)目源代碼 154
Java 開發(fā)環(huán)境 155
Kafka、ZooKeeper、Redis與Jaeger 155
Tracing Talk聊天應(yīng)用程序 156
實(shí)現(xiàn) 158
運(yùn)行應(yīng)用程序 162
觀察跟蹤 163
使用OpenTracing埋點(diǎn) 166
Spring埋點(diǎn) 167
tracer resolver 167
Redis埋點(diǎn) 168
Kafka埋點(diǎn) 170
埋點(diǎn)異步代碼 178
總結(jié) 183
參考資料 183
6 跟蹤標(biāo)準(zhǔn)與生態(tài)系統(tǒng) 184
埋點(diǎn)形式 185
分析跟蹤部署和互操作性 188
跟蹤的五種含義 190
了解受眾 192
生態(tài)系統(tǒng) 193
跟蹤系統(tǒng) 193
X-Ray、Stackdriver等 194
標(biāo)準(zhǔn)項(xiàng)目 194
總結(jié) 200
參考資料 201
7 使用服務(wù)網(wǎng)格進(jìn)行跟蹤 202
服務(wù)網(wǎng)格 203
服務(wù)網(wǎng)格的可觀測性 206
先決條件 207
項(xiàng)目源代碼 207
Java開發(fā)環(huán)境 208
Kubernetes 208
Istio 208
Hello應(yīng)用程序 210
使用Istio進(jìn)行分布式跟蹤 213
使用Istio生成服務(wù)圖 223
分布式上下文和路由 225
總結(jié) 228
參考資料 228
8 關(guān)于采樣 230
基于頭部的一致性采樣 231
概率采樣 231
速率限制采樣 232
保證吞吐量的概率采樣 234
自適應(yīng)采樣 235
上下文敏感的采樣 244
實(shí)時(shí)采樣或調(diào)試采樣 244
如何處理過采樣 247
基于尾部的一致性采樣 249
部分采樣 253
總結(jié) 253
參考資料 253
Ⅲ 從跟蹤中獲取價(jià)值 255
9 跟蹤的價(jià)值 256
作為知識(shí)庫的跟蹤 257
服務(wù)圖 257
深度,路徑感知服務(wù)圖 259
檢測架構(gòu)問題 262
性能分析 263
關(guān)鍵路徑分析 263
識(shí)別跟蹤模式 265
范例 269
延遲直方圖 271
長期性能分析 273
總結(jié) 273
參考資料 274
10 分布式上下文傳播 275
布朗跟蹤平面 276
Pivot Tracing 280
混沌工程 283
流量標(biāo)記 285
生產(chǎn)環(huán)境測試 286
生產(chǎn)環(huán)境調(diào)試 287
在生產(chǎn)環(huán)境中進(jìn)行開發(fā) 288
總結(jié) 289
參考資料 289
11 集成指標(biāo)與日志 291
可觀測性的三大支柱 292
先決條件 294
項(xiàng)目源代碼 294
Java開發(fā)環(huán)境 295
在Docker中運(yùn)行服務(wù)器 295
在Kibana中聲明索引模式 296
運(yùn)行客戶端 297
Hello應(yīng)用程序 298
與指標(biāo)集成 299
通過跟蹤埋點(diǎn)實(shí)現(xiàn)標(biāo)準(zhǔn)指標(biāo) 299
向標(biāo)準(zhǔn)指標(biāo)中添加上下文 303
上下文感知的指標(biāo)API 308
與日志集成 309
結(jié)構(gòu)化日志記錄 309
將日志與跟蹤上下文關(guān)聯(lián)起來 311
上下文感知的日志API 316
在跟蹤系統(tǒng)中捕獲日志 316
是否需要單獨(dú)的日志記錄和跟蹤后端 318
總結(jié) 319
參考資料 320
12 通過數(shù)據(jù)挖掘提煉洞見 321
特征提取 322
數(shù)據(jù)挖掘管道的組件 323
跟蹤后端 324
跟蹤完成觸發(fā)器 324
特征提取器 325
聚合器 326
特征提取練習(xí) 326
先決條件 328
項(xiàng)目源代碼 328
在Docker中運(yùn)行服務(wù)器 329
在Elasticsearch中定義索引映射 330
Java開發(fā)環(huán)境 331
微服務(wù)模擬器 331
在Kibana中定義索引模式 334
span計(jì)數(shù)作業(yè) 336
跟蹤完成觸發(fā)器 338
特征提取器 340
觀測趨勢 341
謹(jǐn)防推斷 349
歷史分析 350
實(shí)時(shí)分析 350
總結(jié) 353
參考資料 353
Ⅳ 部署和維護(hù)跟蹤基礎(chǔ)設(shè)施 355
13 在大型組織中實(shí)施跟蹤 356
為什么很難部署跟蹤埋點(diǎn) 357
減少采用障礙 358
標(biāo)準(zhǔn)框架 359
內(nèi)部適配器庫 360
默認(rèn)啟用跟蹤 361
monorepo 361
與現(xiàn)有的基礎(chǔ)設(shè)施集成 362
從哪里開始 362
構(gòu)建文化 364
解釋價(jià)值 364
與開發(fā)人員工作流集成 365
跟蹤質(zhì)量指標(biāo) 366
故障排除指南 369
跳出關(guān)鍵路徑 369
總結(jié) 369
參考資料 370
14 分布式跟蹤系統(tǒng)的底層架構(gòu) 371
為什么需要自己“造輪子” 372
定制和集成 372
帶寬成本 372
把控?cái)?shù)據(jù) 373
押注新興標(biāo)準(zhǔn) 373
架構(gòu)和部署模式 374
基本架構(gòu):代理+收集器+查詢服務(wù) 374
流式架構(gòu) 377
多租戶 378
安全 381
在多個(gè)數(shù)據(jù)中心運(yùn)行 382
監(jiān)控和故障診斷 384
彈性 386
過采樣 386
調(diào)試跟蹤 387
數(shù)據(jù)中心故障轉(zhuǎn)移導(dǎo)致的流量峰值 387
無休止的跟蹤 387
長跟蹤 388
總結(jié) 388
參考資料 388
后記 390
參考資料 393