• TaskSchedule-任务调度系统设计


    我们先思考下面几个业务场景的解决方案:

    • 财务系统每天生成前一天的报表,每月1号生成前一个月报表。
    • 每天早上六点将公司运营数据报表发送到经理或老板的邮箱。
    • 每个一段时间检测服务器、站点、服务、数据库等,查看运行及性能是否正常,若不正常邮件报警。

    为什么我们需要定时任务

          很多业务场景需要我们某一特定的时刻去做某件任务,定时任务解决的就是这种业务场景。一般来说,系统可以使用消息传递代替部分定时任务,两者有很多相似之处,可以相互替换场景。如,上面发货成功发短信通知客户的业务场景,我们可以在发货成功后发送MQ消息到队列,然后去消费mq消息,发送短信。

          但在某些场景下不能互换:

    • 时间驱动/事件驱动:内部系统一般可以通过时间来驱动,但涉及到外部系统,则只能使用时间驱动。如怕取外部网站价格,每小时爬一次
    • 批量处理/逐条处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理。如移动每个月结算我们的话费
    • 实时性/非实时性:消息中间件能够做到实时处理数据,但是有些情况下并不需要实时,比如:CRM系统客户评分。
    • 系统内部/系统解耦:定时任务调度一般是在系统内部,而消息中间件可用于两个系统间。

    任务调度系统设计图

    业务场景

    • 生成报表:这应该是最常见的定时任务了,每天凌晨生成报表,然后将报表(图表)邮件发送给相关领导,领导每天早上打开自己的邮箱就可以知道公司前一天的运营情况,帮助管理层尽快发现公司问题,提供决策依据。
    • 性能监控、心跳检测:服务器CPU消耗、服务接口运行情况、数据库性能监控,宕机或性能降低造成系统运行卡顿,及时报警。
    • 日志记录:将日志记录在Redis中,然后每隔五分钟批量从Redis中取数据,并将其存储在Sql Server中,并进行错误日志分析及相关的邮件通知。

    任务调度中心代码结构图

    任务调度中心程序结构:

    1. Sln.TaskSchedule.DispatchCenter为任务调度中心的代码实现,设计目的是将核心代码抽离出来,从而可以让任务调度中心可以轻松的寄宿在MvcApi或者WCF服务上,也可以寄宿在某个exe程序上。
    2. Sln.TaskSchedule.MvcApi  与 Sln.TaskSchedule.Service  是 任务调度中心的宿主,他为web程序或者exe程序提供服务接口。
    3. Sln.TaskSchedule.Web 任务调度系统的可视化Web程序

     总结

    读者可以参考我的代码结构自己开发一个任务调度中心的程序,我用的任务调度第三方插件是Quartz.Net,网上相关代码又很多,要学会炒出自己的风格。我的任务执行程序还没有做好,做好后会和大家分享一下设计思路。

  • 相关阅读:
    如何解决树莓派 SSH 待机一段时间后自动断开 bug All In One
    [转 js] 分析JsUnit
    c语言中函数声明和调用
    c语言中二维数组
    c语言中形参、变量、实参同名的问题
    python 中实现根据数据的不同列的不同条件同时筛选数据
    python 中输出指定序列的反向互补序列
    python 中根据给出的scafflod名称从fasta文件中提取指定的序列
    c语言中显示正整数逆转之后的值
    python 中实现将三元组数据转换为矩阵形式
  • 原文地址:https://www.cnblogs.com/yansg/p/11255786.html
Copyright © 2020-2023  润新知