开源任务调度框架
本文主要介绍一下任务调度框架Flowjob的整体结构,以及整体的心路历程。
功能介绍
flowjob主要用于搭建统一的任务调度平台,方便各个业务方进行接入使用。 项目在设计的时候,考虑了扩展性、稳定性、伸缩性等相关问题,可以作为公司的任务调度中间件被使用。
当前项目的主要稳定版本为2.x,并且在2.x版本中提供了相应的前端页面配合使用。
项目地址
https://github.com/limbo-world/flowjob
在线试用
在线试用
账号:flowjob
密码:fjdemo
功能介绍
flowjob主要分为以下几个部分:
- Broker:管控节点,对配置好的任务在集群进行负载,调度任务并下发Agent,同时管理和维护Agent/Worker节点注册等。
- Agent:代理节点,接收下发的Job信息,生成Task下发给Worker执行,处理Job的生命周期,比如工作流流转等。可以独立部署,也可以依赖宿主启动。
同时此节点可以减少广播/Map/MapReduce等分片任务导致Broker存在的数据/性能压力,以及云原生环境下一些启停导致的数据问题。 - Worker:工作节点,主要负责Task的具体执行。
- Console:通过Broker提供的Api,进行任务创建/更新等一些管控操作。
- Registry:注册中心,目前使用DB做为注册中心。提供了对应接口,可以基于其它组件如zk、nacos等进行灵活的封装。
- Datasource:数据库用于持久化运行数据

