7 分布式定时任务调度框架

先简单介绍下分布式定时任务调度框架的使用场景和功能和架构,然后再介绍世面上常见的产品

我们在大型的复杂的系统下,会有大量的跑批,定时任务的功能,如果在独立的子项目中单独去处理这些任务,随着业务的复杂度的提高,大量的任务将很难进行统一的管理,出现bug以后问题也很难排查,最后将成为一种灾难。所以我们引入了分布式定时任务调度框架,统一管理这些定时任务和跑批的功能,出现问题也容易统一管理

1. 分布式定时任务功能

1.1 定时任务的执行、任务管理、执行日志管理
1.2 定时任务架构的高可用。集群、分片、执行失败任务的处理
1.3 一些扩展功能:可视化的运维,多语言支持、任务编排等

2. 调度中心的整体架构
一个分布式定时任务框架主要分为下面三个模块

2.1 调度中心: 负责接收并分配任务,并按照置顶的配置规则执行
2.2 任务执行: 处理实际业务处理并执行,执行完成以后反馈给调度中心
2.3 监控中心: 主要负责节点管理,任务队列管理,监控管理等。

常见的分布式调度框架:xxljob

xxl-job是我极力推荐的框架,在我待过的几家中小型的互联网公司基本上都选用该框架。xxl-job开放源码,简单高效,中小企业用的很多。
1.xxl-job经过持续的迭代,修复了很多bug。2.0开始引入新特性,耦合性降低
2.搭建起来也非常简单,开箱即用。
3.源码开放
4.源码也有很多值得学习的地方,虽然刚发布的时候会有很多资深的程序员诟病,但经过多年的发展维护,已经非常稳定。代码非常朴实,没有那些花里胡哨的花样

xxl-job架构如下图
在这里插入图片描述

调度中心: 用于发布我们需要的执行任务,并且可以控制任务的添加、删除、启动和停止,以及维护日志。并且可以在操作界面进行设置。
执行器: 执行具体业务端,调度中心根据注册的执行器,按照算法分配任务执行。每一个执行器有唯一的appname,与调度中心管理的执行器名称一致,调度中心才分配任务给执行器
任务: 设置执行策略、分片机制、任务、执行器等信息。执行器管理中的appname找到执行器的appname,这样任务就会分配给对应的执行器。

xxl-job的调度原理:
1.调度中心通过http协议请求执行器中的服务,默认的端口是9999
2.执行器执行业务逻辑代码
3.执行器执行完成业务代码后回调调度中心的服务,调度中心开放了一套针对执行器材的API

xxl-job的分片原理
当执行器以集群方式部署的情况下,调度任务的策略选择"分片广播"的情况下,一次调度任务会以广播的形势触发集群中所有的执行器,同时传递分片参数,可以根据分片参数开发分片任务。
xxl-job的架构虽然简单但是用起来是真的爽,没有那一套高大上的架构设计,但是就是好用

常见的分布式调度架构:elastic-job

elastic-job分为两个独立的大块。一个是lite-core(核心去中心化的调度),一个是cloud(监控平台).
在这里插入图片描述

schedule: 会选取一个leader,作为分配执行任务的(包括分片)的机器。
simple: 实现simplejob接口,该接口提供单一的方法覆盖,该方法定时执行并提供了弹性扩容和分片的功能
dataflow: dataflow类型用于处理数据流,需实现DataflowJob接口。该接口提供2个方法可供覆盖,分别用于抓取(fetchData)和处理(processData)数据
script: script类型作业意为脚本类型作业,支持shell,python,perl等所有类型脚本。只需通过控制台或代码配置scriptCommandLine即可,无需编码。执行脚本路径可包含参数,参数传递完毕后,作业框架会自动追加最后一个参数为作业运行时信息。

调度原理
在这里插入图片描述

elastic-job的分布式锁

通过zookeeper做的分布式锁,先选取leader再做分配工作

常见的分布式调度框架:Schedulerx2.0

分布式任务调度SchedulerX是阿里巴巴自研的基于Akka架构的分布式任务调度平台,兼容开源XXL-JOB、ElasticJob,支持Cron定时、一次性任务、任务编排、分布式执行批量任务等功能,具备高可用、可视化、可运维、低延时等能力。如下图所示;
在这里插入图片描述

常见分布式调度框架:quartz

整体架构图如下:

在这里插入图片描述

常见的分布式调度框架:LTS

使用容器化的技术,定时启动执行器执行任务。

我们使用图表方式对以上几个框架做个总结

在这里插入图片描述

一般情况下中小型的业务的首选就是xxl-job。

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

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

相关文章

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法

网络安全 | 网络安全法规:GDPR、CCPA与中国网络安全法 一、前言二、欧盟《通用数据保护条例》(GDPR)2.1 背景2.2 主要内容2.3 特点2.4 实施效果与影响 三、美国《加利福尼亚州消费者隐私法案》(CCPA)3.1 背景3.2 主要内…

Elixir语言的计算机基础

Elixir语言的计算机基础 引言 在当今这个快速发展的技术时代,编程语言层出不穷。Elixir作为一种较新的编程语言,以其高并发、低延迟和强大的容错能力受到越来越多开发者的青睐。它基于Erlang虚拟机(BEAM),自然继承了…

mysql的mvcc理解

人阅读 一、说到mvcc就少不了事务隔离级别(大白话解释) 序列化(SERIALIZABLE):事务之间完全隔离,当成一个序列,一个一个执行。 1 可重复读(REPEATABLE READ)&#xff…

