go语言实现分布式crontab任务系统
写在前面
最近离职交接空档期,在慕课网上学习了下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任务系统相关推荐
- 如何设计一个分布式定时任务系统
以前在美团有crane可用,现在得自己考虑以下两种场景了: 1.定时任务指定集群中的一台机器执行 2.如何修改cron参数,且修改永久有效 当然直接用quartz来实现肯定最棒,但设计的配置太多,小公 ...
- Go 开源说第十六期预告:跨语言的分布式事务方案——DTM
点击蓝字 关注我们 写在前面 GoCN开源说是GoCN推出的一档分享Go开源好项目的直播栏目,通过开源说希望能够帮助到开源作者们实现以下目标: 第一是去推广他们的开源项目 第二说说背后的设计原理和理念 ...
- 实验干货分享:用Go语言实现分布式缓存开发之map
本实验是整个分布式缓存开发的基础实验,主要会使用 Go 语言的内置库完成一个单机版的缓存服务,后面会基于这个单机版的缓存服务来升级改造,逐步迭代成为一个分布式的缓存服务.本实验会使用 Go 语言的 m ...
- .sh文件是什么语言_FastDFS分布式文件系统的搭建安装
FastDFS 很久之前,对上传的文件可能是存储在数据库,在数据库中存储路径,保存文件的二进制数据,随着用户上传的文件增加,数据库数据越来越多.这时,可以使用分布式文件系统,将用户上传的文件例如图片, ...
- C语言实现了crontab表达式执行时间
公司有个嵌入式低功耗项目,项目需求中有一项是仿照Linux cron task的定时设置,作为设备定时唤醒时间.于是就自己琢磨写了C语言的Crontab表达式执行时间,各种调试结果与crontab执行 ...
- gearman c语言,Gearman分布式任务处理系统(一)基本介绍
Gearman介绍 Gearman是一个用来把工作委派给其他机器.分布式的调用更适合做某项工作的机器.并发的做某项工作在多个调用间做负载均衡.或用来在调用其它语言的函数的系统. 通常,多语言多系统之间 ...
- golang分布式任务调度
目录 介绍 分析 介绍 Linux服务器中总是运行着诸多定时任务,任务的调度常借助Linux crontab完成.当任务变多,手工的监控日志.启停任务变得复杂. 虽然市面上已有许多完善的任务调度服务, ...
- 基于Erlang语言的视频相似推荐系统 | 深度
作者丨gongyouliu 来源 | 转载自大数据与人工智能(ID:ai-big-data) [导语]:作者在上一篇文章<基于内容的推荐算法>中介绍了基于内容的推荐算法的实现原理.在本篇文 ...
- 阿里架构师,讲述分布式架构云平台解决方案(附学习路线)...
技术架构 分布式架构云平台在充分分析IT技术发展趋势,遵循集中化.标准化.集成化.可靠化和可扩展化的设计原则,以价值创造为使命,以规范化.一体化.智能化的云平台为支撑,实现信息的透明共享.业务的敏捷协 ...
最新文章
- markdown编辑
- java可比较的和比较器的区别_Java中Compareable和Comparator两种比较器的区别
- 如何将文字转换成语音?文字转语音哪个工具好
- 【NLP】NLP提效,除了选择合适的模型,就是数据增强了
- Azure实践之如何批量为资源组虚拟机创建alert
- 操作系统之内存管理:2、内存管理的功能(内存分配回收、扩充、地址转化、存储保护)
- XMPP基本概念--节(stanza)
- Hive数据导出的几种方式
- 模式识别与机器学习(一):概率论、决策论、信息论
- matlab解隐式差分格式,【毕业设计(论文)】二维热传导方程有限差分法的MATLAB实现...
- 电脑上有什么比较好用的屏幕录制软件
- CTP 4097错误根源 / CTP程序运行没有反应/CTP版本说明
- Vue点击选中(多选)选中右上角有三角形
- 【算法练习】字符串处理 poj2690:首字母大写
- Unity_物体旋转方法归纳
- XML xmlns xsi解释
- 国家发展改革委、财政部关于加快推进国家电子政务外网建设工作的通知
- GBase项目管理实践总结——挣值管理学习
- 手机如何访问电脑本地localhost网页, 以调试项目?
- ECMAScript 6的基础认知
热门文章
- 17084 罗密欧与朱丽叶的迷宫问题
- 在线点餐系统设计文档
- gym里的获取observation和action的维度
- Bert模型如何在之前训练基础上继续训练?
- 【Rust 日报】2021-11-26 使用 PyO3 从 Python 调用 Rust
- SSAA、MSAA和FXAA区别
- 怎么实现秒表的功能??有个按钮,一按开始计时,再按停止
- 第十六届全国大学生智能车竞赛-开源-全向行进组-国一控制
- python不可以处理pdf文件_PyPDF2 write不能用于某些PDF文件(Python3.5.1)
- CI24R1 2.4G低成本氛围灯解决方案