从何说起

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的更多相关文章

  1. Asp.Net Core下的开源任务调度平台ScheduleMaster—快速上手

    概述 ScheduleMaster是一个开源的分布式任务调度系统,它基于Asp.Net Core平台构建,支持跨平台多节点部署运行. 它的项目主页在这里: https://github.com/hey ...

  2. .NET Core开源任务调度平台ScheduleMaster上新了

    ScheduleMaster上一次比较大的更新还是在6月份,转眼已经快过去4个月了,这段时间比较忙,中间只更新过一次修复了几个小bug.要总结这次更新的话,必须要用"千呼万唤始出来" ...

  3. 国外10个ASP.Net C#下的开源CMS

    国外10个ASP.Net C#下的开源CMS https://blog.csdn.net/peng_hai_lin/article/details/8612895   1.Ludico Ludico是 ...

  4. ASP.NET CORE下运行CMD命令

    ASP.NET CORE下运行CMD命令,用以前的ASP.NET 的命令System.Diagnostics.Process.Start("notepad");这样是可以运行出记事 ...

  5. Asp.Net Core下的两种路由配置方式

    与Asp.Net Mvc创建区域的时候会自动为你创建区域路由方式不同的是,Asp.Net Core下需要自己手动做一些配置,但更灵活了. 我们先创建一个区域,如下图 然后我们启动访问/Manage/H ...

  6. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  7. ASP.Net Core下Authorization的几种方式 - 简书

    原文:ASP.Net Core下Authorization的几种方式 - 简书 ASP.Net Core下Authorization的几种方式 Authorization其目标就是验证Http请求能否 ...

  8. Asp.net core下利用EF core实现从数据实现多租户(1)

    前言 随着互联网的的高速发展,大多数的公司由于一开始使用的传统的硬件/软件架构,导致在业务不断发展的同时,系统也逐渐地逼近传统结构的极限. 于是,系统也急需进行结构上的升级换代. 在服务端,系统的I/ ...

  9. Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作

    前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ...

随机推荐

  1. day1_python流程控制、For循环

    一.流程控制 条件语句 1.1.单分支 ? 1.2.多分支 ? 需求一.用户登陆验证 #!/usr/bin/env python name=input('请输入用户名字:') password=inp ...

  2. 微信接口开发报错invalid credential, access_token is invalid or not latest hint

    微信接口凭证access_token一定要全局管理 我们的查酒后台集成了微信公众平台的客服API接口,不用登录微信公众号的后台就可以直接给用户发送消息.最近,运营的同事反馈,通过微信查酒,后台无法直接 ...

  3. 洛谷P4860 Roy&October之取石子II 题解 博弈论

    题目链接:https://www.luogu.org/problem/P4860 和<P4018 Roy&October之取石子>一样的推导思路,去找循环节. 可以发现:只要不能被 ...

  4. supersocket实现你的命令

    现在, 如果你有一个命令行协议的服务器实例 "IronPythonServer", 而且我们要用 Python 创建一个 "ADD" 命令用于让两个整数相加,然 ...

  5. supersockets命令过滤器

    关键字: 命令过滤器, 命令, 过滤器, OnCommandExecuting, OnCommandExecuted SuperSocket 中的命令过滤器看起来有些像 ASP.NET MVC 中的 ...

  6. 【已解决】phpMyAdmin中导入mysql数据库文件时出错:您可能正在上传很大的文件,请参考文档来寻找解决办法

    期间,用phpMyAdmin去导入90M左右的mysql数据库文件时出错: 您可能正在上传很大的文件,请参考文档来寻找解决方法. [解决过程] 1.很明显,是文件太大,无法导入.即上传文件大小有限制. ...

  7. jquery实用应用之jquery操作radio、checkbox、select

    本文收集一些jquery的实用技巧,非常实用的哦,其中对radio.checkbox.select选中与取值的方法. 获取一组radio被选中项的值var item = $('input[@name= ...

  8. jQuery中动态创建、添加元素的方法总结

    <input type="button" value="创建元素" id="btn"> <div id="box ...

  9. CodeForces 1204E"Natasha, Sasha and the Prefix Sums"(动态规划 or 组合数学--卡特兰数的应用)

    传送门 •参考资料 [1]:CF1204E Natasha, Sasha and the Prefix Sums(动态规划+组合数) •题意 由 n 个 1 和 m 个 -1 组成的 $C_{n+m} ...

  10. 符合阿里巴巴代码规范的checkstyle检测文件

    一.安装与简介 eclipse和idea都有对应的插件,找到插件安装界面.搜索checkstyle,点击安装后,重启IDE即可.(网上有很多安装教程,就不重复制造轮子了) 二.导入配置文件 在chec ...