Asp.Net Core下的开源任务调度平台ScheduleMaster
从何说起
2017年初的时候,由于当时项目需要做了一个乞丐版定时调度系统,那时候只在单机上实现了核心的调度功能。做这个玩意之前也调研了社区中开源的解决方案,找了几个实地部署试跑了一下,其实都很不错。但那时候我们有个问题就是应用都是基于Azure WebApp去部署,不太想为了这个东西搞一台虚拟机来跑windows服务,所以最后决定重新开发一个,哪怕功能简单点能满足需要就行。
很快这个东西就做好了也投入了使用,因为是给业务系统定制那里面多少掺杂一些业务上的东西,那时候我就有了一个想法:把它剥离处理做成一个比较通用的系统打造成自己的开源项目。后来又对它做了一些升级优化,支持了多节点运行,做了一些界面展示。
虽然那时候.Net Core已经出了正式版,但由于之前的业务系统还是使用.Net Framework开发,调度系统也并没有选择.Net Core。
再后来,我就定了计划路线:一个单机版和一个集群版,单机版主要是部署简单但是可用性比较低,集群版支持多节点部署可以保障高可用。于是说干就干,在工作之余慢慢添砖加瓦,找UI搭架子,一行行代码开始堆起来,又一遍遍重构(万事开头难)。到年底的时候因为一些原因换工作了,接着整个18年都比较(忙)懒,基本处于停滞状态没什么产出。一直到2019下半年,才下决心出一个版本。这时候恰好碰上.Net Core 3.0发布,决定用Core重构一遍,也顺便对.Net Core来一次实战,于是就有了现在这个版本。
持续近4年的Flag终于有了第一个Milestone。
传送门:https://github.com/hey-hoho/ScheduleMasterCore
还有一个原因选择在3.0时重构,Framework中使用了
AppDomain机制来实现程序集动态管理,.Net Core之前的版本没有类似这种功能,直到3.0版本才有了AssemblyLoadContext提供这个能力。
关于包装
当时想把这个项目搞的稍微(有逼格)正式一点,让它看起来不那么山寨,认认真真想了一个名字最后定为ScheduleMaster。然后又去网上偷了一个icon(来自@ColinXu 的作品,在此感谢),用我撇脚的PS功底捣腾几下做了logo,也算是正式出道了。后来上GitHub创建了Repository,更新了Description和ReadMe,添加了License,绑定了Azure DevOps,让一切看起来都像个正儿八经的开源项目。
主要功能
- 简易的Web UI操作;
- 任务动态管理:创建、启动、停止、暂停、恢复、删除等;
- 高可用支持,跨平台多节点部署;
- 数据安全性,不会出现多实例并发调度;
- 支持自定义参数设置;
- 支持设置监护人,运行异常时邮件告警;
- 支持设置任务依赖,自动触发,共享任务结果;
- 插件式开发,任务运行环境隔离;
- 全链路日志系统,运行轨迹轻松掌控;
- 用户访问控制;
- 提供开放REST API,业务系统可以无缝集成;
- 调度报表统计;
关于功能我想说的是,我一直提倡专业的工具干专业的活,调度器就核心就是做调度,应该避免太多的业务操作,能够通过远程调用(RPC)实现的业务就不要把一堆dll丢到调度器里去跑。
除此之外,这套框架用来搭建中小型的web系统也是非常合适的。
主要技术
Asp.Net Core 3.0、原生DI、EntityFramework Core 3.0、Mysql 5.7、Quartz.Net、BeyondAdmin、Jquery一把梭...
没有任何高大上的玩意,尽显(低调奢华有内涵)朴实~
在这次重构过程中现学现卖,写了下面2篇文章:
以后再慢慢写文章来介绍其他的东西。
结构图
为了让整体架构有个清晰的展示,特意画了下面这个图,可以看到也是非常简单:

虽然很简单,但在我接触过Kubernetes后惊人地发现两者还挺相似,尽管Kubernetes要比我这个复杂的多。强行抱大腿
Asp.Net Core下的开源任务调度平台ScheduleMaster的更多相关文章
- Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手
概述 ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行. 它的项目主页在这里: https://github.com/hey ...
- .NET Core开源任务调度平台ScheduleMaster上新了
ScheduleMaster上一次比较大的更新还是在6月份,转眼已经快过去4个月了,这段时间比较忙,中间只更新过一次修复了几个小bug.要总结这次更新的话,必须要用"千呼万唤始出来" ...
- 国外10个ASP.Net C#下的开源CMS
国外10个ASP.Net C#下的开源CMS https://blog.csdn.net/peng_hai_lin/article/details/8612895 1.Ludico Ludico是 ...
- ASP.NET CORE下运行CMD命令
ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事 ...
- Asp.Net Core下的两种路由配置方式
与Asp.Net Mvc创建区域的时候会自动为你创建区域路由方式不同的是,Asp.Net Core下需要自己手动做一些配置,但更灵活了. 我们先创建一个区域,如下图 然后我们启动访问/Manage/H ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- ASP.Net Core下Authorization的几种方式 - 简书
原文:ASP.Net Core下Authorization的几种方式 - 简书 ASP.Net Core下Authorization的几种方式 Authorization其目标就是验证Http请求能否 ...
- Asp.net core下利用EF core实现从数据实现多租户(1)
前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...
随机推荐
- 请求(RequestInfo)
请求类型 StringRequestInfo 用在 SuperSocket 命令行协议中. 你也可以根据你的应用程序的需要来定义你自己的请求类型. 例如, 如果所有请求都包含 DeviceID 信息, ...
- get_magic_quotes_gpc() PHP转义的真正含义
如何正确的理解PHP转 义是一个初学者比较困扰的问题.我们今天为大家简要的讲述了PHP转义的具体含义,希望有所帮助.PHP转义一直困扰着我, 今天认真的看了一下PHP手册, 终于解决了. 在PHP中默 ...
- CSS的固定定位
将元素放置在浏览器窗口的固定位置,拖拽窗口时元素位置不变. 类似语法: div{ position:fixed; top:0px; left:0px; right:0px; bottom:0px; }
- hdu 5656 CA Loves GCD
CA Loves GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)To ...
- HTTP协议详解以及URL具体访问过程(转载)
https://blog.csdn.net/f45056231p/article/details/82533490
- java 创建线程方式
1.继承Thread类 子类覆写父类中的run方法,将线程运行的代码存放在run中. 建立子类对象的同时线程也被创建. 通过调用start方法开启线程. 2.实现Runnable接口 子类覆盖接口中的 ...
- js 页面分享
首先说分享到QQ空间的通用代码:<a href="javascript:void(0);" onclick="window.open('http://sns.qzo ...
- C# winforms 输入颜色转换颜色名
本文告诉大家如何输入颜色,如0xFFFF8000转换为 Orange 在 winforms 程序 可以使用下面代码转换 public static class HexColorTranslator { ...
- linux进程睡眠的介绍
对于一个进程"睡眠"意味着什么? 当一个进程被置为睡眠, 它被标识为处于一个特殊的状 态并且从调度器的运行队列中去除. 直到发生某些事情改变了那个状态, 这个进程将不被 在任何 C ...
- 备战省赛组队训练赛第五场(UPC)
中石油比赛链接 CF题目链接 E:博客 G:李继朋 博客 H:苗学林 贺振原 J:博客 苗学林 机房白给队全方位题解:A B E G I J