写在前面

最近离职交接空档期,在慕课网上学习了下go语言实现分布式crontab任务调度系统。自己也跟随视频实现了一把(跟原版略有不同)。现把成果记录一下。

最终代码: https://github.com/funkol2007/distributed_crontab

系统介绍

实现目标:

实现一个分布式crontab系统。用户可以通过前端页面配置任务和cron表达式和命令来执行定时任务,相比较linux自带的crontab来说,本项目可以方便看到执行结果,且分布式部署可以避免单点问题,用户不用登陆到各个机器去配置任务,操作方便。同时用户可以通过页面查看任务执行的情况。当然,目前做的还比较简单,对任务的执行时间没有超时机制,但提供了手动的删除和强杀正在执行的任务操作。

最终效果:


系统架构

主要分为master和worker两个角色。通过etcd来作为服务发现和分布式锁的实现。MongoDB作为数据量存储日志信息,方便查询执行结果。同时也可以通过本地log日志查看模块的执行情况。
master通过跟前端交互获取用户的任务操作信息,通过与etcd交互和mongodb交互来完成建立、删除、编辑、强杀、查看健康woker节点以及查看日志等功能。
woker通过监控etcd的节点变化来执行任务的执行、强杀等操作,同时通过etcd来实现自身服务的注册功能以及吧执行结果写入MongoDB作为日志存储。


后续优化

有很多地方有待优化,比如

  • 任务执行时间的限制,可以支持配置任务执行的最大时长,超过强杀。
  • master目前虽然支持多机部署但是没有主从机制,可以实现master的选主机制,防止并发问题。只有主才能执行etcd 的"写入操作"
  • 代码结构上有一定的冗余,可以通过复用以实现精简

go语言实现分布式crontab任务系统相关推荐

  1. 如何设计一个分布式定时任务系统

    以前在美团有crane可用,现在得自己考虑以下两种场景了: 1.定时任务指定集群中的一台机器执行 2.如何修改cron参数,且修改永久有效 当然直接用quartz来实现肯定最棒,但设计的配置太多,小公 ...

  2. Go 开源说第十六期预告:跨语言的分布式事务方案——DTM

    点击蓝字 关注我们 写在前面 GoCN开源说是GoCN推出的一档分享Go开源好项目的直播栏目,通过开源说希望能够帮助到开源作者们实现以下目标: 第一是去推广他们的开源项目 第二说说背后的设计原理和理念 ...

  3. 实验干货分享:用Go语言实现分布式缓存开发之map

    本实验是整个分布式缓存开发的基础实验,主要会使用 Go 语言的内置库完成一个单机版的缓存服务,后面会基于这个单机版的缓存服务来升级改造,逐步迭代成为一个分布式的缓存服务.本实验会使用 Go 语言的 m ...

  4. .sh文件是什么语言_FastDFS分布式文件系统的搭建安装

    FastDFS 很久之前,对上传的文件可能是存储在数据库,在数据库中存储路径,保存文件的二进制数据,随着用户上传的文件增加,数据库数据越来越多.这时,可以使用分布式文件系统,将用户上传的文件例如图片, ...

  5. C语言实现了crontab表达式执行时间

    公司有个嵌入式低功耗项目,项目需求中有一项是仿照Linux cron task的定时设置,作为设备定时唤醒时间.于是就自己琢磨写了C语言的Crontab表达式执行时间,各种调试结果与crontab执行 ...

  6. gearman c语言,Gearman分布式任务处理系统(一)基本介绍

    Gearman介绍 Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统. 通常,多语言多系统之间 ...

  7. golang分布式任务调度

    目录 介绍 分析 介绍 Linux服务器中总是运行着诸多定时任务,任务的调度常借助Linux crontab完成.当任务变多,手工的监控日志.启停任务变得复杂. 虽然市面上已有许多完善的任务调度服务, ...

  8. 基于Erlang语言的视频相似推荐系统 | 深度

    作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...

  9. 阿里架构师,讲述分布式架构云平台解决方案(附学习路线)...

    技术架构 分布式架构云平台在充分分析IT技术发展趋势,遵循集中化.标准化.集成化.可靠化和可扩展化的设计原则,以价值创造为使命,以规范化.一体化.智能化的云平台为支撑,实现信息的透明共享.业务的敏捷协 ...

最新文章

  1. markdown编辑
  2. java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别
  3. 如何将文字转换成语音?文字转语音哪个工具好
  4. 【NLP】NLP提效,除了选择合适的模型,就是数据增强了
  5. Azure实践之如何批量为资源组虚拟机创建alert
  6. 操作系统之内存管理:2、内存管理的功能(内存分配回收、扩充、地址转化、存储保护)
  7. XMPP基本概念--节(stanza)
  8. Hive数据导出的几种方式
  9. 模式识别与机器学习(一):概率论、决策论、信息论
  10. matlab解隐式差分格式,【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现...
  11. 电脑上有什么比较好用的屏幕录制软件
  12. CTP 4097错误根源 / CTP程序运行没有反应/CTP版本说明
  13. Vue点击选中(多选)选中右上角有三角形
  14. 【算法练习】字符串处理 poj2690:首字母大写
  15. Unity_物体旋转方法归纳
  16. XML xmlns xsi解释
  17. 国家发展改革委、财政部关于加快推进国家电子政务外网建设工作的通知
  18. GBase项目管理实践总结——挣值管理学习
  19. 手机如何访问电脑本地localhost网页, 以调试项目?
  20. ECMAScript 6的基础认知

热门文章

  1. 17084 罗密欧与朱丽叶的迷宫问题
  2. 在线点餐系统设计文档
  3. gym里的获取observation和action的维度
  4. Bert模型如何在之前训练基础上继续训练?
  5. 【Rust 日报】2021-11-26 使用 PyO3 从 Python 调用 Rust
  6. SSAA、MSAA和FXAA区别
  7. 怎么实现秒表的功能??有个按钮,一按开始计时,再按停止
  8. 第十六届全国大学生智能车竞赛-开源-全向行进组-国一控制
  9. python不可以处理pdf文件_PyPDF2 write不能用于某些PDF文件(Python3.5.1)
  10. CI24R1 2.4G低成本氛围灯解决方案