万本电子书0元读

万本电子书0元读

顶部广告

聚沙成塔:Go语言构建高性能、分布式爬虫项目电子书

高效的编码规范与研发工具 深 Go 语法背后的底层机制 高性能与可扩展的程序设计方法 复杂线上案例的全方位分析 大规模分布式系统的架构之道

售       价:¥

纸质售价:¥124.00购买纸书

0人正在读 | 0人评论 6.8

作       者:郑建勋

出  版  社:电子工业出版社

出版时间:2023-08-01

字       数:24.6万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(条)
  • 读书简介
  • 目录
  • 累计评论(条)
本书是颇具创新性的 Go 语言实战指南,巧妙地将理论知识与实践案例串联起来,为读者搭建了一套完整的知识体系和方法论。本书以爬虫项目为基础,全面阐述了 Go 语言在网络服务发中的卓越性能,并深探讨了如何利用 Go 语言造高并发的爬虫系统、高性能的分布式系统,以及可扩展的领域驱动的微服务系统。本书有助于 Go 语言发者根据编码规范,编写出简洁、高效、健壮且易于扩展的代码。同时,本书可以作为高等院校计算机和软件工程等相关专业师生的参考资料。<br/>【推荐语】<br/>高效的编码规范与研发工具 深 Go 语法背后的底层机制 高性能与可扩展的程序设计方法 复杂线上案例的全方位分析 大规模分布式系统的架构之道<br/>【作者】<br/>成都慧眸科技创始人 《Go语言底层原理剖析》作者 极客时间专栏作家<br/>
目录展开

前折页

内容简介

1 基础知识:磨刀不误砍柴工

1.1 Go语言的历史与设计理念

1.1.1 Go语言的“祖先”

1.1.2 Go的特性

1.2 开发环境

1.3 基础语法

1.4 语法特性

1.5 并发编程

1.6 项目组织与依赖管理

1.7 工具与库

1.8 总结

2 大型项目的开发模式与流程

2.1 开发模式

2.1.1 瀑布模式

2.1.2 敏捷开发

2.1.3 其他开发模式

2.2 开发流程

2.2.1 需求阶段

2.2.2 设计阶段

2.2.3 研发实现阶段

2.2.4 联调测试阶段

2.2.5 上线部署阶段

2.2.6 运维阶段

2.2.7 运营阶段

2.3 总结

3 冰川之下:深入Go高并发网络模型

3.1 网络的基本概念

3.1.1 阻塞与非阻塞

3.1.2文件描述符与Socket

3.1.3 I/O模型

3.2 Go语言网络模型

3.2.1 协程调度

3.2.2 同步编程模式

3.2.3 非阻塞I/O

3.2.4 I/O多路复用

3.3 总结

4 高性能设计:自顶向下的高性能Go语言程序设计与优化

4.1 系统级别

4.2 程序设计和组织级别

4.3 代码实施级别

4.3.1 合理的代码

4.3.2 刻意的优化

4.3.3 冒险的尝试

4.4 操作系统级别

4.5 硬件级别

4.6 总结

5 微服务探索:深度解析架构演进与治理实践

5.1 微服务架构演进

5.1.1 单体服务与微服务

5.1.2 微服务的优点

5.1.3 微服务的缺点

5.1.4 微服务的边界

5.1.5 微服务的通信

5.1.6 服务发现与负载均衡

5.2 微服务治理体系与实践

5.2.1 分布式日志与监控

5.2.2 分布式Metric与监控

5.2.3 分布式追踪

5.2.4 微服务测试

5.2.5 微服务降级

5.2.6 微服务总体架构

5.3 总结

6 协调之谜:深入剖析分布式一致性与共识算法

6.1 数据一致性

6.1.1 诞生背景

6.1.2 CAP定理

6.1.3 共识算法

6.2 分布式协调服务

6.2.1 分布式锁

6.2.2 配置管理

6.2.3 服务发现

6.3 无信网络中的共识问题

6.4 共识算法

6.4.1 Paxos算法

6.4.2 Raft算法

6.5 总结

7 谋定而动:爬虫项目分析与设计

7.1 网络爬虫概述

7.1.1 网络爬虫合法吗

7.1.2 网络爬虫的商业价值

7.1.3 网络爬虫的流程与技术栈

7.1.4 常见的反爬虫措施

7.2 爬虫项目需求分析与架构设计

7.2.1 需求调研与分析

7.2.2 功能性模块的设计

7.2.3 非功能性模块的设计

7.2.4 架构设计

7.3 总结

8 众人拾柴:高效团队的Go编码规范

8.1 编码规范的重要性

8.2 Go语言编码规范

8.2.1 整洁一致

8.2.2 高效

8.2.3 健壮性

