聚沙成塔:Go語言構建高性能、分佈式爬蟲項目
鄭建勛
- 出版商: 電子工業
 - 出版日期: 2023-08-01
 - 售價: $954
 - 貴賓價: 9.5 折 $906
 - 語言: 簡體中文
 - 頁數: 456
 - ISBN: 7121460408
 - ISBN-13: 9787121460401
 - 
    相關分類:
    
      Go 程式語言、Web-crawler 網路爬蟲
 
立即出貨
買這商品的人也買了...
- 
                
                  
                  
                會計事務資訊項丙級檢定術科練功坊 -- 分錄練習$150$119 - 
                
                  
                  
                TCP/IP 詳解 (捲1):協議 (TCP/IP Illustrated, Volume 1 : The Protocols, 2/e)$774$735 - 
                
                  
                  
                為你自己學 Git$500$425 - 
                
                  
                  
                領域驅動設計精粹 (Domain-Driven Design Distilled)$390$371 - 
                
                  
                  
                微服務架構設計模式 (Microservices Patterns: With examples in Java)$834$792 - 
                
                  
                  
                Working Effectively with Legacy Code : 管理、修改、重構遺留程式碼的藝術 (中文版)$720$562 - 
                
                  
                  
                $407代碼精進之路 : 從碼農到工匠 - 
                
                  
                  
                原子習慣:細微改變帶來巨大成就的實證法則$330$297 - 
                
                  
                  
                Go語言高併發與微服務實戰$534$507 - 
                
                  
                  
                中臺架構與實現:基於 DDD 和微服務$534$507 - 
                
                  
                  
                無卡無現金時代:網路支付業務規劃設計及實作$690$545 - 
                
                  
                  
                矽谷工程師教你 Kubernetes:史上最全 CI/CD 中文應用指南(iT邦幫忙鐵人賽系列書)$600$510 - 
                
                  
                  
                $607Go Web 編程實戰派 — 從入門到精通 - 
                
                  
                  
                大規模重構|奪回源碼庫的控制權 (Refactoring at Scale: Regaining Control of Your Codebase)$580$458 - 
                
                  
                  
                Python FastAPI 構建數據科學應用$534$507 - 
                
                  
                  
                Web Hacking 現場指南:真實世界抓漏和獵蟲的賞金之旅 (Real-World Bug Hunting: A Field Guide to Web Hacking)$550$429 - 
                
                  
                  
                圖說演算法 : 使用 C語言, 3/e$560$437 - 
                
                  
                  
                C語言初學指引 ── 成為高手的奠基之路 【第五版】(修訂版)$620$484 - 
                
                  
                  
                最速網頁開發:用 Go Web 一手建立高能效網站系統, 2/e$880$695 - 
                
                  
                  
                $709FFmpeg 入門詳解 — SDK 二次開發與直播美顏原理及應用 - 
                
                  
                  
                $704Istio 權威指南(上):雲原生服務網格 Istio 原理與實踐 - 
                
                  
                  
                $356實用黑客攻防技術 - 
                
                  
                  
                Docker 與 Kubernetes 容器運維實戰$479$455 - 
                
                  
                  
                個人敏捷性:解鎖目標、調適和轉型$450$351 - 
                
                  
                  
                產品經理全方位敏捷實踐:從活用 Scrum 到強化 PM 心理素質, 成為 AI 無法取代的產品負責人(iThome鐵人賽系列書)【軟精裝】$700$546 
商品描述
本書是頗具創新性的 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