调度类型
- 固定速度:作业创建后,每次调度下发后,间隔固定时间长度后,再次触发作业调度。
- 固定延迟:作业创建后,每次作业下发执行完成(成功或失败)后,间隔固定时间长度后,再次触发作业调度。
- CRON:通过CRON表达式指定作业触发调度的时间点。
负载策略
- 随机:将作业随机下发给某一个worker执行。
- 轮询:将任务逐个分配给worker。
- 最不经常使用:将作业下发给一个时间窗口内,接收作业最少的worker。
- 最近最少使用:将作业下发给一个时间窗口内,最长时间没有接受worker的worker。
- 一致性hash:同样参数的作业将始终下发给同一台机器。
- 指定节点:让作业指定下发到某个worker执行。
节点过滤方式
- 执行器:任务只会下发给包含任务对应执行器的worker。
- 标签:任务只会下发给包含指定标签的worker。
- 容量:基于worker的任务队列/CPU/内存使用情况过滤
任务触发方式
- API:通过指定api触发任务执行。
- 调度:Broker自动组装数据,调度对应的任务。
任务类型
按大体配置分为:
- 普通任务:只会执行一个Job。
- 工作流任务:DAG视图,可以串联Job
按Job类型分为:
- 普通:对应某个执行器,执行结束任务结束。
- 广播:在下发的时间点,对每个可下发的节点下发任务,所以子任务执行完成当前任务才执行完成。
- Map:分为sharding和map两个步骤。sharding的时候进行分片,map则对每个拆分任务进行执行。
- MapReduce:相比于Map多了Reduce过程,可以对所有Map任务的执行结果进行一个汇总。
经历分享
会接触任务调度系统也是因为工作原因。其实在平时工作中很多时候接触比较多的是Quartz、xxl-job这两款框架。然后之前工作中我们组内使用的是light-task-scheduler(此框架也是当时项目组的前辈做的)。但是在使用过程中,我们发现存在一些不太便利的问题,比如没法动态进行配置,有些时候可能需要高配置节点跑数据,没法指定节点,我们的任务存在关联关系,当时只能通过代码写逻辑来实现等等。所以和之前同事也是在后面慢慢开始打算自己着手搞一个出来。
项目兜兜转转也是经历和好几年的时间才终于能有一个相对满意的2.x版本出来。开发这样一个分布式系统,其实耗费的精力十分大,由于是工作之余进行整体方案设计和功能开发,总会被这样那样的事情打断,中间因为一些个人原因以及时间分配问题,也是中断了好多次。
项目过程中,你要考虑,分布式场景下如何保证任务的重试,如何判断长时间的任务是否还在正常执行,还得考虑任务越来越多节点压力过高的挑战。
希望本项目可以帮助大家理解分布式系统中存在的问题和如何解决这类问题。代码中有很多不足也是希望大家能帮忙指出一起进步。后续有时间会继续更新项目中存在的难点,以及项目中的解决思路。
相关文章:
开源任务调度框架
本文主要介绍一下任务调度框架Flowjob的整体结构,以及整体的心路历程。 功能介绍 flowjob主要用于搭建统一的任务调度平台,方便各个业务方进行接入使用。 项目在设计的时候,考虑了扩展性、稳定性、伸缩性等相关问题,可以作为公司…...
Android Native 开发 要点记录
Android Studio 中写 C 代码 android studio创建C项目_android studio native c-CSDN博客 项目配置参考 【CMake】CMakeLists.txt的超傻瓜手把手教程(附实例源码)_【cmake】cmakelists.txt的超傻瓜手把手教程(附实例源码)-CSDN博客 CMakeLists.txt 讲解…...
数据库中查询所有表信息,查询所有字段信息
MYSQL中 所有表信息 information_schema.tables表 SELECT * FROM information_schema.tables -- TABLE_NAME 表名 -- TABLE_COMMENT 表中文名所有字段信息 information_schema.COLUMNS表 SELECT * FROM information_schema.tables -- TABLE_SCHEMA 数据库名 -- COLUMN…...
改进智能优化算法常用指标一键导出为EXCEL,最优值,平均值,标准差,最差值,中位数,秩和检验,箱线图...
声明:对于作者的原创代码,禁止转售倒卖,违者必究! 为了突出改进智能优化算法的效果,常常会将改进的智能算法与其他算法进行对比。 在一些期刊论文中,经常会看到一个超级大的表格,统计着每个算法…...
在asp.net中,实现类似安卓界面toast的方法(附更多弹窗样式)
目录 一、背景 二、操作方法 2.1修改前 2.2修改后 三、总结 附:参考文章: 一、背景 最近在以前的asp.net网页中,每次点击确定都弹窗,然后还要弹窗点击确认,太麻烦了,这次想升级一下,实现…...
一站式解决方案:Qt 跨平台开发灵活可靠
一站式解决方案:Qt 跨平台开发灵活可靠 Qt 是一种跨平台开发工具,为开发者提供了一站式解决方案。无论您的项目目标是 Windows、Linux、macOS、嵌入式系统还是移动平台,Qt 都能胜任。这种跨平台的特性不仅节省开支,还推动了战略的…...
将cpu版本的pytorch换成gpu版本
1.首先激活虚拟环境 winRcmd 打开dos命令窗口 查看虚拟环境列表 conda env list 激活虚拟环境 2.将原来的pytorch_cpu版本换成gpu版本 注意:安装gpu版本的pytorch时并不需要先卸载原来的cpu版本pytorch,安装时会自己替换的 打开pytorch官网查看以前版本 Previo…...
Ubuntu安装QQ
原文网址:2023在Ubuntu安装最新版QQ Linux v3.1.0 - 哔哩哔哩 作者:sprlightning https://www.bilibili.com/read/cv22100663/ 出处:bilibili 2022年末QQ推出了QQ Linux v3.0系列,目前最新版是今年2月24日推出的v3.1.0版本。注意…...
【Python】实现excel文档中指定工作表数据的更新操作
在做数值计算时,个人比较习惯利用excel文档的公式做数值计算进行对比,检查异常,虽然计算量大后,excel计算会比较缓慢,但设计简单,易排错 但一般测试过程中使用到的数据都不是最终数值,会不停根据…...
力扣(LeetCode)2731. 移动机器人(C++)
脑经急转弯排序 碰撞只改变运动方向,速度始终如"1",且机器人视为无差别的,所以碰撞等于擦肩而过!"机器人碰撞,到底撞没撞,如撞。"因此只考虑每个机器人单方向移动,d秒后停…...
vite和webpack
vite和webpack 文章目录 vite和webpackvite介绍什么是vite为什么使用vitevite优缺点热更新的实现原理 webpack介绍什么是webpackwebpack 优缺点 Vite 为什么比 Webpack 快vite和webpack的区别面试问题Vite为什么比webpack快? vite介绍 什么是vite Vite 是新型前端…...
MinIO图片正常上传不可查看,MinIO通过页面无法设置桶为public
项目场景:国产中标麒麟操作系统部署MinIO正常启动后发现图片能正常上传,但是匿名浏览该图片的时候无法查看。通过网络查询解决方案,得出的结论是:需要把当前上传文件的桶设置为public,由于创建桶默认是private且不可通过浏览器进行…...
Linux 指令心法(七)`cat` 查看、合并和创建文本文件
文章目录 命令的概述和用途命令的用法命令行选项和参数的详细说明命令的示例命令的注意事项或提示 命令的概述和用途 cat 是 “concatenate” 的缩写,它是一个 Linux 和 Unix 系统中的命令,用于查看、合并和创建文本文件。cat 主要用于以下几个方面&…...
解决docker开启MySQL的binlog无法成功。docker内部报错:mysql: [ERROR] unknown variable
1. 报错信息 2. 操作流程 整个流程是这样的: 我愉快的输入docker ps,查看MySQL的docker 容器id 执行指令docker exec -it 8a \bin\bash进入容器内部执行vim /etc/my.cnf,打开配置文件按照网上说的,添加如下配置信息退出docker容…...
c,python ,java,c++ c#在控制台打印彩色文本
在C语言、Java和C#中,你可以通过使用特定的控制字符或库来设置文本颜色。下面分别演示如何在这三种编程语言中实现文本颜色的设置: 在C语言中实现文本颜色设置: C语言中的颜色设置通常依赖于特定的终端或操作系统。以下是一种使用C语言的方…...
MySQL数据库技术笔记(5)
聚合函数: count(): 统计某种数据的数量 sum(): 统计某种数据的总和 max(): 某种数据的最大值 min(): 某种数据的最小值 avg(): 某种数据的平均值 排序的用法 : 关键字 order by 升序 : ASC (从小到大排序) 默认为升序 降序 : DESC…...
python生成随机数
在Python中生成随机数可以使用内置的random模块。以下是一些生成随机数的示例: 生成一个0到1之间的随机浮点数: import random random_float random.random() print(random_float) 生成一个指定范围内的随机整数: import random random_int…...
Twitter优化秘籍:置顶、列表、受众增长
在 Twitter 上,将你的一条推送文置顶到个人数据顶部是提高可见性和吸引关注者的绝佳方式。无论你是个人用户还是企业,此功能都可以让你的重要信息常驻在众人眼前,即使你发布了新的推文。接下来,我们将分享一些优化建议,…...
vscode更改为中文版本
方式一 在扩展里安装chinese插件 方式二 1.Ctrl+ Shift +P(commandshiftP) 2.输入Configure display Language 3.选择zh-cn 这时候vscode会提示需要重启,点击restart重启vscode,重启后vscode就会显示中…...
【Linux系统KVM虚拟机实战】LVM逻辑卷之磁盘扩容
【Linux系统KVM虚拟机实战】LVM逻辑卷之磁盘扩容 一、LVM与KVM介绍1.1 LVM介绍1.2 KVM介绍1.2.1 KVM简介1.2.2 KVM优点二、本次实践介绍2.1 本次实践简介2.2 环境规划三、虚拟机环境检查3.1 检查KVM虚拟机磁盘空间3.2 KVM虚拟机检查系统情况3.3 检查物理磁盘分区3.4 查看PV状态…...
AlphaFold 3终极指南:掌握Jackhmmer与HMMER提升蛋白质结构预测精度
AlphaFold 3终极指南:掌握Jackhmmer与HMMER提升蛋白质结构预测精度 【免费下载链接】alphafold3 AlphaFold 3 inference pipeline. 项目地址: https://gitcode.com/gh_mirrors/alp/alphafold3 你是否在蛋白质结构预测项目中遇到MSA生成效率低下的瓶颈&#x…...
亚马逊卖家公开信息数据提取:反爬攻防战与 Python 批量采集实战
摘要: 批量获取亚马逊(Amazon)第三方卖家的商业名称、信用代码和注册地址等信息,对于跨境 B2B 拓客和供应链分析具有重要意义。然而,亚马逊的 Cloudflare 盾和 Robot 验证码构成了极高的反爬门槛。本文将深度解析亚马逊…...
服务器日志分析实战:用Python追踪HTTP 404错误并可视化异常频率
作为一名爬虫开发者或网站运维人员,服务器日志就像飞机的“黑匣子”——它记录了每个请求的来龙去脉。而404错误(页面未找到)尤其值得关注:它可能是用户输错了网址,可能是你爬虫的URL构造逻辑有漏洞,也可能是网站改版后旧的链接失效了。更严重的是,大量突然涌出的404请求…...
武汉国电华美串联谐振试验装置,现场用着心里有底
在高压试验现场干了这么多年,这位老师傅常说,一台好的串联谐振装置,就是试验人员的胆。面对GIS、大型变压器、超高压电缆这些大电容试品,没有趁手的谐振设备,交流耐压试验根本没法干。16875kVA/225kV这个规格ÿ…...
如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南
如何在浏览器中一键解密所有加密音乐文件:Unlock-Music完全指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地…...
DIY四路自动音频源切换器:从信号检测到继电器隔离的完整设计
1. 项目概述与核心需求解析作为一个喜欢在工作室里捣鼓各种音频设备的玩家,我经常遇到一个挺烦人的问题:我的功放只有一组输入,但我想接的设备却有好几个——台式电脑、平板、蓝牙接收模块,还有一台树莓派。每次想切换音源&#x…...
三步让小爱音箱秒变AI语音助手:MiGPT深度配置指南
三步让小爱音箱秒变AI语音助手:MiGPT深度配置指南 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障&q…...
利用FTDI芯片MPSSE模式构建Arduino兼容开发环境
1. 项目概述:当FTDI芯片遇上Arduino生态如果你手头有一些闲置的FTDI USB转串口模块,比如常见的FT232R、FT2232H,或者像我一样,从某个旧设备上拆下来一块FT2232C的老古董,除了用来给单片机烧录程序或者做串口调试&#…...
约束感知图缩减算法在量子优化中的应用
1. 约束感知图缩减算法概述在量子计算领域,资源受限一直是制约算法实际应用的主要瓶颈。以当前主流的超导量子计算机为例,其量子比特数通常在50-100个之间,且存在显著的噪声干扰。这种硬件限制使得许多经典优化问题难以直接映射到量子设备上求…...
深度解析:UI-TARS视觉语言模型驱动的自动化操作框架核心技术架构
深度解析:UI-TARS视觉语言模型驱动的自动化操作框架核心技术架构 【免费下载链接】UI-TARS-desktop The Open-Source Multimodal AI Agent Stack: Connecting Cutting-Edge AI Models and Agent Infra 项目地址: https://gitcode.com/GitHub_Trending/ui/UI-TARS-…...
