Go最新Go分布式爬虫笔记(八)_golang分布式爬虫,阿里Golang研发岗二面

10 篇文章 0 订阅
10 篇文章 0 订阅

img
img
img

既有适合小白学习的零基础资料,也有适合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实现注册中心功能
    • 实现事件的监听和通知机制

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

o语言开发知识点,真正体系化!**

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值