8.2.4 扩展性

8.2.5 工具

8.3 总结

9 从正则表达式到CSS选择器:4种网页文本处理手段

9.1 项目启动

9.1.1 初始化Git仓库

9.1.2 抓取一个简单的网页

9.2 标准库

9.3 正则表达式

9.4 XPath

9.5 CSS选择器

9.6 总结

10 网络爬虫:HTTP请求的魔幻旅途

10.1 最简单的HTTP服务器与请求

10.2 分层网络模型

10.2.1 应用层

10.2.2 传输层

10.2.3 TLS协议

10.2.4 网络层

10.2.5 网络接入层

10.3 数据传输与路由协议

10.4 操作系统处理数据包流程

10.5 HTTP协议详解

10.6 HTTP的困境

10.7 HTTP标准库底层原理

10.8 总结

11 采集引擎:接口抽象与模拟浏览器访问实战

11.1 接口实战

11.2 模拟浏览器访问

11.3 远程访问浏览器

11.3.1 浏览器驱动协议

11.3.2 谷歌开发者工具协议

11.4 总结

12 面向组合:接口的使用场景与底层原理

12.1 Go接口及其优势

12.2 Go接口的设计理念

12.3 接口的最佳实践

12.3.1 模块解耦

12.3.2 依赖注入

12.4 接口原理

12.5 总结

13 依赖管理:Go Modules用法与原理

13.1 GOPATH

13.1.1 什么是GOPATH

13.1.2 GOPATH的落幕与依赖管理的历史

13.2 Go Modules

13.2.1 Go Modules概述

13.2.2 Go Modules实践

13.2.3 Go Modules最小版本选择原理

13.2.4 验证最小版本选择原理

13.3 语义版本

13.3.1 v2版本

13.3.2 伪版本

13.4 总结

14 优雅离场:Context超时控制与原理

14.1 为什么需要Context

14.2 context.Value

14.3 Context实践

14.4 Context底层原理

14.5 总结

15 移花接木:为爬虫安上代理的翅膀

15.1 代理的分类和实现机制

15.1.1 正向代理

15.1.2 HTTP隧道代理

15.1.3 MITM代理

15.1.4 透明代理

15.1.5 反向代理

15.2 如何在实际项目中实现代理

15.2.1 如何访问代理服务器

15.2.2 如何选择代理地址

15.3 总结

16 日志处理:日志规范与最佳实践

16.1 标准库的log包

16.2 Zap

16.3 日志切割

16.4 日志分级

16.5 日志格式规范

16.6 构建项目日志组件

16.7 总结

17 运筹帷幄:协程的运行机制与并发模型

17.1 进程与线程

17.2 线程与协程

17.2.1 调度方式

17.2.2 上下文切换速度

17.2.3 调度策略

17.2.4 栈的大小

17.3 从GM到GMP

17.4 协程的数据争用

17.4.1 原子锁

17.4.2 互斥锁

17.4.3 读写锁

17.5 Go并发控制库

17.5.1 sync.WaitGroup

17.5.2 sync.Once

17.5.3 sync.Map

17.5.4 sync.Cond

17.6 Go并发模式

17.6.1 ping-pong模式

17.6.2 fan-in模式

17.6.3 fan-out模式

17.6.4 pipeline模式

17.7 总结

18 掘地三尺:实战深度与广度优先搜索算法

18.1 深度优先搜索算法与实战

18.2 广度优先搜索算法与实战

18.3 用Cookie突破反爬封锁

18.4 总结

19 调度引擎:负载均衡与调度器实战

19.1 调度引擎实战

19.2 函数式选项模式

19.3 总结

20 细节决定成败:切片与哈希表的陷阱与原理

20.1 切片的底层原理

20.1.1 切片的截取

20.1.2 切片的扩容

20.2 哈希表原理

20.3 总结

21 辅助任务管理:任务优先级、去重与失败处理

21.1 设置爬虫最大深度

21.2 避免请求重复

21.3 设置优先队列

21.4 设置随机User-Agent

21.5 进行失败处理

21.6 总结

22 规则引擎:自定义爬虫处理规则

22.1 静态规则引擎

22.2 动态规则引擎

22.3 总结

23 存储引擎:数据清洗与存储

23.1 爬取结构化数据

23.2 数据存储

23.2.1 数据抽象

23.2.2 数据底层存储

23.2.3 存储引擎实现

23.3 存储引擎验证

23.4 总结

24 固若金汤:限速器与错误处理

24.1 限速器

24.2 随机休眠

24.3 错误处理

24.3.1 基本的错误处理方式

24.3.2 错误链处理方式

24.3.3 减少错误处理的实践

24.4 panic

24.5 总结

25 服务注册与监听:Worker节点与etcd交互

