在互联网领域中,几乎所有企业需要调度系统,主要原因是企业需要处理大量的数据,并且这些数据需要在不同的系统之间进行传输和处理。一部分是为了满足业务的需要,例如BI决策分析、图表展示、机器学习、数据挖掘;一部分是帮助这些企业协调和管理整个数据处理流程,从而提高整个系统的效率和可靠性。
故在大数据领域,调度系统是非常重要的,因为它能够管理和协调整个数据处理流程,确保任务按照正确的顺序和时间完成,从而支撑上游服务及产品的稳定性,可以说调度系统是企业产品中不可或缺的一部分。
在早期的大数据处理中,任务调度通常是手动进行的,需要人工监控和管理整个处理流程。这种方式非常耗时、容易出错,限制了大数据处理的规模和效率。
随着大数据技术的不断发展,人们开始意识到自动化调度的重要性,并开发了一些工具来简化调度流程。其中比较有代表性的是Apache Oozie,它是一种基于XML的工作流引擎,能够自动分配任务和资源,协调整个大数据处理流程。Oozie的出现极大地提高了大数据处理的效率和可靠性,也为后来的任务调度系统提供了重要的参考。
随着大数据技术的不断发展,任务调度系统也不断升级和完善。比较有代表性的任务调度系统包括Apache Airflow、Apache Falcon、国内的DolphinScheduler等。这些任务调度系统都具有高效、可靠、可扩展等特点,能够满足不同规模和复杂度的大数据处理需求。
此外,随着云计算的兴起,越来越多的企业开始将大数据处理任务迁移到云端,云厂商也开始提供各种大数据处理服务。例如,亚马逊的AWS Batch、谷歌的Cloud Scheduler和微软的Azure Scheduler等,这些服务通常都包含了强大的任务调度系统,能够帮助企业轻松地进行大数据处理。
据我了解国内的互联网公司一半选择开源项目、一半选择自研调度系统来支撑业务,关于为何选择自研,一方面是出于定制化考虑,一方面是出于2B企业用来提高产品竞争力从而选择自研,例如我所任职的公司便是自研调度系统用来提高商业产品的竞争力;但无论哪种方式调度系统已然成为了大数据处理的核心组件之一,为企业提供了高效、可靠和可扩展的数据处理服务。
虽然市面上的调度系统有很多,但其核心的设计模式可以根据任务调度的粒度不同分为两种:
DAG粒度的调度是一种基于DAG任务依赖关系的调度方式,通常将任务组织成一个DAG工作流,通过定义工作流中任务的依赖关系,再通过广度或深度优先算法计算出任务的执行顺序,自动化地调度和执行。这种调度方式通常用于大规模数据处理流程中,例Spark的RDD任务调度,国内的DolphinScheduler便是基于这种设计思想实现。
在DAG粒度的调度中,任务的调度粒度是基于整个DAG图,即将整个DAG看作一个整体进行调度。这种调度方式可以最大程度地减少任务之间的依赖关系,提高整个系统的并行度和效率,如下图:

在DAG调度中,任务的调度粒度通常是整个DAG图,而不是单个节点或者任务,故其血缘关系分为两种:


首先,DAG调度系统具有更加静态的特点,DAG图中任务之间的依赖关系是固定的,所以调度粒度不够灵活;在DAG调度中,任务的调度粒度通常是整个DAG图,而不是单个节点或者任务,故以下两种场景无法支持:
DAG中某个任务触发另一个DAG,如下图:

DAG中某个任务触发另一个DAG中的任务并触发下游,如下图:

基于DAG的调度系统适用于许多不同的场景和应用。以下是一些常见的使用场景:
DAG调度系统核心通常是6张表:
总之,DAG调度虽然具有很多优点,但也存在一些缺点。在实际应用中,需要根据具体业务需求和场景选择最合适的调度方式和算法。
基于事件的调度是指以单个任务为基础进行调度,每个任务都独立执行,并且可以根据需要动态调整任务的执行顺序和优先级。这种调度模式的优点是可以灵活扩展至下游任务,根据任务的执行情况动态调整调度策略,提高任务的可扩展性。
基于事件调度的调度系统灵活性更高,可以根据具体需求对任务节点进行调度和管理,实现动态调整和优化,可以解决DAG调度中不支持的两种场景,如下图各个任务之间相互依赖形成以点到面的发散状执行,可以任意扩展和添加,如下图:

基于事件调度的调度系统常见于BI领域,如在BI产品中表的上下游依赖关系中,如下图:

按照上图需求,当A表数据发生变更后应该立即触发A1表和C表,从而保证A1、C表数据的准确性;如果我们使用DAG调度系统会出现三个DAG,如下:

在DAG调度系统中调度粒度是DAG,此时A表发生数据更改则只会触发DAG1,无法触发DAG3;
当然我们可以将C表加入到DAG1、DAG2中,如下图:

但这样设计会对其他DAG造成很强的侵入性,如果C表依赖10张表,则需要修改10张DAG;
而基于事件调度系统可以很好的支撑此场景,如下图:

A表执行结束后会根据下游依赖关系自动触发下游事件,依次执行保证了数据的实时性和准确性;
基于事件调度系统的核心一般是三张表:
基于事件调度虽然具有一些优点,但也存在一些不足之处,在选择调度系统时需要根据自己的业务需求和技术栈进行选择和权衡,以实现最优化的数据处理流程。
优势:
劣势:
优势:
劣势:
DAG调度系统和基于事件的调度系统各有优缺点。在实际应用中,需要根据作业的特点和需求综合考虑,选择合适的调度系统。如果作业具有固定的任务依赖关系,并且需要精确控制和管理,则DAG调度系统可能是更好的选择;如果作业具有动态变化和复杂的任务依赖关系,并且需要更加灵活的调度方式,则基于事件的调度系统可能更为合适。