首页 > 其他分享 >Go语言开发分布式任务调度 轻松搞定高性能Crontab,技能储备+项目开发

Go语言开发分布式任务调度 轻松搞定高性能Crontab,技能储备+项目开发

时间:2023-11-11 12:12:01浏览次数:27  
标签:任务调度 Crontab 任务 master crontab etcd Go 执行 分布式

写在前面

最近离职交接空档期,在慕课网上学习了下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 的"写入操作"
  • 代码结构上有一定的冗余,可以通过复用以实现精简
   

标签:任务调度,Crontab,任务,master,crontab,etcd,Go,执行,分布式
From: https://www.cnblogs.com/add1188/p/17825765.html

相关文章

  • GO实现分布式爬虫—掌握go语言通道与协程项目架构设计
    GO实现分布式爬虫—掌握go语言通道与协程项目架构设计Go高并发微服务分布式 1.命令行的用户管理 用户信息存储        =>内存        =>结构[]map        =>用户IDnameageteladdr            [len][]map......
  • go 1.6 废弃 io/ioutil 包后的替换函数
      go1.6废弃io/ioutil 包后的替换函数 io/ioutil替代 ioutil.ReadAll->io.ReadAllioutil.ReadFile->os.ReadFileioutil.ReadDir->os.ReadDir//othersioutil.NopCloser->io.NopCloserioutil.ReadDir->os.ReadDirioutil.TempDir->os.Mkdi......
  • 【1.0】Go语言介绍及引入
    【一】Go语言介绍Go语言是Google公司在2007开发一种静态强类型、编译型语言,并在2009年正式对外发布。静态强类型语言需要先编译再执行比如C、C#、Java等语言需要先将代码编译成不同平台的可执行文件,才能在不同平台上运行需要解释器比如Python、PHP、node.js等语言,......
  • 【4.0】Go语言语法基础之函数
    【一】函数基础【1】语法func关键字函数名(形参1形参1的类型,形参2形参2的类型)(返回值类型){函数体(函数体的内容和缩进无关,只要是在大括号内,都是函数体内容)}在Python中需要先定义函数再使用在Go中不需要先定义再使用funcmain(){}【2】无参数无返回值......
  • 【3.0】Go语言语法初识之变量
    【零】注释语法注释就是对代码的解释和说明,其目的就是让人们更加轻松的了解代码。注释是开发人员的一个重要的习惯。单行注释使用//开头多行注释使用/*开头*/结尾//package定义包名main包名packagemain//import引用库fmt库名import"fmt"//func定......
  • go.mod file not found in current directory or any parent directory; see 'go help
    go.modfilenotfoundincurrentdirectoryoranyparentdirectory;see'gohelpmodules'(exitstatus1)原因:目录少缺少 go.mod文件。解决方法:在终端中输入:gomodinitmain 其中main是模块名。 ......
  • GoKIT v2.1是一种基于云的物联网开发平台,旨在帮助开发者快速构建物联网应用程序。
    GoKITv2.1是一种基于云的物联网开发平台,旨在帮助开发者快速构建物联网应用程序。它提供了一组简单易用的工具和API,使开发者能够轻松地与各种类型的设备和传感器进行交互,并实时处理数据。GoKITv2.1的主要特点包括:设备管理:可以轻松管理连接到平台的设备,包括添加、删除和重新配置设......
  • Go中字符串处理:fmt.Sprintf与string.Builder的比较
    在Go语言中,我们通常会遇到两种主要的方式来处理和操作字符串:使用fmt.Sprintf函数和string.Builder类型。尽管两者都可以实现字符串的格式化和连接,但它们在性能和用法上有一些关键区别。1.fmt.Sprintffmt.Sprintf是一个函数,它根据提供的格式化字符串和参数列表,将它们格式化为一......
  • godot常用C#代码
    Godot常用C#代码注:本文记录的是我个人认为很常用但是容易忘记的C#代码。生成实例:生成实例的对象必须是PackedScene类型生成实例如果想用其它类型存储需要强制转换,即在变量名前括号加变量名,或用az强转代码示例:usingGodot;usingSystem;publicpartialclassworl......
  • The governance measures of marine oil pollution
    Thegovernancemeasures(1).Preventivemeasures.Preventionisoneofthemosteffectivecontrolmethods,includingthefollowingaspects:a.Strengtheningmonitorandcontrolsystem,improvingthesoundmonitoringsystem,andestabilishingthe real-time......