從何說起
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要比我這個復雜的多。強行抱大腿😂😂
如何使用
在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和優化點大家隨時砸過來:
有問題可以加QQ群交流:824535095
雖然不再迷戀微軟,但還是希望.net社區越來越好,盡微薄之力多參與多貢獻,沖鴨~