“AI智能陪练培训服务系统,让学习更轻松、更高效

大家好,我是资深产品经理小李,今天咱们来侃侃一个新兴的教育辅助工具——AI智能陪练培训服务系统。这个系统可谓是教育培训行业的一股新势力,它究竟有什么神奇之处呢?下面我就跟大家伙儿好好聊聊。 一、什么是AI智能陪练培训服务系…

notebook主目录及pip镜像源修改

目录 一、notebook主目录修改二、pip镜像源修改 一、notebook主目录修改 在使用Jupyter Notebook进行数据分析时,生成的.ipynb文件默认会保存在Jupyter的主目录中。通常情况下,系统会将Jupyter的主目录设置为系统的文档目录,而文档目录通常位…

如何利用百炼智能体编排应用轻松搭建智能AI旅游助手?

各位小伙伴儿,好哈! 在上一篇文章《5分钟基于阿里云百炼平台搭建专属智能AI机器人》中我们体验了如何利用阿里云百炼平台的智能体应用搭建专属智能机器人。 它的配置过程相对简单,其“对话式”的输出形式也十分直观,非常适合初学…

.NET中的框架和运行环境

在.NET生态系统中,框架和运行环境是两个不同的概念,它们各自扮演着重要的角色。 下面我将分别介绍.NET中的框架和运行环境,并解释它们之间的区别。 .NET 框架(Frameworks) 框架提供了一套预定义的类库、工具和服务&…

js实现一个可以自动重链的websocket客户端

class WebSocketClient {constructor(url, callback, options {}) {this.url url; // WebSocket 服务器地址this.options options; // 配置选项(例如重试间隔、最大重试次数等)this.retryInterval options.retryInterval || 1000; // 重试间隔&#…

计算机视觉目标检测-DETR网络

目录 摘要abstractDETR目标检测网络详解二分图匹配和损失函数 DETR总结总结 摘要 DETR(DEtection TRansformer)是由Facebook AI提出的一种基于Transformer架构的端到端目标检测方法。它通过将目标检测建模为集合预测问题,摒弃了锚框设计和非…

【Vim Masterclass 笔记09】S06L22:Vim 核心操作训练之 —— 文本的搜索、查找与替换操作(第一部分)

文章目录 S06L22 Search, Find, and Replace - Part One1 从光标位置起,正向定位到当前行的首个字符 b2 从光标位置起,反向查找某个字符3 重复上一次字符查找操作4 定位到目标字符的前一个字符5 单字符查找与 Vim 命令的组合6 跨行查找某字符串7 Vim 的增…

Python3 JSON

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript编程语言的一个子集,但JSON是独立于语言的,很多编程语言都支持JSON格式数据的…

202406 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)

第 1 题 冠军魔术 2018年FISM(世界魔术大会)近景总冠军简纶廷的表演中有一个情节:以桌面上一根带子为界,当他将纸牌从带子的一边推到另一边时,纸牌会变成硬币;把硬币推回另一边会变成纸牌。 这里我们假设纸牌会变成等量的硬币,而硬币变成纸牌时,纸牌的数量会加倍。那么…

springboot 默认的 mysql 驱动版本

本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…

计算机网络(二)——物理层和数据链路层

一、物理层 1.作用 实现相信计算机节点之间比特流的透明传输&#xff0c;尽可能屏蔽具体传输介质和物理设备的差异。 2.数据传输单位 比特。 3.相关通信概念 ①信源和信宿&#xff1a;即信号的发送方和接收方。 ②数据&#xff1a;即信息的实体&#xff0c;比如图像、视频等&am…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”&#xff08;Change Data Capture&#xff09;。这是SQL Server数据库提供的一项功能&#xff0c;能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息&#xff0c;并使这些信息…

AI数字人+文旅:打造数字文旅新名片

在数字化浪潮的推动下&#xff0c;人工智能技术正以前所未有的速度渗透到我们生活的每一个角落。特别是在文化和旅游领域&#xff0c;AI数字人的出现&#xff0c;不仅为传统文旅产业注入了新的活力&#xff0c;也为游客带来了全新的体验。 肇庆AI数字人——星湖 “星湖”是肇…

做一个 简单的Django 《股票自选助手》显示 用akshare 库(A股数据获取)

图&#xff1a; 股票自选助手 这是一个基于 Django 开发的 A 股自选股票信息查看系统。系统使用 akshare 库获取实时股票数据&#xff0c;支持添加、删除和更新股票信息。 功能特点 支持添加自选股票实时显示股票价格和涨跌幅一键更新所有股票数据支持删除不需要的股票使用中…

Protobuf编码规则详解

Protobuf编码规则详解 1 Message 结构1.1 tag1.1.1 字段编号(field_num)1.1.2 传输类型(wire_type) 1.2 字段顺序1.3 默认值 2 编码2.1 Varint编码2.1.1 Varint编码过程2.1.2解码过程2.1.3 存储2.1.4 小结2.2 有符号整数(sint32和sint64)编码的问题与zigzag优化 3 编码实践3.1测…

系统思考与因果智慧

“众生畏果&#xff0c;菩萨畏因”&#xff0c;这句话蕴藏着深厚的因果智慧&#xff0c;与系统思考不谋而合。 众生畏果&#xff0c;体现了大多数人的行为模式&#xff1a;关注的是眼前的问题与结果&#xff0c;比如失败、冲突、痛苦。正如在系统思考中&#xff0c;我们称之为…

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容&#xff1a; exec /entrypoint.sh: no such file or directory查看文件正常在此路径&#xff0c;但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。