从何说起

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. tomcat access日志

    每次看access log都会记不住pattern里的各个标识代表的什么意思,记录下,备忘! tomcat的access log是由实现了org.apache.catalina.AccessLog接口 ...

  2. SpringSecurity登录原理(源码级讲解)

    一.简单叙述 首先会进入UsernamePasswordAuthenticationFilter并且设置权限为null和是否授权为false,然后进入ProviderManager查找支持Userna ...

  3. P1015 高精度乘法

    题目描述 给你两个很大的正整数A和B,你需要计算他们的乘积. 输入格式 输入一行包含两个正整数A和B,以一个空格分隔(A和B的位数都不超过 \(10^4\)) 输出格式 输出一行包含一个整数,表示A和 ...

  4. 基于小米即时消息云服务(MIMC)的Web IM

    michat 一个基于小米即时消息云服务(MIMC)的Web IM. 源码地址github和gitee同步. 截图展示 如何使用 请先双击目录"需要安装的jars"的install ...

  5. 2018-8-10-C#-局部函数与事件

    title author date CreateTime categories C# 局部函数与事件 lindexi 2018-08-10 19:16:52 +0800 2018-2-13 17:23 ...

  6. HDU 1087 Super Jumping....(动态规划之最大递增子序列和)

    Super Jumping! Jumping! Jumping! Problem Description Nowadays, a kind of chess game called “Super Ju ...

  7. 【62.89%】【BZOJ 1072】[SCOI2007]排列perm

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1862  Solved: 1171 [Submit][Status][Discuss] Descri ...

  8. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

  9. msbuild 项目文件常用判断条件

    在写项目文件的时候,需要根据不同的条件定义或执行不同的代码,有一些比较常使用的判断,本文收藏起来,方便大家找 在 msbuild 的项目文件 cspoj 或 xx.target 等文件里面,可以使用 ...

  10. C语言中的优先级和类型转换分析

    一.优先级 1.易错的优先级 二.类型转换 在C语言中,存在强制类型装换,也存在隐式类型转换,隐式类型转换实际上属于强制类型转换,隐式类型转换要点如图. (1)举例:算术运算式中,低类型转换为高类型 ...