Go 进阶 · 分布式爬虫实战
郑建勋
Go 语言技术专家,《Go 语言底层原理剖析》作者
15839 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 58 讲
Go 进阶 · 分布式爬虫实战
15
15
1.0x
00:00/00:00
登录|注册

14|谋定而动:爬虫项目需求分析与架构设计

你好,我是郑建勋。
这节课,我们来看看爬虫系统的功能与架构。
为了更好地完成爬虫项目,我们需要进入真实的场景中,了解项目的价值、用户的需求,这样我们才能够明白项目应该具备哪些功能,明白为了支撑这些用户需求,我们需要设计出怎样的系统架构。所以这节课,我们就从需求分析出发,反推爬虫系统的功能和架构。

需求调研与分析

我们在第六讲,已经讨论了爬虫的许多商业价值。在这个信息快速流动的时代,先人一步掌握准确的信息能获得惊人的回报。
假设我们通过调研发现了一个商业机会,即通过爬虫聚合各个主流媒体的头条新闻,目的是快速获取用户关心的爆炸性新闻,帮助用户快人一步在资本市场上做出反应。借助机器学习等手段感知到某一类词条和事件传播的速度,精准把握它们可能掀动舆论的时间节点,帮助用户做一只资本市场上的“春江鸭”,提前反应。
以此为基础,我们可以将需求分为三个维度,即业务需求、用户需求和功能需求。
对于业务需求来说,关注点应该在业务方希望做什么。这里我们希望构建一个以爬虫引擎为基础的推送系统,为资本市场上的用户提供快速的热点事件和事件预警。
对于用户需求来说,我们要关注用户对系统的期待。在这里,用户希望能够快速了解自己感兴趣的最新新闻,并有准确的事件预警机制,帮助自己快速决策。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文详细介绍了爬虫项目需求分析与架构设计的重要性和具体步骤。作者强调了需求分析的关键性,包括业务需求、用户需求和功能需求,并详细阐述了爬虫引擎的功能性模块设计和非功能性模块设计。在功能性模块设计中,作者提到了任务配置与管理、规则引擎、调度引擎、采集引擎以及数据清洗和存储等关键模块。在非功能性模块设计中,作者重点讨论了可扩展性和可用性,并介绍了Master-Worker架构模式和分布式系统的容错问题。文章通过详细的功能性和非功能性模块设计,为读者展现了爬虫项目需求分析与架构设计的技术特点和复杂性。文章还介绍了系统的完整架构设计,包括Master、etcd集群和Worker的功能和作用。总的来说,本文通过对一个真实需求的剖析,梳理出了爬虫系统需要具备的核心功能,并展示了Master-Worker架构和分布式协调服务etcd的实现。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 进阶 · 分布式爬虫实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(14)

  • 最新
  • 精选
  • 风铃
    咱们实战课程大概什么时候开始了

    作者回复: 下周开始进入实战

    2022-11-10归属地:北京
    3
  • 风铃
    咱们什么时候可以开始了

    作者回复: 下周开始进入实战

    2022-11-10归属地:北京
    3
  • shuff1e
    有代码吗?上下github的链接。talk is cheap, show me the code

    作者回复: 15讲后进入实战,到时都会有相对应的项目代码给到,保持一些耐心哦

    2022-11-10归属地:北京
    2
  • 7oty
    提供实战的源代码吗?

    作者回复: https://github.com/dreamerjackson/crawler

    2022-12-20归属地:广东
    1
  • 逗逼章鱼
    对 Go 这种静态编译的语言,你知道怎么在不重新编译和运行程序的情况下,动态添加一个新的爬虫任务和新的爬虫规则。 是把任务写进数据库里读取吗?

    作者回复: 这是一种方式,但这需要我们的程序提前提前写好了解析任务的代码,这就是静态的。 还有动态的方式,这种方式可以依靠虚拟机实现,我们后面会实战两种方式

    2022-11-10归属地:北京
    1
  • 翡翠虎
    请教一下采集过程中可能会产生大量的待采集url,可能是几千万,上亿。问:我看架构里没有用消息队列做缓冲,这些url是放到ETCD吗?

    作者回复: 我们其实只用存储某一个任务的url就好了,不用每一个中间采集的url都存起来。 只存储任务的url的话,存在etcd是ok的。因为我们本身借助了etcd在我们架构中做了任务的调度。当然,如果我们有其他额外的需求,例如频繁查找、修改,分析。需要额外存在其他数据库中。

    2022-11-24归属地:北京
    2
  • 会飞的大象
    将爬虫任务和规则维护到etcd配置中心,进行配置热加载
    2022-11-10归属地:上海
    6
  • 拾掇拾掇
    配置中心或者监听配置文件
    2022-11-10归属地:浙江
    2
  • 老猫
    1. 任务,通过用户界面添加到数据库里,然后任务调度器读取任务进行就好了。 2. 规则,两种思路,如果可以将规则写成配置文件,如yaml,json之类的,那直接动态添加这个规则。但如果这个规则比较复杂,可以考虑为规则单独起一个服务,将服务配置到任务调度器里
    2022-11-11归属地:江苏
    1
  • Realm
    猜测一下:用协程订阅etcd中的/jobs、/rules, 在etcd中增加任务和爬虫规则时,会通知订阅者,达到动态配置的效果.
    2022-11-10归属地:浙江
    1
收起评论
显示
设置
留言
14
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部