AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

分布式任务调度平台的研究(上)

  • 2020-02-10
  • 本文字数:2624 字

    阅读完需:约 9 分钟

分布式任务调度平台的研究(上)

一、 分布式任务调度的背景

无论是互联网应用或者企业级应用,都充斥着大量的批处理任务。我们常常需要一些任务调度系统帮助我们解决问题。随着微服务化架构的逐步演进,单体架构逐渐演变为分布式、微服务架构。在此的背景下,很多原先的任务调度平台已经不能满足业务系统的需求。于是出现了一些基于分布式的任务调度平台。

1.1 分布式任务调度的演进

在实际业务开发过程中,很多时候我们无可避免的需要使用一些定时任务来解决问题。通常我们会有多种解决方案:使用 Crontab 或 SpringCron (当然这种情况可能机器很少而且任务简单又不是很多的情况下)。然而,当我们应用复杂度升高,定时任务数量增多且任务之间产生依赖关系时,Crontab 进行定时任务的管理配置,就会非常混乱,严重影响工作效率。这时候就会产生一系列问题:


  • 任务管理混乱,生命周期无法统一协调管理;

  • 任务之间如果存在依赖关系,难以编排;


随着互联网的发展,分布式服务架构势越来越流行。相应也需要一个分布式任务调度系统来管理分布式架构中的定时任务。

1.2 分布式任务调度架构

1559119848536069694.png


当垂直应用越来越多,应用之间交互也会越来越复杂,通常我们采用分布式或者微服务架构,将核心业务抽取出来,形成单独的服务。一个独立的微服务群体逐渐形成稳定的服务中心,使得业务应用能更快地响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架成为关键。同时,由于服务独立,一般能做到定时任务独立的情况,任务的更改对于整体系统的影响小之又小。一般我们会采用任务与调度分离的方式(如上图所示),任务的执行逻辑无需关注调度与编排,同时可以保证执行器和调度的高可用,易于开发和维护。

1.3 分布式任务调度优势

在分布式服务架构的基础上,由于独立业务的数量可能很多,此时如果定时任务单独在该服务中实现,很可能会出现难以管理的情况,且避免不了由于定时任务的更改而导致的业务重启。因此,一个独立的分布式任务调度系统是很必要的,可以用来全局统筹管理所有的定时任务。同时,将任务的配置单独抽离出来,作为该分布式任务调度系统的功能,就能做到定时任务的更改不影响任何业务,也不影响整个系统:


  • 通过调度与任务分离的方式进行管理,大大降低了开发和维护成本;

  • 分布式部署,保证了系统的高可用性,伸缩性,负载均衡,提高了容错性;

  • 可以通过控制台部署和管理定时任务,方便灵活高效;

  • 任务都可以持久化到数据库,避免了宕机和数据丢失带来的隐患,同时有完善的任务失败重做机制和详细的任务跟踪及告警策略。

二 、分布式任务调度技术选型

2.1 分布式任务调度考虑因素

1559119877400089347.png


  • 任务编排:多个业务之间的定时任务存在流程次序

  • 任务分片:对于一个大型任务,需要分片并行执行

  • 跨平台:除了使用 Java 技术栈(SpringBoot、Spring 等)的项目之外,还有使用其他语言的应用

  • 无侵入:业务不希望与调度高耦合,只关注业务的执行逻辑

  • 故障转移:任务执行过程中遇到问题有补偿措施,减少人工介入

  • 高可用:调度系统自身必须保证高可用

  • 实时监控:实时获取任务的执行状态

  • 可视化:任务调度的操作提供可视化页面,方便使用

  • 动态编辑:业务的任务时钟参数可能变动,不希望停机部署

2.2 SIA-TASK 与其它分布式任务调度技术比较

SIA 是宜信公司基础开发平台 Simple is Awesome 的简称,SIA-TASK(微服务任务调度平台)是其中的一项重要产品,SIA-TASK 契合当前微服务架构模式,具有跨平台,可编排,高可用,无侵入,一致性,异步并行,动态扩展,实时监控等特点。


开源地址:https://github.com/siaorg/sia-task


下面我们先对比市场上主流的开源分布式任务调度框架,分析其优缺点,然后再说我们的技术选型。


  • Quartz: Quartz 是 OpenSymphony 开源组织在任务调度领域的一个开源项目,完全基于 Java 实现。该项目于 2009 年被 Terracotta 收购,目前是 Terracotta 旗下的一个项目。相比于 JDK 或 Spring 提供的定时任务,Quartz 对单个任务的控制基本做到了极致,以其强大功能和应用灵活性,在企业应用中发挥了巨大的作用。然而 Quartz 并不支持任务的编排(任务之间有依赖),而且不支持任务分片。

  • TBSchedule: TBSchedule 是一个支持分布式的调度框架,能让一种批量任务或者不断变化的任务,被动态的分配到多个主机的 JVM 中,不同的线程组中并行执行。基于 ZooKeeper 的纯 Java 实现,由 Alibaba 开源。TBSchedule 侧重于任务的分发,支持任务分片,但是没有任务编排,也不是跨平台的。

  • Elastic-Job: Elastic-Job 是当当开源的一个分布式调度解决方案,由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成。Elastic-Job 支持任务分片(作业分片一致性),但是没有任务编排,也不是跨平台的。

  • Saturn: Saturn 是唯品会开源的分布式,高可用的调度服务。Saturn 在 Elastic-Job 做二次开发,支持监控,任务分片,跨平台,但是没有任务编排。

  • Antares: Antares 是基于 Quartz 的分布式调度,支持分片,支持树形任务依赖,但是不是跨平台的。

  • Uncode-Schedule: Uncode-Schedule 是基于 Zookeeper 的分布式任务调度组件。支持所有任务在集群中不重复,不遗漏的执行。支持动态添加和删除任务。但是不支持任务分片,也没有任务编排,还不是跨平台的。

  • XXL-JOB: XXL-JOB 是一个轻量级分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。XXL-JOB 支持分片,简单支持任务依赖,支持子任务依赖,不是跨平台的。


