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

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

你好,我是郑建勋。
这节课,让我们继续优化 Master 服务,实现 Master 请求转发和并发情况下的资源保护,同时实现 Worker 对分配资源的监听。

将 Master 请求转发到 Leader

首先我们需要考虑一下,当 Master 是 Follower 状态,同时还接收到了请求的情形。在之前的设计中,为了避免并发处理时可能出现的异常情况,我们只打算让 Leader 来处理请求。所以,当 Master 节点接收到请求时,如果当前节点不是 Leader,我们可以直接报错,由客户端选择正确的 Leader 节点。如下所示。
func (m *Master) AddResource(ctx context.Context, req *proto.ResourceSpec, resp *proto.NodeSpec) error {
if !m.IsLeader() {
return errors.New("no leader")
}
}
我们还可以采用另外一种更常见的方式:将接收到的请求转发给 Leader。要实现这一点,首先所有 Master 节点要在 Leader 发生变更时,将当前最新的 Leader 地址保存到 leaderID 中。
func (m *Master) Campaign() {
select {
case resp := <-leaderChange:
m.logger.Info("watch leader change", zap.String("leader:", string(resp.Kvs[0].Value)))
m.leaderID = string(resp.Kvs[0].Value)
}
for {
select {
case err := <-leaderCh:
m.leaderID = m.ID
case resp := <-leaderChange:
if len(resp.Kvs) > 0 {
m.logger.Info("watch leader change", zap.String("leader:", string(resp.Kvs[0].Value)))
m.leaderID = string(resp.Kvs[0].Value)
}
}
}
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何通过实现Master请求转发和Worker资源管理来优化系统。首先,文章介绍了将Master请求转发到Leader的实现方式,包括在Master节点接收请求时判断是否为Leader,并将请求转发给Leader。接着,文章讨论了资源保护的重要性,提出了使用原生互斥锁来保护Worker节点与Resource资源的并发安全。此外,还介绍了Worker单机模式和集群模式的切换方式,以及在集群模式下如何加载和监听etcd资源。文章还详细介绍了监听新增资源和删除资源的功能,并通过代码示例验证了功能的正常运行。总的来说,本文涵盖了系统优化的多个方面,包括请求转发、资源保护和Worker模式切换,为读者提供了全面的技术指导。

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

全部留言(2)

  • 最新
  • 精选
  • Geek_crazydaddy
    watchResource里获取和删除任务时为啥都不判断任务是不是分配给当前worker了?
    2023-02-20归属地:江苏
    1
  • Realm
    follow节点在收到资源变更请求,当请求到达grpc服务层时,通过注入进来的master grpc client,向master发起请求,参数不变,实现了转发功能,这个设计很赞!👍
    2023-02-07归属地:浙江
收起评论
显示
设置
留言
2
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部