调度系统揭秘(上):调度系统设计思想

前言

在互联网领域中,几乎所有企业需要调度系统,主要原因是企业需要处理大量的数据,并且这些数据需要在不同的系统之间进行传输和处理。一部分是为了满足业务的需要,例如BI决策分析、图表展示、机器学习、数据挖掘;一部分是帮助这些企业协调和管理整个数据处理流程,从而提高整个系统的效率和可靠性。

故在大数据领域,调度系统是非常重要的,因为它能够管理和协调整个数据处理流程,确保任务按照正确的顺序和时间完成,从而支撑上游服务及产品的稳定性,可以说调度系统是企业产品中不可或缺的一部分。

一、调度系统发展史

在早期的大数据处理中,任务调度通常是手动进行的,需要人工监控和管理整个处理流程。这种方式非常耗时、容易出错,限制了大数据处理的规模和效率。

随着大数据技术的不断发展,人们开始意识到自动化调度的重要性,并开发了一些工具来简化调度流程。其中比较有代表性的是Apache Oozie,它是一种基于XML的工作流引擎,能够自动分配任务和资源,协调整个大数据处理流程。Oozie的出现极大地提高了大数据处理的效率和可靠性,也为后来的任务调度系统提供了重要的参考。

随着大数据技术的不断发展,任务调度系统也不断升级和完善。比较有代表性的任务调度系统包括Apache Airflow、Apache Falcon、国内的DolphinScheduler等。这些任务调度系统都具有高效、可靠、可扩展等特点,能够满足不同规模和复杂度的大数据处理需求。

此外,随着云计算的兴起,越来越多的企业开始将大数据处理任务迁移到云端,云厂商也开始提供各种大数据处理服务。例如,亚马逊的AWS Batch、谷歌的Cloud Scheduler和微软的Azure Scheduler等,这些服务通常都包含了强大的任务调度系统,能够帮助企业轻松地进行大数据处理。

据我了解国内的互联网公司一半选择开源项目、一半选择自研调度系统来支撑业务,关于为何选择自研,一方面是出于定制化考虑,一方面是出于2B企业用来提高产品竞争力从而选择自研,例如我所任职的公司便是自研调度系统用来提高商业产品的竞争力;但无论哪种方式调度系统已然成为了大数据处理的核心组件之一,为企业提供了高效、可靠和可扩展的数据处理服务。

二、调度系统常见分类

虽然市面上的调度系统有很多,但其核心的设计模式可以根据任务调度的粒度不同分为两种:

  1. DAG粒度调度
  2. 事件粒度调度

三、DAG调度

DAG粒度的调度是一种基于DAG任务依赖关系的调度方式,通常将任务组织成一个DAG工作流,通过定义工作流中任务的依赖关系,再通过广度或深度优先算法计算出任务的执行顺序,自动化地调度和执行。这种调度方式通常用于大规模数据处理流程中,例Spark的RDD任务调度,国内的DolphinScheduler便是基于这种设计思想实现。

在DAG粒度的调度中,任务的调度粒度是基于整个DAG图,即将整个DAG看作一个整体进行调度。这种调度方式可以最大程度地减少任务之间的依赖关系,提高整个系统的并行度和效率,如下图:
在这里插入图片描述

3.1、特点

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

  1. DAG任务依赖
  2. DAG依赖

3.1.1、DAG任务依赖:

在这里插入图片描述

3.1.2、DAG依赖:

在这里插入图片描述

3.2、不足之处

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

  1. 任务触发DAG
  2. 任务触发DAG中的任务

3.2.1、任务触发DAG

DAG中某个任务触发另一个DAG,如下图:
在这里插入图片描述

3.2.2、任务触发DAG中的任务

DAG中某个任务触发另一个DAG中的任务并触发下游,如下图:
在这里插入图片描述

3.3、适用场景

