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社區愈來愈好,盡微薄之力多參與多貢獻,衝鴨~

相關文章
相關標籤/搜索