C#调度管理工具(1) 调度的设计
最新有新的需求,需要写一个调度管理工具. 借鉴之前有用过 Yan Bin 的 调度管理器 DispatcherV2, 其中的 一些设计原理 我大致整理了一下.
windows 计划任务
计划任务 扩展
调度的时候 我们可能需要做一些额外的事情,比如 检查网络,写运行日志,动态设置[执行参数]
调度计划执行时间和频次
1.每隔几分钟/几小时/几天 运行一次
2.每周几 运行一次
3.每月多少号运行, 或者 月末最后一天运行
调度的执行类型
1. 一次性任务
比如验证一下执行工具 逻辑是否正确,运行一次之后, 就停.
2.永久性任务
比如 抓取博客园首页内容,每隔一段时间就要运行
列举在实际生产中的调度模型
例子1.:数据同步, 同步到别的业务库,别的业务,或者数据仓库
于是设定 每一小时运行一次
例子1.:数据同步,基本上只有周一到周五,早上8点到晚上10点 会产生数据, 晚上是休息时间,产生的数据可以第二天再同步
于是设定 每一小时运行一次, 并且同步时间窗口设定在 6:00-22:30 (这里为什么设置22:30 而不是 22点, 是有原因的,后面再讲)
例子2.:一周运行2次, 要考虑周一到周五 信息会比较密集, 周六周天相对数据比较稀松,
于是设定 每周3运行一次, 每周6 运行一次 ,配置了2个 调度.
例子3: 每月初就要查看xx信用分,数据量比较大,计算也需要时间
于是设定, 每月最后一天20:00:00 进行任务调度,(程序优化后,大概需要执行2个小时, 随着数据量的扩充, 5年的增量数据, 3小时内基本也能跑完)
例子4:调度工具本身也是一个定时任务,每隔一段时间执行一次
调度工具自己没法自启动,所以 配置在windows计划任务 里面, 每5分钟运行一次,如果前面的任务没有执行完,则不产生新的任务.
基于以上实际业务, 分析需求, 设定业务字段
单个调度
1. 任务执行的 有效日期和 过期日期 EffectivityTime 和 ExpirationTime , 开始时间可以写2000-01-01, 结束时间 2099-01-01
2. 频率类型 (FreequencyType) 例如 天 (Daily) /周 (Weekly) /月 (Monthly)
3. 频率间隔 (FreequencyInterval) ,如果设置 的是 Weekly 值是 1-7,表示周一到周日;Monthly 表示 月的第几天 比如1-31号,如果是月的最后一天, 设置为-1
4. 只执行一次的时间 (DailyTimeOnce) , time 类型, 'HH:mm:ss' ; DailyTimeOnce 和 DailyHourInterval,DailyMinuteInterval 这三个值是互斥关系
5. 每隔几个小时执行 DailyHourInterval
6 . 每隔几分钟执行 DailyMinuteInterval
7. 窗口执行时间 DailyTimeWindow ; null 是不指定, 其他值 要求5位时间 ,比如9点 写 09:00:00-10:00
8. 设定执行超时时间 Timeout, 单位 秒,
9. 设定如果执行出错,允许重试次数, Retry , 为0 表示 出错后不重试
10. 设定重试等待时间 Wait ,单位秒 ,建议设置为30-60秒之间
多个调度
调度和调度之间也会有关联关系,比如后面的 任务 必须等待 前面的 调度执行完(并且成功) 以后才执行, 任务调度之间是有 依赖的
11. 依赖项 WorkerDependancy: 格式用, 分隔 , 例如 Worker01,Work02
12. 并行调度优先级 Priority , 数字越大 优先级越低,从 0 到 999
其他通用调度项设置
13. 调度唯一标识 WorkerID
14. 调度名称,WorkerName 用哪种类型的调度, 比如 执行SSIS, 运行WebAPI
15. 调度分组 WorkerGroupID 同一个 WorkerGroupIdD 会被认为是一个整体, 也就是说 如果 WorkerGroup 有至少一个没有执行成功,那么下一个时间点就不会生成这个 WorkerGroup 的所有任务
16. 调度执行的唯一标识 DispatcherID , 在 调度配置中可以根据不同的调度策略配置不同的调度组.比如 性能差一点的机器 我就配置 20个 Worker 调度, 性能好的机器 就配置50个 Worker 等等.
17. 标记业务 名称,用的是那个业务模块 ApplicationName ,比如 "新浪微博爬虫程序"
18. 标记调度任务所有者 Owner , 多人协作时,谁负责的这个调度模块,出了问题找谁 , 比如 "张三"
本文来自博客园,作者:兴想事成,转载请注明原文链接:https://www.cnblogs.com/mjxxsc/articles/15253825.html