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

47|故障容错:如何在Worker崩溃时进行重新调度?

你好,我是郑建勋。
上一节课,我们用随机的方式为资源分配了它所属的 Worker。这一节课,让我们更进一步优化资源的分配。
对资源进行分配不仅发生在正常的事件内,也可能发生在 Worker 节点崩溃等特殊时期。这时,我们需要将崩溃的 Worker 节点中的任务转移到其他节点。

Master 调度的时机

具体来说,分配资源的时机可能有下面三种情况。
当 Master 成为 Leader 时。
当客户端调用 Master API 进行资源的增删查改时。
当 Master 监听到 Worker 节点发生变化时。
其中,第二点“调用 Master API 进行资源的增删查改”我们会在这节课的最后完成,下面让我们实战一下剩下两点是如何实现资源的调度的。

Master 成为 Leader 时的资源调度

在日常实践中,Leader 的频繁切换并不常见。不管是 Master 在初始化时选举成为了 Leader,还是在中途由于其他 Master 异常退出导致 Leader 发生了切换,我们都要全量地更新一下当前 Worker 的节点状态以及资源的状态。
在 Master 成为 Leader 节点时,我们首先要利用 m.updateWorkNodes 方法全量加载当前的 Worker 节点,同时利用 m.loadResource 方法全量加载当前的爬虫资源。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在分布式系统中如何进行故障容错和资源调度,以及实现Master对外暴露的API,方便外部客户端进行访问,实现资源的增删查改。文章首先详细介绍了Master成为Leader时的资源调度,包括全量加载当前Worker节点和资源状态,并调用reAssign方法完成资源的重新分配。其次,文章讨论了Worker节点发生变化时的资源更新,当Master监听到Worker节点变化时,会更新节点与资源状态,并重新调度资源。最后,文章详细介绍了负载均衡的资源分配算法,以最小负载法为例,实现了资源的均衡分配。通过实例验证了资源分配的负载均衡策略,以及在Worker节点崩溃后重新调度任务的策略。同时,文章还提出了课后题,探讨了在生产实践中更复杂的调度算法和如何让程序轻松地切换到另一个调度算法上的问题。整体而言,本文深入浅出地介绍了分布式系统中的故障容错和资源调度,对于需要了解分布式系统资源调度的读者具有一定的参考价值。

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

全部留言(1)

  • 最新
  • 精选
  • Geek_2c2c44
    master调用DeleteResource之后, 只不过worker在下一次在loadresource的时候不会加载被删除的任务而已, 那woker已经运行的爬虫任务岂不是还在运行?
    2024-01-31归属地:浙江
    1
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部