25.1 GRPC与Protocol Buffers

25.2 go-micro与grpc-gateway

25.3 注册中心与etcd

25.4 micro中间件

25.5 总结

26 未雨绸缪:通过静态扫描与动态扫描保证代码质量

26.1 静态扫描

26.2 动态扫描

26.3 配置文件

26.4 Makefile

26.5 总结

27 测试的艺术:从单元测试到集成测试

27.1 单元测试

27.1.1 表格驱动测试

27.1.2 子测试

27.1.3 依赖注入

27.1.4 猴子补丁

27.2 压力测试

27.3 基准测试

27.4 代码覆盖率测试

27.4.1 cover的基本用法

27.4.2 测试环境下的代码覆盖率

27.4.3 cover工具的工作原理

27.5 模糊测试

27.6 集成测试

27.7 总结

28 调试程序:从日志打印到Delve调试器

28.1 常见的调试方法和技术

28.2 Delve的内部架构

28.3 Delve实战

28.4 使用Goland+Delve进行本地调试

28.5 使用Goland+Delve进行远程调试

28.6 总结

29 性能分析利器:深入pprof与trace工具

29.1 pprof及其使用方法

29.1.1 pprof堆内存分析

29.1.2 pprof协程栈分析

29.1.3 pprof CPU占用分析

29.2 trace及其使用方法

29.3 总结

30 综合案例:节约千台容器的线上性能分析实战

30.1 程序问题描述与排查过程

30.2 进一步分析与修复问题

30.3 总结

31 他山之石:etcd架构

31.1 etcd全局架构与原理

31.2 etcd架构的优点

31.3 总结

32 搭建Master框架与命令行程序

32.1 Cobra实现命令行工具

32.1.1 Cobra示例代码

32.1.2 Worker子命令

32.1.3 Master子命令

32.1.4 Version子命令

32.2 flags控制程序行为

32.3 总结

33 Master高可用:借助etcd实现服务选主

33.1 etcd选主API

33.2 实现Master选主与故障容错

33.3 etcd选主原理

33.4 总结

34 Master任务调度:服务发现与资源管理

34.1 Master服务发现

34.1.1 深入go-micro registry接口

34.1.2 维护Worker节点信息

34.2 Master资源管理

34.3 验证Master资源分配结果

34.4 总结

35 故障容错:在Worker崩溃时重新调度

35.1 Master资源调度的时机

35.1.1 Master成为Leader时的资源调度

35.1.2 Worker节点发生变化时的资源更新

35.2 负载均衡的资源分配算法

35.3 Master资源处理API实战

35.4 总结

36 完善核心能力:Master请求转发与Worker资源管理

36.1 将Master请求转发到Leader

36.2 资源保护

36.3 Worker单机模式

36.4 Worker集群模式

36.4.1 资源加载

36.4.2 资源监听

36.4.3 资源删除

36.5 总结

37 服务治理:限流、熔断器、认证与鉴权

37.1 限流

37.1.1 固定窗口算法

37.1.2 滑动日志算法

37.1.3 滑动窗口算法

37.1.4 漏桶算法

37.1.5 用go-micro实现限流

37.2 熔断器

37.3 认证与鉴权

37.4 总结

38 不可阻挡的容器化:Docker核心技术与原理

38.1 不可阻挡的容器化

38.2 Docker架构

38.3 Docker镜像

38.4 多阶段构建镜像

38.5 Docker网络原理

38.6 使用GitHub Actions自动化Docker工作流程

38.7 总结

39 多容器部署:利用Docker Compose快速搭建本地爬虫环境

39.1 什么是Docker Compose

39.2 Compose的安装

39.3 Compose配置文件的编写

39.4 Compose生命周期管理

39.5 总结

40 容器海洋中的舵手:Kubernetes工作机制

40.1 什么是Kubernetes

40.2 Kubernetes网络原理

40.3 总结

41 容器化实战:搭建K8s爬虫集群

41.1 安装Kubernetes集群

41.2 安装K3d

41.3 部署Worker Deployment

41.4 部署Worker Service

41.5 部署Master Deployment

41.6 部署Master Service

41.7 创建Ingress

41.8 创建ConfigMap

41.9 总结

42 回头看:如何更好地组织代码

42.1 按照功能划分组织代码

42.2 按照单体划分组织代码

42.3 按照层级划分组织代码

42.4 按照领域驱动设计组织代码

42.4.1 六边形架构

42.4.2 领域与子域

42.4.3 限界上下文

42.4.4 实体

42.4.5 值对象

42.4.6 聚合

42.4.7 服务

42.4.8 仓储

42.4.9 服务串联业务逻辑

42.5 总结

后折页

累计评论(条) 个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部