数据调度平台系统二大种类及其实现方法与流程

什么是调度系统

调度系统,更确切地说,作业调度系统(Job Scheduler)或者说工作流调度系统(workflow Scheduler)是任何一个稍微有点规模,不是简单玩玩的大数据开发平台都必不可少的重要组成部分。

除了Crontab,Quartz这类偏单机的定时调度程序/库。开源的分布式作业调度系统也有很多,比较知名的比如:oozie,azkaban,chronos,zeus等等,此外,还有包括阿里的TBSchedule,SchedulerX,腾讯的Lhotse以及我司历尽十年磨砺的TASKCTL

作业系统的两大种类

现在市面上的调度系统根据功能性可以分为两类定时类作业调度系统&DAG工作流类作业调度系统这两类系统的架构和功能实现通常存在很大的差异,下面就来跟大家普及一下这两种作业系统的不同之处;

定时类作业系统

定时类系统的方向,重点定位于大量并发的任务分片执行场景;

在实际应用场景中,通常平时维护工作需要定时执行的业务逻辑相对离散无序,仅仅存在一定的简单关联。

例如:

  • 需要定时批量清理一批机器的磁盘空间,
  • 需要定时生成一批商品清单,
  • 需要定时批量对一批数据建索引,
  • 需要定时对一批用户发送推送通知等等。

核心目标基本两点:

1.作业分片逻辑支持:将一个大的任务拆分成多个小任务分配到不同的服务器上执行, 难点在于要做到不漏,不重,保证负载平衡,节点崩溃时自动进行任务迁移等

2.高可用精确定时触发:由于平时经常涉及到实际业务流程的及时性和准确性,所以通常需要保证任务触发的强实时和可靠性

所以"负载均衡,弹性扩容",“状态同步”和“失效转移”通常是这类调度系统在架构设计时重点考虑的特性

DAG工作流类作业调度系统

主要定位于有序作业的调度依赖关系的正确处理,分片执行的逻辑通常不是系统关注的粒度,如果某些作业真的关注分片逻辑,通常交给后端集群(比如MR任务自带分片能力)或者具体类型的任务执行后端去实现。

DAG工作流类调度系统所服务的通常是作业繁多,作业之间的流程依赖比较复杂的场景;

如:大数据开发平台的离线数仓报表处理业务,从数据采集,清洗,到各个层级的报表的汇总运算,到最后数据导出到外部业务系统,一个完整的业务流程,可能涉及到成百上千个相互交叉依赖关联的作业。

所以DAG工作流类调度系统关注的重点,通常会包括:

  • 足够丰富灵活的依赖触发机制(如:时间触发任务,依赖触发任务,混合触发任务)
  • 作业的计划,变更和执行流水的管理和同步
  • 任务的优先级管理,业务隔离,权限管理等
  • 各种特殊流程的处理(如:暂停任务,重刷历史数据,人工标注失败/成功,临时任务和周期任务的协同等)
  • 完备的监控报警通知机制

小结:这两类系统的定位目标,并不是绝对冲突矛盾的,并且从目前定时类调度系统的发展来看,也需要处理一些复杂的作业间强依赖关系了,比如 "微批(少量DAG批量作业处理)" 概念的提出。只不过,要同时圆满的支持这两大类需求,从实现的角度来说是很困难的,因为侧重点的不同,在架构上多少会对某些方面做些取舍,当前这两类系统都没有能够做到完美的两者兼顾。

为什么需要调度系统

我们都知道大数据的计算、分析和处理,一般由多个任务单元组成(Hive、Sparksql、Spark、Shell等),每个任务单元完成特定的数据处理逻辑。

多个任务单元之间往往有着强依赖关系,上游任务执行并成功,下游任务才可以执行。比如上游任务结束后拿到 A 结果,下游任务需结合 A 结果才能产出 B 结果,因此下游任务的开始一定是在上游任务成功运行拿到结果之后才可以开始。

而为了保证数据处理结果的准确性,就必须要求这些任务按照上下游依赖关系有序、高效的执行。一个较为基础的处理方式是,预估出每个任务处理所需时间,根据先后顺序,计算出每个任务的执行的起止时间,通过定时跑任务的方式,让整个系统保持稳定的运行。

一个完整的数据分析任务最少执行一次,在数据量较少,依赖关系较为简单的低频数据处理过程中,这种调度方式完全可以满足需求。

然而在企业级场景中,更多的是需要每天执行,如果任务数量较多,在任务启动的时间计算上就将耗费大量时间,另外如果出现上游任务执行时长超出原定预计时间或者运行异常的问题,上述的处理方式将完全无法应对,也会对人力物力造成重复损耗,因此,对于企业数据开发过程来说,一个完整且高效的工作流调度系统将起到至关重要的作用。

写在最后

TASKCTL目前是暂时唯一提出 "无序定时和有序DAG作业流" 完整概念的调度产品。既可以在定时中处理 "微批" 的控制,也能够在DAG作业流中处理 "定时" 的控制。

例如:

  • 在大数据分布式(分片)计算中,对数据进行实时ETL跑批处理,
  • 在ETL作业跑批中,对某个作业或一段分支进行时间窗口内循环定时处理

了解产品信息可以参读:

随着大数据应用需求的不断膨胀,数据处理的复杂度和实时性要求越来越高。TASKCTL作为国内自主研发的专业调度产品,为企业进入大数据2.0时代做好提前布局。

对啦,我们的公众号“敏捷调度taskctl”(ID:gh_79ababc7910b)长期更新互联网最新资讯、行业内职场趣闻、以及有趣且实用性较高的编程插件和开发框架知识分享之类的,

如果你开心的话可以关注一下下呢!期待(๑˙ー˙๑)

你可能感兴趣的:(运维,linux,负载均衡,数据挖掘)