既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
功能性模块分析
-
数据输入
- 种子网站: 提前规划好的新闻网站与论坛。
- 用户通过界面和 API 接口动态增加或修改的任务。
-
任务配置和管理
- 读取配置文件中预先制定的任务列表
- 存储后面用户动态新增的任务
- 接口: 任务增删改查
- 接口; 获取任务状态
-
任务
-
任务要爬取的 URL
-
任务相关规则的描述
- 抓取页面中的哪一些信息
- 哪一些网址需要进行爬取
- 页面爬取的深度
- 请求超时时间
-
规则引擎模块处理规则: 任务相关的规则可能比较复杂并且有关联,例如 A 网站爬取到 B 网站,B 网站爬取到 C 网站,每一个网站都需要有对应的处理规则。
-
-
调度引擎
- 任务均衡分发到采集模块
- 接受任务存储到队列中
-
采集引擎
-
采集工作: 解析相应的页面信息.
-
访问方式
- 直接访问
- 模拟浏览器访问
- 提前登录
-
采集算法
- 深度优先搜索
- 广度优先搜索
-
任务回流调度引擎
-
-
辅助任务管理模块
- 限流器: 控制任务的采集频率
- 代理器; 隐藏源IP, 突破服务器反扒机制
- 去重器: 避免重复任务
- 随机UA: 生成随机User-Agent
- 任务优先级队列: 任务分级, 高优先级先执行
- 失败处理器: 处理采集失败后的重试问题
-
数据清洗和存储
-
缓存队列: 收集一批数据后批量将数据写入数据库中.
-
存储引擎
- 存储到不同类型的数据库或文件中
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-P88iGxhi-1679233104210)(https://assets.b3logfile.com/siyuan/1658627274984/assets/image-20230319210644-zuyxt7f.png)]
非功能性模块设计
-
扩展性
- 服务能够随着任务数量的增加而扩展, 能够快速增加 Worker 程序的数量
- Worker 服务是无状态的
- 任务可以在任何 Worker 中运行,并且具有相同的行为。
-
我们的任务将会在 Worker 中长时间存在,因此,我们会遇到许多新的问题:
- 当我们增加一个新的 Worker,该怎么保证任务可以重新分配,或者确保新的任务一定能分配到新的 Worker 呢?
- 每一个任务的负载是不同的,例如一些任务会比另一些任务消耗更多的 CPU 与内存。那么我们要如何合理分配任务,才能让每一个 Worker 负载均衡呢?
- 解决: Master-Worker架构
-
服务可用性 分布式系统容错问题
-
Master
- 主要任务是完成调度工作,本身不需要实现多高的并发量,任务的调度和分配在一个程序中就能搞定。
- 为了解决故障容错问题,我们需要有多个 Master 随时待命,这会需要对多个 Master 进行选主,客户端只能与 Master 的 Leader 节点进行交互,并且只有 Master 的 Leader 节点能够调度任务到 Worker。
-
Worker
- 当 Worker 崩溃后,运行在其中的任务将无法运行。
- Master 能够监控到 Worker 的数据变化,并且 Master 能够通过任务的重新分配将崩溃节点的任务分散到其他 Worker 中。
- 当 Worker 重新恢复后也有类似的过程。不过由于 Worker 无状态,不用考虑 Worker 崩溃之后数据的不一致问题。
-
-
分布式系统协调组件 etcd
- 监听Worker节点
- 服务发现
- 任务动态分配
- Master节点选主工作
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nasbhVOB-1679233104210)(https://assets.b3logfile.com/siyuan/1658627274984/assets/image-20230319211403-0guhuxa.png)]
架构设计
-
Mater
-
提供用户操作接口
- 任务增删改查API
-
任务调度器
- 任务调度
- 动态获取和监听Worker节点变化,实现任务动态的负载均衡
-
借助etcd实现选主,实现可用性
-
集群只有一个Leder,其他Master收到的请求会转发到Leader中处理
-
-
etcd
- 为Worker与Master实现注册中心功能
- 实现事件的监听和通知机制
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
o语言开发知识点,真正体系化!**
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新