聚沙成塔:Go語言構建高性能、分散式爬蟲項目

聚沙成塔:Go語言構建高性能、分散式爬蟲項目

基本介紹

  • 中文名
  • 作者
  • 出版時間
  • 出版社
  • 頁數
  • ISBN
  • 定價
  • 開本
內容簡介,圖書目錄,作者簡介,

內容簡介

圖書目錄

5 微服務探索:深度解析架構演進與治理實踐 57
5.1 微服務架構演進 57
5.1.1 單體服務與微服務 57
5.1.2 微服務的優點 61
5.1.3 微服務的缺點 62
5.1.4 微服務的邊界 63
5.1.5 微服務的通信 63
5.1.6 服務發現與負載均衡 65
5.2 微服務治理體系與實踐 66
5.2.1 分散式日誌與監控 67
5.2.2 分散式Metric與監控 68
5.2.3 分散式追蹤 68
5.2.4 微服務測試 69
5.2.5 微服務降級 71
5.2.6 微服務總體架構 71
5.3 總結 72
6 協調之謎:深入剖析分散式一致性與共識算法 74
6.1 數據一致性 74
6.1.1 誕生背景 74
6.1.2 CAP定理76
6.1.3 共識算法 77
6.2 分散式協調服務 77
6.2.1 分散式鎖 78
6.2.2 配置管理 78
6.2.3 服務發現 78
6.3 無信網路中的共識問題 79
6.4 共識算法 80
6.4.1 Paxos算法 80
6.4.2 Raft算法 81
6.5 總結 85
7 謀定而動:爬蟲項目分析與設計 86
7.1 網路爬蟲概述 86
7.1.1 網路爬蟲合法嗎 86
7.1.2 網路爬蟲的商業價值 87
7.1.3 網路爬蟲的流程與技術棧 88
7.1.4 常見的反爬蟲措施 90
7.2 爬蟲項目需求分析與架構設計 91
7.2.1 需求調研與分析 91
7.2.2 功能性模組的設計 92
7.2.3 非功能性模組的設計 93
7.2.4 架構設計 94
7.3 總結 96
8 眾人拾柴:高效團隊的Go編碼規範 97
8.1 編碼規範的重要性 97
8.2 Go語言編碼規範 97
8.2.1 整潔一致 98
8.2.2 高效 103
8.2.3 健壯性 104
8.2.4 擴展性 105
8.2.5 工具 106
8.3 總結 106
第3篇 Worker開發
9 從正則表達式到CSS選擇器:4種網頁文本處理手段 108
9.1 項目啟動 108
9.1.1 初始化Git倉庫 108
9.1.2 抓取一個簡單的網頁 109
9.2 標準庫 110
9.3 正則表達式 112
9.4 XPath 115
9.5 CSS選擇器 116
9.6 總結 116
10 網路爬蟲:HTTP請求的魔幻旅途 117
10.1 最簡單的HTTP伺服器與請求 117
10.2 分層網路模型118
10.2.1 套用層 119
10.2.2 傳輸層 120
10.2.3 TLS協定 120
10.2.4 網路層 121
10.2.5 網路接入層 123
10.3 數據傳輸與路由協定 124
10.4 作業系統處理數據包流程 125
10.5 HTTP協定詳解 127
10.6 HTTP的困境 129
10.7 HTTP標準庫底層原理 129
10.8 總結133
11 採集引擎:接口抽象與模擬瀏覽器訪問實戰 134
11.1 接口實戰134
11.2 模擬瀏覽器訪問 135
11.3 遠程訪問瀏覽器 138
11.3.1 瀏覽器驅動協定 138
11.3.2 谷歌開發者工具協定 139
11.4 總結142
12 面向組合:接口的使用場景與底層原理 143
12.1 Go接口及其優勢 143
12.2 Go接口的設計理念 143
12.3 接口的最佳實踐 144
12.3.1 模組解耦 144
12.3.2 依賴注入 146
12.4 接口原理147
12.5 總結147
13 依賴管理:Go Modules用法與原理 149
13.1 GOPATH 149
13.1.1 什麼是GOPATH 149
13.1.2 GOPATH的落幕與依賴管理的歷史 151
13.2 Go Modules 151
13.2.1 Go Modules概述 151
13.2.2 Go Modules實踐 153
13.2.3 Go Modules最小版本選擇原理157
13.2.4 驗證最小版本選擇原理 159
13.3 語義版本161
13.3.1 v2版本161
13.3.2 偽版本 162
13.4 總結163
14 優雅離場:Context逾時控制與原理 164
14.1 為什麼需要Context 164
14.2 context.Value 166
14.3 Context實踐 169
14.4 Context底層原理 172
14.5 總結173
15 移花接木:為爬蟲安上代理的翅膀 174
15.1 代理的分類和實現機制174
15.1.1 正向代理 174
15.1.2 HTTP隧道代理 175
15.1.3 MITM代理 177
15.1.4 透明代理 177
15.1.5 反向代理 178
15.2 如何在實際項目中實現代理179
15.2.1 如何訪問代理伺服器 180
15.2.2 如何選擇代理地址 180
15.3 總結182
16 日誌處理:日誌規範與最佳實踐 183
16.1 標準庫的log包 183
16.2 Zap 185
16.3 日誌切割186
16.4 日誌分級187
16.5 日誌格式規範187
16.6 構建項目日誌組件188
16.7 總結189
17 運籌帷幄:協程的運行機制與並發模型 190
17.1 進程與執行緒 190
17.2 執行緒與協程 190
17.2.1 調度方式 191
17.2.2 上下文切換速度 191
17.2.3 調度策略 191
17.2.4 棧的大小 192
17.3 從GM到GMP 192
17.4 協程的數據爭用 193
17.4.1 原子鎖 193
17.4.2 互斥鎖 195
17.4.3 讀寫鎖 195
17.5 Go並發控制庫 196
17.5.1 sync.WaitGroup 196
17.5.2 sync.Once 197
17.5.3 sync.Map 197
17.5.4 sync.Cond 198
17.6 Go併發模式 200
17.6.1 ping-pong模式 201
17.6.2 fan-in模式 202
17.6.3 fan-out模式203
17.6.4 pipeline模式 205
17.7 總結208
18 掘地三尺:實戰深度與廣度優先搜尋算法 209
18.1 深度優先搜尋算法與實戰 209
18.2 廣度優先搜尋算法與實戰 211
18.3 用Cookie突破反爬封鎖 214
18.4 總結215
19 調度引擎:負載均衡與調度器實戰 216
19.1 調度引擎實戰216
19.2 函式式選項模式 219
19.3 總結222
20 細節決定成敗:切片與哈希表的陷阱與原理 223
20.1 切片的底層原理 223
20.1.1 切片的截取 224
20.1.2 切片的擴容 225
20.2 哈希表原理 226
20.3 總結228
21 輔助任務管理:任務優先權、去重與失敗處理 229
21.1 設定爬蟲最大深度229
21.2 避免請求重複230
21.3 設定優先佇列233
21.4 設定隨機User-Agent 234
21.5 進行失敗處理235
21.6 總結235
22 規則引擎:自定義爬蟲處理規則 236
22.1 靜態規則引擎237
22.2 動態規則引擎240
22.3 總結245
23 存儲引擎:數據清洗與存儲 246
23.1 爬取結構化數據 246
23.2 數據存儲250
23.2.1 數據抽象 250
23.2.2 數據底層存儲 251
23.2.3 存儲引擎實現 254
23.3 存儲引擎驗證256
23.4 總結258
24 固若金湯:限速器與錯誤處理 259
24.1 限速器 259
24.2 隨機休眠262
24.3 錯誤處理263
24.3.1 基本的錯誤處理方式 264
24.3.2 錯誤鏈處理方式 266
24.3.3 減少錯誤處理的實踐 267
24.4 panic 268
24.5 總結270
25 服務註冊與監聽:Worker節點與etcd互動 271
25.1 GRPC與Protocol Buffers 271
25.2 go-micro與grpc-gateway 273
25.3 註冊中心與etcd 276
25.4 micro中間件 279
25.5 總結280
第4篇 測試與分析
26 未雨綢繆:通過靜態掃描與動態掃描保證代碼質量 282
26.1 靜態掃描282
26.2 動態掃描284
26.3 配置檔案285
26.4 Makefile 287
26.5 總結288
27 測試的藝術:從單元測試到集成測試 289
27.1 單元測試289
27.1.1 表格驅動測試 291
27.1.2 子測試 293
27.1.3 依賴注入 296
27.1.4 猴子補丁 298
27.2 壓力測試299
27.3 基準測試299
27.4 代碼覆蓋率測試 300
27.4.1 cover的基本用法 301
27.4.2 測試環境下的代碼覆蓋率 302
27.4.3 cover工具的工作原理 302
27.5 模糊測試303
27.6 集成測試306
27.7 總結307
28 調試程式:從日誌列印到Delve調試器308
28.1 常見的調試方法和技術308
28.2 Delve的內部架構 309
28.3 Delve實戰 309
28.4 使用Goland+Delve進行本地調試 316
28.5 使用Goland+Delve進行遠程調試 317
28.6 總結318
29 性能分析利器:深入pprof與trace工具 319
29.1 pprof及其使用方法 319
29.1.1 pprof堆記憶體分析 321
29.1.2 pprof協程棧分析 325
29.1.3 pprof CPU占用分析 326
29.2 trace及其使用方法 327
29.3 總結330
30 綜合案例:節約千台容器的線上性能分析實戰 331
30.1 程式問題描述與排查過程 331
30.2 進一步分析與修復問題336
30.3 總結338
第5篇 分散式Master開發
31 他山之石:etcd架構 340
31.1 etcd全局架構與原理 340
31.2 etcd架構的優點 342
31.3 總結344
32 搭建Master框架與命令行程式 345
32.1 Cobra實現命令行工具 345
32.1.1 Cobra示例代碼 345
32.1.2 Worker子命令 348
32.1.3 Master子命令 349
32.1.4 Version子命令 349
32.2 flags控制程式行為 350
32.3 總結351
33 Master高可用:藉助etcd實現服務選主 352
33.1 etcd選主API 352
33.2 實現Master選主與故障容錯 353
33.3 etcd選主原理357
33.4 總結359
34 Master任務調度:服務發現與資源管理 360
34.1 Master服務發現 360
34.1.1 深入go-micro registry接口 361
34.1.2 維護Worker節點信息 363
34.2 Master資源管理 365
34.3 驗證Master資源分配結果 367
34.4 總結367
35 故障容錯:在Worker崩潰時重新調度 368
35.1 Master資源調度的時機 368
35.1.1 Master成為Leader時的資源調度 368
35.1.2 Worker節點發生變化時的資源更新369
35.2 負載均衡的資源分配算法 370
35.3 Master資源處理API實戰 372
35.4 總結374
36 完善核心能力:Master請求轉發與Worker資源管理375
36.1 將Master請求轉發到Leader 375
36.2 資源保護377
36.3 Worker單機模式 378
36.4 Worker集群模式 379
36.4.1 資源載入 379
36.4.2 資源監聽 380
36.4.3 資源刪除 381
36.5 總結383
37 服務治理:限流、熔斷器、認證與鑒權 384
37.1 限流384
37.1.1 固定視窗算法 384
37.1.2 滑動日誌算法 385
37.1.3 滑動視窗算法 385
37.1.4 漏桶算法 385
37.1.5 用go-micro實現限流385
37.2 熔斷器 386
37.3 認證與鑒權 388
37.4 總結390
第6篇 部署運維
38 不可阻擋的容器化:Docker核心技術與原理 392
38.1 不可阻擋的容器化392
38.2 Docker架構 393
38.3 Docker鏡像 394
38.4 多階段構建鏡像 396
38.5 Docker網路原理 396
38.6 使用GitHub Actions自動化Docker工作流程 399
38.7 總結400
39 多容器部署:利用Docker Compose快速搭建本地爬蟲環境 401
39.1 什麼是Docker Compose 401
39.2 Compose的安裝 401
39.3 Compose配置檔案的編寫 402
39.4 Compose生命周期管理404
39.5 總結405
40 容器海洋中的舵手:Kubernetes工作機制 406
40.1 什麼是Kubernetes406
40.2 Kubernetes網路原理 408
40.3 總結409
41 容器化實戰:搭建K8s爬蟲集群 410
41.1 安裝Kubernetes集群 410
41.2 安裝K3d 411
41.3 部署Worker Deployment 412
41.4 部署Worker Service 415
41.5 部署Master Deployment 416
41.6 部署Master Service 417
41.7 創建Ingress 417
41.8 創建ConfigMap 419
41.9 總結420
第7篇 意猶未盡
42 回頭看:如何更好地組織代碼 422
42.1 按照功能劃分組織代碼422
42.2 按照單體劃分組織代碼423
42.3 按照層級劃分組織代碼424
42.4 按照領域驅動設計組織代碼425
42.4.1 六邊形架構 425
42.4.2 領域與子域 427
42.4.3 限界上下文 427
42.4.4 實體 428
42.4.5 值對象 429
42.4.6 聚合 429
42.4.7 服務 430
42.4.8 倉儲 431
42.4.9 服務串聯業務邏輯 432
42.5 總結435

作者簡介

鄭建勛
成都慧眸科技創始人
《Go語言底層原理剖析》作者
極客時間專欄作家

相關詞條

熱門詞條

聯絡我們