.NET Core下的開源分布式任務調度系統ScheduleMaster-v2.0低調發布


從1月份首次公開介紹這個項目到現在也快4個月了,期間做了一些修修補補整體沒什么大的改動。2.0算是發布之后第一個大的版本更新,帶來了許多新功能新特性,也修復了一些已知的bug,在此感謝在博客、Issue和QQ群中提出各種意見的朋友,以及指導過我的前輩大佬們。

在我看來,這個項目沒有使用任何高深的技術和架構,甚至有些代碼寫的自己都不滿意不敢拿出來給大家觀賞,和社區中其他一些開源項目的大佬們比起來自慚形穢。但是這幾個月陸續收到一些小伙伴的支持和鼓勵,也被一些源碼網站收錄和推薦,讓我有勇氣和信心把它繼續做下去,貴在堅持吧。

新版本主要是增加了HTTP任務調度以及節點管理功能,開發過程中重構了部分代碼,本來還打算完善一下單元測試,由於時間關系無奈延后了。

不太熟悉的朋友可以看下之前的介紹:


新版本特性

  • 完善了任務生命周期事件

  • 任務列表支持節點名稱搜索和顯示優化

  • 支持配置HTTP任務

  • 支持節點手動管理

  • 支持在程序集任務中指定自定義配置文件

  • 支持長任務取消

  • 新增了一些系統策略配置

  • 新增了動態參數啟動,對容器部署更友好

  • 推出正式文檔

  • 補充了一些使用demo

  • 修復若干bug

本次更新稍有遺憾的是對HTTP任務授權認證處理這塊,我所了解到的開放API基本都實現了自己的一套簽名驗證機制,更完善的則會使用OAuth2那一套東西,使用簡單BASIC認證或JWT的比較少一些,所以感覺接入BASIC和JWT的意義不大,但是面對五花八門的接口簽名或OAuth我暫時也沒有太好的方案,只好先給出一個簡陋的HTTP調度功能,日后還會繼續思考探索把這塊加上。

到這里系統的核心調度功能基本差不多了,接下來會重點考慮異步化、資源監控、性能監控和更加自由的策略配置方面的東西。有些朋友也建議能否支持多數據庫類型、改成SPA應用等等,這種需求目前不是很緊急,會往后放一放再看。


先睹為快

由於開始維護正式文檔,博客中后期會有內容更新不及時,請以github wiki為准。

1、提供了任務初始化入口:

public virtual void Initialize()
{
    ///TODO:
}

我們可以在這里加載自己的配置文件(支持熱更新):

    /// <summary>
    /// 演示如何設置自己的配置文件,以及讀取配置項
    /// </summary>
    public class CustomConfigFile : TaskBase
    {
        public override void Initialize()
        {
            //指定配置文件
            base.SetConfigurationFile("myconfig.json");
        }

        public override void Run(TaskContext context)
        {
            context.WriteLog($"我的配置TestKey1:{Configuration["TestKey1"]}");
            context.WriteLog($"我的配置TestKey2:name->{Configuration["TestKey2:Name"]}  age->{Configuration["TestKey2:Age"]}");
        }
    }
// myconfig.json
{
  "TestKey1": "MyValue1",
  "TestKey2": {
    "Name": "hoho",
    "Age": 18
  }
}

或者做一些DI綁定的東西:

    /// <summary>
    /// 演示如何在業務中使用DI
    /// </summary>
    public class TaskUseDI : TaskBase
    {
        IServiceProvider serviceProvider;

        public override void Initialize()
        {
            var serviceCollection = new ServiceCollection();
            serviceCollection.AddTransient<ITemplateService1, TemplateService1>();
            serviceCollection.AddTransient<ITemplateService2, TemplateService2>();
            serviceProvider = serviceCollection.BuildServiceProvider();

            base.Initialize();
        }

        public override void Run(TaskContext context)
        {
            context.WriteLog($"我是使用DI獲取的結果:{new TaskUseDITest(serviceProvider.GetService<ITemplateService1>()).GetResult()}");
        }
    }

Initialize()方法的特點是只會在創建任務實例時執行一次(當然你也可以使用構造函數實現),伴隨直到任務實例銷毀(停止)的整個周期。

2、在控制台中配置HTTP任務

   [HttpPost]
   public string JsonPost(Blog model)
   {
       return "ok";
   }


3、新增的若干配置項

4、禁用自動注冊模式,使用master主動創建並接管worker

5、使用命令行傳參覆蓋配置文件

// docker鏡像中的配置文件
{
  "NodeSetting": {
    "IdentityName": "worker1", 
    "Role": "worker", 
    "Protocol": "http", 
    "IP": "localhost", 
    "Port": 30001, 
    "Priority": 1
  }
}
[root@master1 ms_worker1]# docker run  -d -p 40001:80  --name="myworker1" ms_worker bash --identity=docker-worker1 --ip=192.168.174.5 --port=40001
5e446997d4a28b3c6ec0708a88d42a4d6baad1e5d5ae686d88c03e99c4e2003f

更多的等着你來慢慢探索~

重要提示:如果您從前面的版本升級,請務必檢查系統配置菜單是否有新增的配置項,如果沒有的話,請使用src目錄下的db.sql最后面的配置項腳本初始化數據。
INSERT INTO schedule_master.systemconfigs (key, group, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('Http_RequestTimeout', 'HTTP配置', '請求超時時間', '10', 1, 1, '單位是秒,默認值是10', now(), null, null);
INSERT INTO schedule_master.systemconfigs (key, group, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('System_WorkerUnHealthTimes', '系統配置', 'Worker允許無響應次數', '3', 1, 1, '健康檢查失敗達到最大次數會被下線剔除,默認值是3', now(), null, null);
INSERT INTO schedule_master.systemconfigs (key, group, name, value, sort, isreuired, remark, createtime, updatetime, updateusername) VALUES ('Assembly_ImagePullPolicy', '程序集配置', '文件包拉取策略', 'IfNotPresent', 1, 1, 'Always-總是拉取,IfNotPresent-本地沒有時拉取,默認是Always', now(), null, null);


未來展望

本項目始終秉持部署簡單+操作簡單的核心理念持續進行迭代更新,積極響應各方的建議和需求,為開源社區添磚加瓦~

作者唯一開源地址GitHub stars GitHub forks

文檔(還在逐步更新中):

感謝大家支持~

我的博客即將同步至騰訊雲+社區,邀請大家一同入駐:https://cloud.tencent.com/developer/support-plan?invite_code=oeevm2f6y7qt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM