文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

面试官:怎样设计一个分布式任务调度平台?

2024-11-29 20:24

关注

大家好,我是君哥。

在工作中,批量任务调度的需求经常会遇到,比如下面的几个场景:

从开源框架来看,优秀的分布式任务调度框架并不少,比如 Quartz、Spring Batch、xxl-job、PowerJob 等。如果公司不使用开源框架,要自研一套,该如何设计呢?

今天就来聊一聊怎样设计一套分布式任务调度平台。

1.触发器

既然是任务调度,那触发器肯定是必不可少的。触发器就是控制任务什么时间开始执行,使用者可以定义好 Cron 表达式,到时间保证任务被触发。

除了定时触发外,也要设计通用的触发接口,方便地给外部系统提供触发入口。

在一些对账类的场景,可能多个系统联合对账,上游系统加工好后把账务文件送过来,触发本系统的批量任务进行对账。本系统对账完成后,要把对账结果异步通知给调用方。

2.调度器

调度器的主要作用是给待执行任务找到一台合适的机器,然后把它调度到这台集群上的待执行队列。

(1)调度策略

调度器的调度策略可以有几种:

在集群环境下,调度器对定时任务的作用是非常重要的,调度不好,很容易导致任务在不同机器上重复执行。

同时,调度器可以根据机器的资源情况进行任务调度,提高任务执行效率。

当然,也可能会有广播的场景,这时调度器需要把任务调度到所有的机器上执行。

还需要考虑的一个点就是任务优先级,优先级高的任务需要优先调度。

3.执行器

调度器把任务调度到某一个机器上后,就把任务交给了执行器。执行器可以定义一个线程池,接到任务后把任务丢到线程池中,等待被线程池调度。

执行器可以提供一个基类,任务类通过继承这个基类被调度平台识别。

4.任务链

任务链也是非常重要的概念,在任务调度平台上要支持任务链的定义,比如 task1->task2->task3 这样一条任务链,task1 执行完成后触发 task2,task2 执行完成后触发 task3。

任务链使用的业务场景很多。比如一个复杂度高、耗时很长的任务,可以拆分成多个子任务,这样如果有一个任务失败了,把异常问题解决后,从失败任务节点重新调起就可以。

实现任务链的方法有多种,这里提供两个思路供参考,一个是不定义任务链,给每个任务定义一个子任务,触发时只触发第一个任务,任务执行完成后执行子任务;第二个方法是定义一个任务链,任务链明确任务依赖关系。

5.熔断

批量任务一般用于处理数据量大的任务,比如给 10 万个客户发送短信通知。这会对本系统资源消耗较大,也可能会对下游系统造成压力。

如果没有任何防控手段,很可能会因为下游系统接口响应慢造成系统连锁反应。有了熔断能力,系统就可以及时发现问题并做出反应,对本系统和下游系统进行保护。

6.异常处理

异常处理的手段也是必要的。异常处理可以包含下面功能:

7.阻塞控制

对于单机执行的任务,遇到任务排队的情况很正常。可以设置阻塞策略,比如按照 FIFO 方式进行排队执行,或者不做排队,有正在执行的任务时直接丢弃。

8.服务注册/发现

前面说到调度器会把任务调度到其中一台机器执行,那为了方便地管理集群中的机器,服务注册和发现功能也是很必要的。

9.任务监控

好多跑批任务是在日终执行,比如凌晨。把任务加入公司的监控体系,如果任务失败,触发监控告警,可以让运维人员和研发人员第一时间感知到。

10.控制台

有了上面的讨论,控制台的作用就很重要的。可以包括:

11.总结

通过本文的讨论,我们设计一个任务调度平台,需要下面的功能,希望对你设计和理解任务调度平台有所帮助。

来源:君哥聊技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