写点什么

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

  • 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:038038

评论 1 条评论

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


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

什么是hpaPaaS平台?低代码和hpaPaaS是什么关系?

优秀

低代码

阿里云架构师马继雨:云超算解决方案全面助力生命科学行业普惠增效

阿里云弹性计算

高性能计算 生命科学 EHPC

长安链研究笔记-证书生成工具

长安链

一款代替Typora的软件---MarkText

IT蜗壳-Tango

7月月更

聊聊 API 管理-开源版 Yapi 到 SaaS 版 Apifox

Liam

3DCAT投屏功能升级,助力企业营销与培训

3DCAT实时渲染

虚拟仿真 实时云渲染 3DCAT 企业营销 实时渲染云

Flutter 实现小姐姐渐现动画效果

岛上码农

flutter ios 前端 安卓开发 7月月更

小程序遇上Flutter 3.0

Geek_99967b

flutter 小程序

避坑:@Around与@Transactional混用导致事务不回滚

Paul

Spring Boot 2 事务失效 spring aop Java’

云原生(三) | Docker篇之轻松学会 Docker命令

Lansonli

Docker 云原生 7月月更

6. 对象存储

MASA技术团队

C# .net 对象存储 框架 Framework

【刷题记录】8. 字符串转换整数 (atoi)

WangNing

7月月更

mac 本地hive2 安装

飞哥

大数据 hadoop hive

大数据15周作业

Asha

瑞云与宜宾职院开展校企合作,同深圳VR联合会共建元宇宙产业学院

3DCAT实时渲染

职业教育 虚拟现实 虚拟仿真 元宇宙

一位 sealer maintainer 的心路历程

阿里巴巴云原生

阿里云 开源 云原生 sealer

使用 doscify 将文章写成文档一般丝滑

宁在春

GitHub Pages docsify 7月月更

云原生(四) | Docker篇之网络和存储原理

Lansonli

Docker 云原生

「阿里云 RocketMQ 系列公开课」重磅来袭!

阿里巴巴云原生

Apache 阿里云 RocketMQ 云原生 直播

React Table 表格组件使用教程 排序、分页、搜索过滤筛选功能实战开发

蒋川

排序 React 表格 组件库

编译器优化那些事儿(4):归纳变量

openEuler

openEuler 毕昇 JDK 开源操作系统 编译器 加速器 编程语言

mac 本地安装spark

飞哥

大数据 spark 数据仓库

hive on spark 和 spark on hive

飞哥

大数据 spark hive

深度揭秘阿里云函数计算异步任务能力

阿里巴巴云原生

阿里云 Serverless 云原生 异步 函数计算

数据库系统设计:分区

华为云开发者联盟

数据库 系统设计 开发 分区

机器学习-西瓜书小记

AIWeker

机器学习 7月月更

基于ResNet50实现宫颈细胞病变分类

逝缘~

分类神经网络 7月月更

普通二本院校如何从所谓的从寒冬破冰?

KEY.L

7月月更

WebRTC 音频抗弱网技术(下)

融云 RongCloud

设计稳定的微服务系统时不得不考虑的场景

阿里巴巴云原生

阿里云 微服务 云原生 OpenSergo

几种跨平台方案的对比

Geek_99967b

小程序 跨平台

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