写点什么

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

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

评论 1 条评论

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


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

大公司运维监控怎么做?从哪些方面考虑?

行云管家

云计算 运维 运维监控 运维审计 数据监控

读了这篇SpringBoot底层原理让我在阿里成功涨薪40%,感谢

Java 编程 面试 涨薪 阿里

想要入职阿里P6?最少啃完这本500页Java并发多线程源码笔记

Java 编程 面试 多线程 阿里

App 不想被“点名”,mPaaS 隐私合规检测为开发者护航数字生态建设

蚂蚁集团移动开发平台 mPaaS

移动开发 mPaaS 监管合规 隐私安全

开源应用中心|动手自建一个超高度自由的个人知识库,原来这么容易!

开源

百度智能云开物工业互联网平台解决方案亮相2021服贸会成果发布会

百度大脑

人工智能 服贸会

亚信科技AntDB数据库国产化进程加速,计费上云再下一城

亚信AntDB数据库

实践案例 9月日更

Chrome前端调试技巧分享

华为云数据库小助手

大前端 调试 GaussDB 华为云数据库

前端技术概览

数据库 大数据 时序数据库 tsdb 数据智能

☕【Java技术指南】「并发编程专题」Fork/Join框架基本使用和原理探究(基础篇)

码界西柚

Java forkjoin forkjoinpool 9月日更

数据脱敏是什么意思?有什么好处?

行云管家

数据库 数据安全 数据脱敏 数据库安全

被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?

华为云开发者联盟

TCP 网络 报文 挥手 FIN

阿里官方保姆级Java技术图谱发布!够学到春节了,赶紧收藏!

Java 面试 阿里 大厂 金九银十

阿里后端优化这么恐怖?看完这20W字Java性能实战经验手册,最少P7

Java 阿里巴巴 面试 性能调优 金九银十

交易所刷量机器人定制开发案例(源码搭建)

量化系统19942438797

交易所 做市机器人 自动刷量机器人

联想新IT引擎引领智能化变革,助力“中国力量”更加强大

科技范儿

C语言中动态内存是如何分配的?

华为云开发者联盟

数组 内存 动态内存 内存分配 C语音

会员业务基于Cloud KMS的数据安全应用

爱奇艺技术产品团队

数据安全法 Cloud KMS

让 Serverless 应用开发更简单,Serverless Devs 2.0 全新发布

Serverless Devs

开源 Serverless

首场“说透数字化转型专题讲座”将于 9 月 15 日在天津举办

InfoQ 天津

iOS 屏幕旋转的实践解析

ZEGO即构

ios 音视频 屏幕旋转

Tapdata Real Time DaaS 技术详解 PART I :实时数据同步

tapdata

一周信创舆情观察(8.30~9.5)

统小信uos

了解JDBC层之QueryDSL

邱学喆

QueryDSL SQLQueryFactory

"云智一体"全场景智能视频技术与应用解析白皮书下载申请

百度开发者中心

白皮书 云智一体 智能视频

MESI缓存一致性协议

Java 架构 面试 后端

【墨天轮专访第四期】华为云GaussDB苏光牛:发挥生态优势,培养应用型DBA

墨天轮

数据库 华为云 GaussDB

守护油田安全,EMQ X 在石油石化危化品监测管理中的应用

EMQ映云科技

物联网平台 物联网 IoT 边云协同 emq

京东云金秋上云特惠进行中!扫码参与活动

京东科技开发者

云计算 云主机 大促

Elasticsearch 原理解析(介绍)

ZzC🍖

搜索引擎 elasticsearch

浪潮云洲发布标识解析数据网关产品

工业互联网

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