基于DAG的调度系统适用于许多不同的场景和应用。以下是一些常见的使用场景:

  1. 数据处理:基于工作流的调度系统适用于大规模数据处理任务,例如ETL、数据仓库、数据分析等。这些任务通常需要对大量的数据进行处理,而且任务之间存在复杂的依赖关系,需要使用工作流来管理和调度任务。
  2. 机器学习:基于工作流的调度系统也适用于机器学习任务,例如深度学习、神经网络等。这些任务通常需要对大量数据进行训练和优化,而且任务之间存在复杂的依赖关系,需要使用工作流来管理和调度任务。
  3. 流程管理:基于工作流的调度系统也适用于流程管理任务,例如工作流程、业务流程等。这些任务通常需要对多个步骤进行管理和调度,而且任务之间存在复杂的依赖关系,需要使用工作流来管理和调度任务。
  4. 业务应用:基于工作流的调度系统也适用于许多业务应用场景,例如定时任务、报表生成、邮件发送等。这些任务通常需要按照一定的周期或者条件进行调度和执行,需要使用工作流来管理和调度任务。

3.4、数据库实现

DAG调度系统核心通常是6张表:

  1. DAG:DAG表
  2. DAG_RALANTION:DAG依赖关系表
  3. DAG_INSTANCE:DAG实例表
  4. TASK:任务表
  5. TASK_RELANTION:任务依赖关系表
  6. TASK_INSTANCE:任务实例表

3.5、总结

总之,DAG调度虽然具有很多优点,但也存在一些缺点。在实际应用中,需要根据具体业务需求和场景选择最合适的调度方式和算法。

四、事件调度

基于事件的调度是指以单个任务为基础进行调度,每个任务都独立执行,并且可以根据需要动态调整任务的执行顺序和优先级。这种调度模式的优点是可以灵活扩展至下游任务,根据任务的执行情况动态调整调度策略,提高任务的可扩展性。

4.1、特点

基于事件调度的调度系统灵活性更高,可以根据具体需求对任务节点进行调度和管理,实现动态调整和优化,可以解决DAG调度中不支持的两种场景,如下图各个任务之间相互依赖形成以点到面的发散状执行,可以任意扩展和添加,如下图:
在这里插入图片描述

4.2、适用场景

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

  1. A,B,C系列总共8张表都是数仓中的物理表
  2. A表存在100条数据,A1表根据A表进行数据过滤生成A1表,A2表又根据A1表进行数据过滤生成A2表
  3. B系列以此类推
  4. C表则是根据A、B两种表Join生成,同时C1表根据C表数据过滤生成C1表。

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

A表执行结束后会根据下游依赖关系自动触发下游事件,依次执行保证了数据的实时性和准确性;

4.3、不足之处

  1. 处理复杂依赖关系时的效率问题:当任务之间存在复杂的依赖关系时,基于事件的调度系统可能会导致执行效率降低。
  2. 可重现性差:由于任务之间的执行顺序和优先级是动态调整的,因此在两次执行同一个作业时可能会得到不同的结果。
  3. 资源管理困难:由于每个任务都是独立的,需要单独调度和执行,可能会占用大量的计算资源,从而影响其他作业的正常执行。

4.4、数据库实现

基于事件调度系统的核心一般是三张表:

  1. TASK:任务表
  2. TASK_RELATION:任务依赖关系表
  3. TASK_INSTANCE:任务实例表

4.5、总结

基于事件调度虽然具有一些优点,但也存在一些不足之处,在选择调度系统时需要根据自己的业务需求和技术栈进行选择和权衡,以实现最优化的数据处理流程。

五、各自优劣

DAG调度系统的优劣

优势

  1. 明确的任务依赖关系:DAG调度系统通过将任务组织成有向无环图,使任务之间的依赖关系更加直观和明确。
  2. 可重现的执行结果:由于任务按照固定顺序执行,DAG调度系统能够保证执行结果的一致性和可重现性。
  3. 可控的作业调度:DAG调度系统能够更好地管理作业调度,提高作业的可控性和稳定性。

劣势

  1. 缺乏灵活性:DAG图中任务之间的依赖关系是固定的,执行过程中无法进行动态调整。
  2. 静态的特点:DAG调度系统不太适合处理动态变化和复杂的依赖关系。
  3. 限制可扩展性:当需要增加新任务时,可能需要重新设计整个DAG图,从而影响整个作业的执行效率。

