SnailJob 1.4.0 发布
🔥🔥🔥 灵活,可靠和快速的分布式任务重试和分布式任务调度平台
✅️ 可重放,可管控、为提高分布式业务系统一致性的分布式任务重试平台 ✅️ 支持秒级、可中断、可编排的高性能分布式任务调度平台
项目特性
-
易用性 业务接入成本小。避免依赖研发人员的技术水平,保障稳定性
-
灵活性 能够动态调整配置,启动 / 停止任务,以及终止运行中的任务
-
操作简单 分钟上手,支持 WEB 页面对任务数据 CRUD 操作。
-
数据大盘 实时管控系统任务数据
-
分布式重试任务 支持多样化退避策略、多样化重试类型、流量管控等
-
分布式调度任务 提供丰富的任务触发策略、任务分片、停止恢复、失败重试等
-
工作流任务编排 仿钉钉设计的流程编排引擎,支持复杂的功能编排、失败重试、告警等
-
任务数据管理 可以做到数据不丢失、数据一键回放
-
容器化部署 服务端支持 docker 容器部署
-
高性能调度平台 支持服务端节点动态扩容和缩容
-
支持多样化的告警方式 邮箱、企业微信、钉钉、飞书、自定义告警
-
支持多种流行数据库 mysql、mariadb、sqlserver、oracle、postgres 数据库
开源组件对比
项目 | Quartz | Elastic-Job | XXL-JOB | PowerJob | Snail Job |
---|---|---|---|---|---|
跨语言能力 | 不支持 | 不支持 | 不支持 | 不支持 | 支持 java (1.8/17)、Python、Go 客户端 (开发中) |
定时调度 | Cron | Cron | Cron | CRON、固定频率、固定延迟、OpenAPI | 1. 定时任务 2. 秒级任务 (无需依赖外部中间件) 3. 固定频率 4.OpenAPI |
重试任务 | 不支持 | 不支持 | 不支持 | 不支持 | 1. 支持本地 & 远程重试模式 2. 支持各种常用组件的重试 比如 dubbo/feign 3. 支持多种退避策略 4. 丰富的重试风暴管控手段 ...... |
任务编排 | 不支持 | 不支持 | 不支持 | 支持 | 仿钉钉工作流设计,颜值高、体验好 |
分布式计算 | 不支持 | 静态分片 | 广播 | 支持 | 1. 广播执行 2. 集群执行 3. 静态分片 4. 动态分片 |
多语言 | Java | 1. Java 2. 脚本任务 | 1. Java 2. 脚本任务 | 支持 | 1. Java 2. CMD (本地脚本、远程脚本、参数传人) 3. PowerShell (本地脚本、远程脚本、参数传人) 3. Shell (本地脚本、远程脚本、参数传人) 4. HTTP 任务 |
用户管理 | 不支持 | 支持 | 支持 | 不支持 | 完备的用户管理和权限管理 |
安全 Token | 不支持 | 不支持 | 支持 | 不支持 | 支持 |
可视化 | 无 | 弱 | 1. 历史记录 2. 运行日志(不支持存储)3. 监控大盘 | 支持 | 1. 历史记录 2. 实时日志 (支持持久化、可视化) 3. 监控大盘 (实时调度数据展示) 4. 失败调度排名 5. 在线集群查看等 |
可运维 | 无 | 启用、禁用任务 | 1. 启用、禁用任务 2. 手动运行任务 3. 停止任务 | 支持 | 1. 启用、禁用任务 2. 手动运行任务 3. 停止任务 4、手动重试 |
报警监控 | 无 | 邮件 | 邮件 | 邮件 | 支持配置多种告警场景,通知方式支持: 1. 邮件 2. 钉钉 3. 企微 4. 飞书 5、Webhook |
性能 | 每次调度通过 DB 抢锁,对 DB 压力大 | ZooKeeper 是性能瓶颈 | 采用 Master 节点调度,Master 节点压力大 | 无锁化设计 | 系统采用多 bucket 模式,借助负载均衡算法,确保每个节点能够均衡处理任务,同时支持无限水平扩展,轻松应对海量任务调度 |
接入成本 | 只依赖 DB 接入成本低 | 需引入 Zookeeper 增加系统复杂性和维护成本 | 只依赖 DB 接入成本低 | 依赖 DB 接入成本低 | 只依赖 DB 接入成本低 |
更新日志
1. sdk手动触发调用时,支持传递临时参数【优化】
2. oracle sql 索引名过长 【BUG】
3. 默认rpc-type: grpc【新增】
4. 场景添加回调配置 【新增】
5. Converter移入convert包【优化】
6. 添加 @EqualsAndHashCode(callSuper=true) 去除warning 【优化】
7. 消除 client-starter 依赖冲突(error_prone_annotations)【优化】
8. 消除 server-starter 依赖冲突(checker-qual,error_prone_annotations)【优化】
9. 优化maven结构,根pom统一管理版本【优化】
10. 修复定时任务触发常驻任务时,通过任务开关无法正常关闭定时任务问题 【BUG】
11. 修复了oracle数据库更新定时任务状态失败问题【BUG】
12. 修复代码编辑器格式化问题【BUG】
13. 修复周期性cron问题【BUG】
14. 修复组管理删除出错BUG 【BUG】
15. 修复工作流中任务未与工作流节点绑定【BUG】
16. 修复spel类型注入,会导致RCE的安全问题 【BUG】
17. 新建命名空间报错 【BUG】
18. akka 替换为pekko 【优化】
19. 修复工作流去重告警异常问题【BUG】
20. 修复文档连接错误 【BUG】
21. hikari数据源默认最大连接数由20改为100【优化】
22. Job清理日志减少事务范围【优化】
23. 下线废弃配置【优化】
24. 通讯模式默认改为Grpc
25. 修复工作流去重告警异常问题【BUG]
26. 重试模块服务端重构【新增】
- sj_retry_task_0 改为 sj_retry
- sj_retry_dead_letter_0 改为 sj_retry_dead_letter
- sj_retry_task_log 改为 sj_retry_task_log
注意 本次重点重构了重试模块的流程,由之前的同步调度客户端改为异步调度客户端。将支持更高并发的调度同时大大提高服务端的稳定性
MYSQL 变更 (其他 DB 变更请自行同步)
全量的 SQL 请参考项目 /doc/sql/x.sql
ALTER TABLE `sj_group_config` DROP COLUMN `bucket_index`; ALTER TABLE `sj_job` MODIFY COLUMN `block_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '阻塞策略 1、丢弃 2、覆盖 3、并行 4、恢复'; ALTER TABLE `sj_retry_scene_config` ADD COLUMN `block_strategy` tinyint(4) NOT NULL DEFAULT 1 COMMENT '阻塞策略 1、丢弃 2、覆盖 3、并行' AFTER `route_key`; ALTER TABLE `sj_retry_scene_config` ADD COLUMN `cb_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '回调状态 0、不开启 1、开启' AFTER `block_strategy`; ALTER TABLE `sj_retry_scene_config` ADD COLUMN `cb_trigger_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '1、默认等级 2、固定间隔时间 3、CRON 表达式' AFTER `cb_status`; ALTER TABLE `sj_retry_scene_config` ADD COLUMN `cb_max_count` int(11) NOT NULL DEFAULT 16 COMMENT '回调的最大执行次数' AFTER `cb_trigger_type`; ALTER TABLE `sj_retry_scene_config` ADD COLUMN `cb_trigger_interval` varchar(16) NOT NULL DEFAULT '' COMMENT '回调的最大执行次数' AFTER `cb_max_count`; ALTER TABLE `sj_retry_task_log_message` DROP COLUMN `unique_id`; ALTER TABLE `sj_retry_task_log_message` ADD COLUMN `retry_id` bigint(20) NOT NULL COMMENT '重试信息Id' AFTER `group_name`; ALTER TABLE `sj_retry_task_log_message` ADD COLUMN `retry_task_id` bigint(20) NOT NULL COMMENT '重试任务Id' AFTER `retry_id`; CREATE INDEX idx_namespace_id_group_name_retry_task_id ON sj_retry_task_log_message (`namespace_id`, `group_name`, `retry_task_id`); ALTER TABLE sj_retry_task_log_message DROP INDEX idx_namespace_id_group_name_scene_name; CREATE TABLE `sj_retry_dead_letter` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', `idempotent_id` varchar(64) NOT NULL COMMENT '幂等id', `biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号', `executor_name` varchar(512) NOT NULL DEFAULT '' COMMENT '执行器名称', `args_str` text NOT NULL COMMENT '执行方法参数', `ext_attrs` text NOT NULL COMMENT '扩展字段', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`), KEY `idx_idempotent_id` (`idempotent_id`), KEY `idx_biz_no` (`biz_no`), KEY `idx_create_dt` (`create_dt`) ) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='死信队列表' ; CREATE TABLE `sj_retry` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', `idempotent_id` varchar(64) NOT NULL COMMENT '幂等id', `biz_no` varchar(64) NOT NULL DEFAULT '' COMMENT '业务编号', `executor_name` varchar(512) NOT NULL DEFAULT '' COMMENT '执行器名称', `args_str` text NOT NULL COMMENT '执行方法参数', `ext_attrs` text NOT NULL COMMENT '扩展字段', `next_trigger_at` bigint(13) NOT NULL COMMENT '下次触发时间', `retry_count` int(11) NOT NULL DEFAULT 0 COMMENT '重试次数', `retry_status` tinyint(4) NOT NULL DEFAULT 0 COMMENT '重试状态 0、重试中 1、成功 2、最大重试次数', `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、重试数据 2、回调数据', `bucket_index` int(11) NOT NULL DEFAULT 0 COMMENT 'bucket', `parent_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '父节点id', `deleted` bigint(20) NOT NULL DEFAULT 0 COMMENT '逻辑删除', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_namespace_id_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`), KEY `idx_namespace_id_group_name_retry_status` (`namespace_id`, `group_name`, `retry_status`), KEY `idx_idempotent_id` (`idempotent_id`), KEY `idx_biz_no` (`biz_no`), KEY `idx_parent_id` (`parent_id`), KEY `idx_create_dt` (`create_dt`), UNIQUE KEY `uk_name_task_type_idempotent_id_deleted` (`namespace_id`, `group_name`, `task_type`, `idempotent_id`, `deleted`) ) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='重试信息表' ; CREATE TABLE `sj_retry_task` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `namespace_id` varchar(64) NOT NULL DEFAULT '764d604ec6fc45f68cd92514c40e9e1a' COMMENT '命名空间id', `group_name` varchar(64) NOT NULL COMMENT '组名称', `scene_name` varchar(64) NOT NULL COMMENT '场景名称', `retry_id` bigint(20) NOT NULL COMMENT '重试信息Id', `ext_attrs` text NOT NULL COMMENT '扩展字段', `task_status` tinyint(4) NOT NULL DEFAULT 1 COMMENT '重试状态', `task_type` tinyint(4) NOT NULL DEFAULT 1 COMMENT '任务类型 1、重试数据 2、回调数据', `operation_reason` tinyint(4) NOT NULL DEFAULT 0 COMMENT '操作原因', `client_info` varchar(128) DEFAULT NULL COMMENT '客户端地址 clientId#ip:port', `create_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_dt` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', PRIMARY KEY (`id`), KEY `idx_group_name_scene_name` (`namespace_id`, `group_name`, `scene_name`), KEY `task_status` (`task_status`), KEY `idx_create_dt` (`create_dt`), KEY `idx_retry_id` (`retry_id`) ) ENGINE = InnoDB AUTO_INCREMENT = 0 DEFAULT CHARSET = utf8mb4 COMMENT ='重试任务表' ; DROP TABLE sj_retry_dead_letter_0; DROP TABLE sj_retry_task_0; DROP TABLE sj_retry_task_log;
项目地址
方便的话给项目一个 star,你的支持是我们前进的动力!
先睹为快

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源等宽编程字体 Maple Mono 正式发布 7.0
Maple Mono V7.0 稳定版已正式发布。 Maple Mono 是一款开源等宽字体,专注于优化编码体验,带有圆角、连字和 Nerd-Font,适用于 IDE 和终端,具有细粒度的自定义选项。 特性 可变 - 无限的字体粗细,以及手工微调的斜体字形。 丝滑 -圆角,独特的@ $ % & Q ->字形,以及手写风格的斜体f i j k l x y。 实用 - 大量的智能连字,详见features/。 图标 - 提供Nerd-Font嵌入的版本,添加图标支持。 定制 - 自由开关或者构建 OpenType 字体特性,打造您专属的字体。 开发者称 V7 是一个完全重制版本,提供了可变字体格式和字体工程源文件,重新设计了超过一半的字形,并提供更智能的连字。 预览效果 下载地址:https://github.com/subframe7536/maple-font/releases/tag/v7.0
- 下一篇
go-carbon v2.6.0 发布,轻量级、语义化、对开发者友好的 golang 时间处理库
carbon 是一个轻量级、语义化、对开发者友好的 Golang 时间处理库,提供了对时间穿越、时间差值、时间极值、时间判断、星座、星座、农历、儒略日 / 简化儒略日、波斯历 / 伊朗历的支持。 carbon 目前已捐赠给dromara开源组织和被awesome-go收录,并获得gitee2024 年最有价值项目(GVP)和gitcode2024 年度G-Star项目,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/golang-module/carbon gitcode.com/golang-module/carbon 更新日志 golang最低版本依赖升级到1.18 carbon,julian,lunar,persian从值传递改成指针传递 新增ZoneName方法获取时区名称 新增HasError方法判断是否有错误 新增IsNil方法判断是否是nil 新增Copy方法对carbon进行深度复制 新增WeekStartsAt方法获取周起始日期 新增示例文件xxx_example.go 新增constant.g...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8安装Docker,最新的服务器搭配容器使用
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19