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

從1月份首次公開介紹這個項目到如今也快4個月了,期間作了一些修修補補總體沒什麼大的改動。2.0算是發佈以後第一個大的版本更新,帶來了許多新功能新特性,也修復了一些已知的bug,在此感謝在博客、Issue和QQ羣中提出各類意見的朋友,以及指導過個人前輩大佬們。html

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

新版本主要是增長了HTTP任務調度以及節點管理功能,開發過程當中重構了部分代碼,原本還打算完善一下單元測試,因爲時間關係無奈延後了。github

不太熟悉的朋友能夠看下以前的介紹:sql


新版本特性

  • 完善了任務生命週期事件數據庫

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

  • 支持配置HTTP任務c#

  • 支持節點手動管理bash

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

  • 支持長任務取消

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

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

  • 推出正式文檔

  • 補充了一些使用demo

  • 修復若干bug

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

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


先睹爲快

因爲開始維護正式文檔,博客中後期會有內容更新不及時,請以github wiki爲準。

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

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()方法的特色是隻會在建立任務實例時執行一次(固然你也可使用構造函數實現),伴隨直到任務實例銷燬(中止)的整個週期。

二、在控制檯中配置HTTP任務

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


三、新增的若干配置項

四、禁用自動註冊模式,使用master主動建立並接管worker

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

// 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

相關文章
相關標籤/搜索