Asp.Net Core下的开源任务调度平台ScheduleMaster

从何提及

2017年初的时候,因为当时项目须要作了一个乞丐版定时调度系统,那时候只在单机上实现了核心的调度功能。作这个玩意以前也调研了社区中开源的解决方案,找了几个实地部署试跑了一下,其实都很不错。但那时候咱们有个问题就是应用都是基于Azure WebApp去部署,不太想为了这个东西搞一台虚拟机来跑windows服务,因此最后决定从新开发一个,哪怕功能简单点能知足须要就行。html

很快这个东西就作好了也投入了使用,由于是给业务系统定制那里面多少掺杂一些业务上的东西,那时候我就有了一个想法:把它剥离处理作成一个比较通用的系统打形成本身的开源项目。后来又对它作了一些升级优化,支持了多节点运行,作了一些界面展现。git

虽然那时候.Net Core已经出了正式版,但因为以前的业务系统仍是使用.Net Framework开发,调度系统也并无选择.Net Core。github

再后来,我就定了计划路线:一个单机版和一个集群版,单机版主要是部署简单可是可用性比较低,集群版支持多节点部署能够保障高可用。因而说干就干,在工做之余慢慢添砖加瓦,找UI搭架子,一行行代码开始堆起来,又一遍遍重构(万事开头难)。到年末的时候由于一些缘由换工做了,接着整个18年都比较(忙)懒,基本处于停滞状态没什么产出。一直到2019下半年,才下决心出一个版本。这时候刚好碰上.Net Core 3.0发布,决定用Core重构一遍,也顺便对.Net Core来一次实战,因而就有了如今这个版本。web

持续近4年的Flag终于有了第一个Milestone。sql

传送门:https://github.com/hey-hoho/ScheduleMasterCore编程

还有一个缘由选择在3.0时重构,Framework中使用了AppDomain机制来实现程序集动态管理,.Net Core以前的版本没有相似这种功能,直到3.0版本才有了AssemblyLoadContext提供这个能力。c#


关于包装


当时想把这个项目搞的稍微(有逼格)正式一点,让它看起来不那么山寨,认认真真想了一个名字最后定为ScheduleMaster。而后又去网上偷了一个icon(来自@ColinXu 的做品,在此感谢),用我撇脚的PS功底捣腾几下作了logo,也算是正式出道了。后来上GitHub建立了Repository,更新了Description和ReadMe,添加了License,绑定了Azure DevOps,让一切看起来都像个正儿八经的开源项目。windows


主要功能

  • 简易的Web UI操做;
  • 任务动态管理:建立、启动、中止、暂停、恢复、删除等;
  • 高可用支持,跨平台多节点部署;
  • 数据安全性,不会出现多实例并发调度;
  • 支持自定义参数设置;
  • 支持设置监护人,运行异常时邮件告警;
  • 支持设置任务依赖,自动触发,共享任务结果;
  • 插件式开发,任务运行环境隔离;
  • 全链路日志系统,运行轨迹轻松掌控;
  • 用户访问控制;
  • 提供开放REST API,业务系统能够无缝集成;
  • 调度报表统计;

关于功能我想说的是,我一直提倡专业的工具干专业的活,调度器就核心就是作调度,应该避免太多的业务操做,可以经过远程调用(RPC)实现的业务就不要把一堆dll丢到调度器里去跑。安全

除此以外,这套框架用来搭建中小型的web系统也是很是合适的。架构


主要技术

Asp.Net Core 3.0、原生DI、EntityFramework Core 3.0、Mysql 5.七、Quartz.Net、BeyondAdmin、Jquery一把梭...

没有任何高大上的玩意,尽显(低调奢华有内涵)朴实~

在此次重构过程当中现学现卖,写了下面2篇文章:

之后再慢慢写文章来介绍其余的东西。


结构图

为了让总体架构有个清晰的展现,特地画了下面这个图,能够看到也是很是简单:

虽然很简单,但在我接触过Kubernetes后惊人地发现二者还挺类似,尽管Kubernetes要比我这个复杂的多。强行抱大腿😂😂


如何使用

在GitHub项目主页readme中作了简单描述,部署上基本没啥难度,更详细的我后面再补文档。

怎么接入业务能够参考源码中的Demo项目,这里简单描述下。

  • 添加引用
    方式1,自行下载源码编译,手动添加引用Hos.ScheduleMaster.Base.dll
    方式2,经过Nuget搜索ScheduleMaster安装。

  • 编写业务代码,并编译成dll。
public class MyTask : Hos.ScheduleMaster.Base.TaskBase
    {
        public override void Run(TaskContext context)
        {
            context.WriteLog($"当前时间是:{DateTime.Now}");
        }
    }
  • 上控制台建立一个任务,填写好各项参数,dll打包上传,再启动任务便可。


剧照图

先就这么多~


将来展望

仍是先立下Flag:基于.Net Core的这是一个核心版本,后面会一直更新下去,从此的开发计划也在主页readme作了描述。至于Framework上的版本,后面再说吧,若是当前这个石头扔下去能激起一些水花,其余版本也一并完善起来。毕竟俗务缠身,也并不是什么技术大佬编程极客,须要时间去干别的事。

固然了,有bug和优化点你们随时砸过来:

https://github.com/hey-hoho/ScheduleMasterCore/issues

有问题能够加QQ群交流:824535095

虽然再也不迷恋微软,但仍是但愿.net社区愈来愈好,尽微薄之力多参与多贡献,冲鸭~

相关文章
相关标签/搜索