基于事件调度系统的优劣

优势

  1. 灵活的任务调度:在基于事件的调度系统中,每个任务都是独立的,可以根据需要动态调整任务的执行顺序和优先级。
  2. 动态特性:基于事件的调度系统更适合处理动态变化和复杂的依赖关系,能够灵活地处理新任务和依赖关系。
  3. 较为简单:基于事件的调度系统较为直接和简单,不需要复杂的图算法计算。

劣势

  1. 处理复杂依赖关系时的效率问题:当任务之间存在复杂依赖关系时,基于事件的调度系统可能导致执行效率降低。
  2. 可重现性差:由于任务的执行顺序和优先级是动态调整的,两次执行同一个作业时可能会得到不同的结果。
  3. 资源管理困难:每个任务都是独立的,需要单独调度和执行,可能占用大量计算资源,影响其他作业的正常执行。

综述

DAG调度系统和基于事件的调度系统各有优缺点。在实际应用中,需要根据作业的特点和需求综合考虑,选择合适的调度系统。如果作业具有固定的任务依赖关系,并且需要精确控制和管理,则DAG调度系统可能是更好的选择;如果作业具有动态变化和复杂的任务依赖关系,并且需要更加灵活的调度方式,则基于事件的调度系统可能更为合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26688.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端项目打包部署

打包 vue-cli脚手架的前端项目,点击npm脚本中的第二条编译命令,即可将项目编译,生成一个dist的文件夹,里面存放的就是编译好的前端项目文件,没有脚手架就在终端敲击npm run build命令编译前端项目 部署 Nginx 介绍:…

linux配置用户

一,安装sudo与确保在管理员用户下 apt update apt install sudo -y 切换用户:密码不会显示,一个个输入然后回车。//图中是zfxt-->Stable用户切换 su root //root为用户名 以其他用户执行命令: su root ping baidu.com //su…

人工智能--制造业和农业

欢迎来到 Papicatch的博客 文章目录 🍉人工智能在制造业中的应用 🍈 应用场景及便利 🍍生产线自动化 🍍质量控制 🍍预测性维护 🍍供应链优化 🍈 技术实现及核心 🍍机器学习和…

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】感知器