下面我们简单对比下 SIA-TASK 与这些任务调度框架:


            | 任务编排  | 任务分片 | 跨平台  | 高可用 | 故障转移 | 实时监控 
复制代码


--------------- | ----- | ---- | ---- | — | ---- | -----


SIA-TASK | √ | √ | √ | √ | √ | √


Quartz | × | × | .NET | √ | × | API 监控


TBSchedule | × | √ | × | √ | √ | √


Elastic-Job | × | √ | × | √ | √ | √


Saturn | × | √ | √ | √ | √ | √


Antares | √ | √ | × | √ | √ | √


Uncode-Schedule | × | × | × | √ | √ | √


XXL-JOB | 子任务依赖 | √ | × | √ | √ | √


可以发现,这些调度框架基本上都支持高可用、故障转移与实时监控等功能,但是对于任务编排、任务分片与跨平台等功能的支持各有侧重点。这里 SIA-TASK 将全面支持这些功能。


本文转载自宜信技术学院网站。


原文链接:http://college.creditease.cn/detail/253


2020-02-10 21:037954

评论 1 条评论

发布
用户头像
推荐一个强大的分布式任务调度与计算框架PowerJob,支持CRON、API、固定频率、固定延迟等多种调度策略,支持MapReduce分布式计算,支持工作流任务编排(DAG),功能强大,文档齐全,接入简单!


项目地址:https://github.com/KFCFans/PowerJob
2020-11-08 10:24
回复
没有更多了
发现更多内容

还在粗放式管理需求,频繁返工?华为云六招破解研发困局!

平平无奇爱好科技

华为云低代码AstroZero技巧教学1:表格的超链接赋能

平平无奇爱好科技

西部数据正式推出获PS5™官方授权的8TB超大容量SSD

极客天地

mcgs笔记 设备窗口 添加父设备与子设备

万里无云万里天

自动化 HMI mcgs

mcgs笔记 工具箱 常用符号展示

万里无云万里天

自动化 HMI mcgs

mcgs笔记 构件 查看帮助文档

万里无云万里天

自动化 HMI mcgs

说说停止线程池的执行流程?

伤感汤姆布利柏

华为云CodeArts API:API管理一体化平台 7月新特性上线啦!

平平无奇爱好科技

mcgs笔记 工具箱 构件展示

万里无云万里天

自动化 HMI mcgs

将美术馆装进手机,艺术融入生活。《Arrrt》入选华为应用市场“匠心奖”

最新动态

案例 | 澳鹏自动驾驶标注方案入选虎嗅智库行业报告

澳鹏Appen

自动驾驶 数据标注 行业报告

百度赵世奇:文心智能体平台跑通商业闭环,已有超2万智能体开始帮开发者赚钱

极客天地

首批最高级!华为云ROMA Connect获信通院全栈企业级集成平台优秀级

平平无奇爱好科技

新特性系列 I 华为云全栈可观测平台(APM)8月上线新功能等你来解锁!

平平无奇爱好科技

新特性系列 I 华为云软件开发生产线(CodeArts)8月上线新功能等你来解锁!

平平无奇爱好科技

mcgs笔记 构成工程的五个部分

万里无云万里天

自动化 HMI mcgs

技术揭秘 DWS 实时数仓解决方案,如何深度融合 Flink 简化数据链路

华为云开发者联盟

数据库 数据仓库

“码”上中秋,共话精彩——豆包MarsCode 放“码”过来!

Trae

人工智能 AI 征文活动

华为云空间亮相网络安全周:创新技术保障数据与设备安全

最新动态

mcgs笔记 工具箱 元件库(公共图库)展示(中)

万里无云万里天

自动化 HMI mcgs

mcgs笔记 工具箱 元件库(四种风格)展示

万里无云万里天

自动化 HMI mcgs

【技术分享】Amazon EKS-不同的服务根据路径实现ALB的跳转

伊克罗德信息科技

Amazon amazoneks

AI最佳实践全栈式从0到1开发个人博客系统

Trae

人工智能 程序员 AI 博客 博客开发

开发者空间实践指导:基于3大PaaS主流服务轻松实现文字转换语音

平平无奇爱好科技

mcgs笔记 工具箱 元件库(公共图库)展示(上)

万里无云万里天

自动化 HMI mcgs

Kafka+PostgreSql,构建一个总线服务

为自己带盐

postgresql kafka 总线服务

华为云低代码AstroZero技巧教学2:轮播组件的魅力 玩转视觉营销

平平无奇爱好科技

mcgs笔记 设备窗口 查看子设备的参数配置说明

万里无云万里天

自动化 HMI mcgs

分布式任务调度平台的研究(上)_语言 & 开发_Geek_811f28_InfoQ精选文章