会员   密码 您忘记密码了吗?
1,653,047 本书已上架      购物流程 | 常见问题 | 联系我们 | 关于我们 | 用户协议

有店 App


当前分类

商品分类

浏览历史

当前位置: 首页 > 简体书 > 聚沙成塔:Go語言構建高性能、分佈式爬蟲項目
聚沙成塔:Go語言構建高性能、分佈式爬蟲項目
上一张
下一张
prev next

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

作者: 鄭建勛
出版社: 電子工業出版社
出版日期: 2023-08-01
商品库存: 点击查询库存
以上库存为海外库存属流动性。
可选择“空运”或“海运”配送,空运费每件商品是RM14。
配送时间:空运约8~12个工作天,海运约30个工作天。
(以上预计配送时间不包括出版社库存不足需调货及尚未出版的新品)
定价:   NT954.00
市场价格: RM171.51
本店售价: RM152.64
购买数量:
collect Add to cart Add booking
详细介绍 商品属性 商品标记
內容簡介

本書是頗具創新性的Go語言實戰指南,巧妙地將理論知識與實踐案例串聯起來,為讀者搭建了一套完整的知識體系和方法論。
 
本書以爬蟲專案為基礎,全面闡述了Go語言在網路服務開發中的卓越性能,並深入探討了如何利用Go語言打造高併發的爬蟲系統、高性能的分散式系統,以及可擴展的領域驅動的微服務系統。
 
本書有助於Go語言開發者根據編碼規範,編寫出簡潔、高效、健壯且易於擴展的代碼。同時,本書可以作為高等院校電腦和軟體工程等相關專業師生的參考資料。


作者介紹

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


目錄

第1篇 專案準備
1 基礎知識:磨刀不誤砍柴工 2
1.1 Go語言的歷史與設計理念 2
1.1.1 Go語言的“祖先” 3
1.1.2 Go的特性 4
1.2 開發環境 5
1.3 基礎語法 6
1.4 語法特性 12
1.5 併發程式設計 18
1.6 專案組織與依賴管理 20
1.7 工具與庫 22
1.8 總結 27
2 大型專案的開發模式與流程 28
2.1 開發模式 28
2.1.1 瀑布模式 28
2.1.2 敏捷開發 29
2.1.3 其他開發模式 31
2.2 開發流程 31
2.2.1 需求階段 32
2.2.2 設計階段 33
2.2.3 研發實現階段 34
2.2.4 聯調測試階段 38
2.2.5 上線部署階段 38
2.2.6 運維階段 39
2.2.7 運營階段 40
2.3 總結 40

第2篇 專案設計
3 冰川之下:深入Go高併發網路模型 42
3.1 網路的基本概念 42
3.1.1 阻塞與非阻塞 42
3.1.2 檔描述符與Socket 43
3.1.3 I/O模型 44
3.2 Go語言網路模型 46
3.2.1 協程調度 46
3.2.2 同步程式設計模式 48
3.2.3 非阻塞I/O 48
3.2.4 I/O多工 49
3.3 總結 50
4 高性能設計:自頂向下的高性能Go語言程式設計與優化 51
4.1 系統級別 52
4.2 程式設計和組織級別 52
4.3 代碼實施級別 53
4.3.1 合理的代碼 53
4.3.2 刻意的優化 53
4.3.3 冒險的嘗試 54
4.4 作業系統級別 54
4.5 硬體級別 56
4.6 總結 56
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 什麼是Kubernetes 406
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