特别放送 | 分布式作业系统设计和实现
孔令飞
该思维导图由 AI 生成,仅供参考
你好,我是孔令飞,我们又见面了。结课并不意味着结束,我非常高兴能持续把好的内容分享给你,也希望你能继续在留言区与我保持交流,分享你的学习心得和实践经验。
今天这一讲,我们来聊聊如何设计分布式作业系统。在实际的 Go 项目开发中,我们经常会遇到下面这两个功能需求:
想定时执行某个任务,例如在每天上午 10:00 清理数据库中的无用数据。
轮训数据库表的某个字段,根据字段的状态,进行一些异步的业务逻辑处理。比如,监听到 table_xxx.status = 'pending' 时,执行异步的初始化流程,完成之后设置 table_xxx.status='normal' 。
这两个在 Go 项目开发中非常常见、基础的功能需求,通常可以通过作业系统来实现。IAM 为了解决这种常见的功能需求,也开发了自己的作业系统。今天这一讲,我们就来看下 IAM 是如何实现作业系统的。
任务分类
在介绍作业系统之前,这里先来看下任务的分类。理解任务的分类,有助于我们理解作业系统执行的任务类型,进而有助于我们设计作业系统。
在我看来,任务可以分为下面 3 类。
定时任务:定时任务会在指定的时间点固定执行。只要到达执行任务的时间点,就会执行任务,而不管上一次任务是否完成。
间隔任务:上一次任务执行完,间隔一段时间(如 5 秒、5 分钟),再继续执行下一次任务。
间隔性定时任务:间隔任务的变种,从上一次任务开始执行时计时,只要间隔时间一到,便执行下一次任务,而不管上一次任务是否完成。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在Go项目开发中实现分布式作业系统的常见需求和解决方案。首先探讨了任务的分类,包括定时任务、间隔任务和间隔性定时任务,并介绍了作业系统的常见实现方式。作者详细介绍了四种执行间隔/定时任务的方式,包括基于`time`包的方法、使用Go包、Linux的crontab执行定时任务以及使用开源的作业系统。随后重点介绍了Linux crontab的使用方法和优缺点。文章还列举了一些受欢迎的Go语言开发的作业系统,包括`dkron`、`gocron`和`cronsun`,并提出了如何选择适合自己的开源项目的建议。此外,文章还介绍了`github.com/robfig/cron`和`github.com/go-redsync/redsync`的使用方法。最后,总结了IAM作业系统的特点,包括分布式、与项目契合紧密、支持多种类型的任务以及可插件化地加入新的周期/定时任务。整体而言,本文为读者提供了在Go项目开发中设计和实现分布式作业系统的有益参考。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》,新⼈⾸单¥68
《Go 语言项目开发实战》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(10)
- 最新
- 精选
- 惟新我算是拿下一血了嘛?
作者回复: 是!
2021-12-193 - wei 丶如果程序新上执行程序或者修改过了重新上线 怎么做到平滑上线呢
作者回复: 以deployment的形式部署在kubernetes上。 deployment设置多副本,更新时,采用滚动更新的方式
2022-04-25 - Bradford感觉可以用k8s的job和cronjob
作者回复: 用k8s的job和cronjob就有点重了
2022-04-21 - wei 丶老师,如果有 需要下一次任务 也有 不需要跳过的 这种怎么弄呀
作者回复: 没太明白你的需求
2022-04-153 - fliyu虽然结课了,但是还是希望作者继续分享更多实战文章
作者回复: 后续会继续分享!
2022-01-25 - Geek_Harlinnice 最近刚好在改写项目的这块设计~2021-12-224
- 科科人神作者太良心了2021-12-193
- Geek_854810这篇真的是意外收获,我想用go语言实现一个作业管理和调度系统,想用这课程里面开发项目的知识,结果正好还有契合的业务知识讲解。这里面的任务,支不支持提交类的?就是根据用户提交的命令,比如执行一个shell脚本或者一条shell命令,维护一个task queue,类似有界阻塞队列,用户提交就是生产,执行就是消费,不需要并发,只要逐个的去执行,带一个结果回调通知就行。这种是否还需要自己写代码,还是用间隔任务的功能就行。当然,自己写,好像也可以写一下。2023-01-15归属地:上海1
- Wongkakui没有考虑machineny 吗,这个框架主要作为异步任务调度框架,定时任务也算异步任务一种,并且定时任务模块也是基于cron 实现的2023-03-05归属地:广东
- helloworld将计划任务独立成一个服务的确是相对优雅的解决方案,👍2022-05-04
收起评论