感知器是一种非常早期的线性分类模型,作为一种简单的神经网络模型被提出。感知器是一种模拟生物神经元行为的机器,有与生物神经元相对应的部件,如权重(突触)、偏置(阈值)及激活函数(…

CobaltStrike权限传递MSF

一、测试环境 操作系统: 1.VMware17 2.kali 6.1.0-kali5-amd64 3.Win10x64 软件: 1.cs4.0 2.metasploit v6.3.4-dev 二、测试思路 1.cs是一款渗透测试工具,但没有漏洞利用的模块,我们可以在拿到目标主机的权限后,将…

高速直线导轨驱动与控制,精准稳定的运动核心元件

直线导轨在工业生产中,精度和稳定性是至关重要的。而在各种机械设备中,高精度直线导轨是提高设备运动控制精度和平稳性的核心部件,当我们考虑高速运动时,直线导轨的精度和稳定性是非常重要的因素。 直线导轨系统中如何确保高速运动…

怎么更快捷的修改图片大小?压缩图片jpg、png、gif的快捷方法

jpg作为最常用的一种图片格式,在遇到图片太大问题时,该如何操作能够快速在压缩图片jpg的大小呢?图片太大无法上传时目前常见的一个使用问题,只有将图片处理到合适的大小才可以正常在平台上传使用,一般情况下想要快速解…

LLM大模型开发的一般流程

何谓大模型开发? 将开发以大语言模型为功能核心、通过大语言模型的强大理解能力和生成能力、结合特殊的数据或业务逻辑来提供独特功能的应用称为大模型开发。 主要功能点: 调用工具prompt engineering数据工程业务逻辑拆分 一般开发流程:…

Perl语言入门学习

引言 Perl是一种功能强大的编程语言,广泛用于文本处理、系统管理和Web开发。它以其灵活性和强大的正则表达式处理能力著称。本篇博客将介绍Perl的基础知识,并通过多个例子帮助初学者快速上手。 1. 安装Perl 在开始学习Perl之前,您需要确保…

Stable diffusion 3 正式开源

6月12日晚,著名开源大模型平台Stability AI正式开源了,文生图片模型Stable Diffusion 3 Medium(以下简称“SD3-M”)权重。 SD3-M有20亿参数,平均生成图片时间在2—10秒左右推理效率非常高,同时对硬件的需求…

贪心+构造,CF1153 C. Serval and Parenthesis Sequence

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 1153C - Codeforces 二、解题报告 1、思路分析 对于括号匹配问题我们经典做法是左括号当成1,右括号当成-1 那么只要任意前缀非负且最终总和为0那么该括号序列就是合法 对于本题&…

计算机网络 —— 运输层(TCP三次握手)

计算机网络 —— 运输层(TCP三次握手) 三次握手第一次握手第二次握手第三次握手两次握手行不行? 我们今天来学习TCP的三次握手: 三次握手 TCP三次握手是TCP协议中建立连接的过程,旨在确保双方准备好进行可靠的通信。…

从零开始的<vue2项目脚手架>搭建:vite+vue2+eslint

前言 为了写 demo 或者研究某些问题,我经常需要新建空项目。每次搭建项目都要从头配置,很麻烦。所以我决定自己搭建一个项目初始化的脚手架(取名为 lily-cli)。 脚手架(scaffolding):创建项目时…

本地GPT-window平台 搭建ChatGLM3-6B

一 ChatGLM-6B 介绍 ChatGLM-6B 是一个开源的、支持中英双语的对话语言模型,新一代开源模型 ChatGLM3-6B 已发布,拥有10B以下最强的基础模型,支持工具调用(Function Call)、代码执行(Code Interpreter&…

webshell获取总结(cms获取方法、非cms获取方法、中间件拿Webshell方法)

目录 前期准备: 1、cookices靶场网站搭建: 2、dedecms靶场环境搭建: 获取Webshell方法总结: 一、CMS获取Webshell方法 二、非CMS获取Webshell方法 1、数据库备份获取Webshell 例如: 2、抓包上传获取Webshell 3、…

新注册与新核准有什么区别?在哪可以找到新注册新核准的企业名单?

新注册:指的是公司刚刚完成工商注册登记,成为法律意义的经营实体。 新核准:指的是企业通过证券监管机构的审核,获得公开发行股票或债券的资格。 注册主要关注企业的基本资质和合规性,而核准是已经注册的公司进行财务…

49.Python-web框架-Django解决多语言redirect时把post改为get的问题

目录 1.背景 2.思路 3.寻找 Find and Replace 4.再次运行程序,POST来了 5.小结 1.背景 昨天在练习一个Django功能时,把form的method设置为POST,但是实际提交时,一直是GET方法。最后发现这是与多语言相关,django前面…

FRP 内网穿透 | 实现远程访问与安全管理

唠唠闲话 内网穿透简介 在互联网上,两个不同主机进行通信需要知道对方的 IP 地址。由于世界人口和设备众多,IPv4 资源相对紧缺,因此绝大部分情况下是通过路由器或交换机转换公网 IP 后才上网。 位于路由器或交换机后的设备通常是内网设备&…

C#操作MySQL从入门到精通(22)——创建表与操纵表

前言 我们新建数据库以后,最需要做的就是创建表,对数据库的操作绝大多数情况下都是都对表的操作,本文就是讲解如何创建表以及修改表中的列,修改表名等操作。由于创建表的方法基本上有两种,一种是使用带有界面的工具比如Navicate来创建表,另一种是使用sql语句来创建表,实…

SAP 价格金额信息控制

1)migo / mb51/mb51/mb59 关于价格和金额的显示,需要权限控制,当权限对象F_BKPF_BUK,检查对应【公司代码】 和 ACTVT有03’的权限,如果没有03的权限,对应行的价格和金额显示为空 关于价格和金额的显示,需要权限控制&a…