ElasticJob 3.0.2 发布|优化 Failover、调度稳定性,支持 Java 19

ElasticJob3.0.2版本优化了故障转移特性,使其更加智能高效;增强了作业调度稳定性;支持Java19;并解决了多个问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ElasticJob 作为 Apache ShardingSphere 社区的子项目之一,是面向互联网生态和海量任务的分布式调度解决方案。

自 ElasticJob 3.0.1 发布后,ElasticJob 在 GitHub 上收到了不少用户的使用反馈,同时也合并了一些由社区同学贡献的代码,对 ElasticJob 的故障转移特性、作业调度稳定性、作业 API、Java 19 兼容性等方面进行了完善,促成本次 ElasticJob 3.0.2 的发布。

3.0.2 关键特性

优化 Failover(故障转移)特性

Failover 是 ElasticJob 的重要特性之一。

在 ElasticJob 3.0.1 中,Failover 特性存在一定的局限性与使用不便的地方:

  • Failover 需要有至少 2 个作业进程(job instance,称之为进程更易于理解)才能够发挥作用。假设只有 1 个作业进程正在执行作业,作业进程在执行过程中发生故障,这种情况下即使进程故障恢复或者在故障发生后启动一个新的作业进程,Failover 也无法生效。因此,过去版本的 Failover 特性要求冗余部分资源,尤其是在作业不需要分片的情况下,备份进程会长时间空闲并持续占用着资源。

  • Failover 触发比较敏感,即使作业不在运行状态,其中一个进程下线,也会触发另一个进程的 Failover 将下线进程所拥有的分片立即执行一次。无论进程下线是因为正常下线还是发生故障,Failover 都会触发,给用户带来不便。

ElasticJob 3.0.2 对 Failover 特性进行了优化:

  • 假设唯一一个作业进程正在执行作业,在作业执行过程中进程因为故障退出。故障发生后启动新的作业进程,新的进程能够检测到曾经发生故障的分片,并立即触发 Failover 能力。比如我们在 K8S 环境下,部署了一个副本数为 1 的作业进程。如果该作业进程在执行作业过程中因故障意外退出,K8S 自动启动另一个新的作业进程,此时 Failover 特性会在新的作业进程被触发,继续执行之前发生故障的作业。

  • 优化后的 Failover 仅对正在执行的作业生效。如果作业进程发生故障时没有作业正在执行,Failover 在此时不会被触发,避免了作业进程正常下线导致 Failover 被触发的情况。

隔离不同作业的事件通知线程,并避免代码中可能存在死循环的风险

ElasticJob 目前主要通过 ZooKeeper 实现分布式协调。在 ElasticJob 实际使用过程中,用户可能会在同一个项目中同时启动多个作业,这些作业都复用同一个 Apache Curator 客户端。由于 ZooKeeper 的特性及 Curator 在单一事件线程中回调方法的实现(https://cwiki.apache.org/confluence/display/CURATOR/TN1),此时存在一定的风险:

  • 如果作业过多且频繁触发,相应的回调也会更多,Curator 事件线程的处理能力可能会达到上限,导致作业被延迟触发或者迟迟无法触发。

  • 如果因为某一作业意外阻塞了 Curator 事件线程,其他作业也会由于 Curator 事件线程故障受影响,导致作业延迟触发或无法触发。

在 ElasticJob 3.0.2 中,每个作业所属的回调方法将会在作业所属的线程执行,减少了作业之间影响的风险。

另外,ElasticJob 3.0.2 中也避免了一处可能会发生死循环的代码。当作业进程在线,且 ZooKeeper 中的 server 节点发生变动(例如被删除)时,可能会导致 ElasticJob 判断 server 启用状态的方法陷入死循环,本次版本优化了此问题。

支持 Java 19

Java 19 在 2022 年 9 月 20 日已正式发布,ElasticJob 代码紧随 Java 版本,已支持通过 Java 19 构建及使用。目前,ElasticJob 支持的 Java 版本为 8 至 19。

Release Notes

问题修复

  • https://github.com/smartBun

  • https://github.com/RedRed228

  • https://github.com/xlcn

  • https://github.com/TeslaCN

  • https://github.com/Jovons

  • https://github.com/pandaapo

  • https://github.com/TeslaCN

  • 修复当次作业执行过程中产生的错误信息,在下次作业执行前没有被清理的问题

  • 避免部分代码中可能会发生死循环的风险,并隔离不同作业的事件通知线程

  • 修复 job instance ID、作业配置反序列化可能会发生 NPE 的问题

  • 优化 Failover 功能触发过于敏感的问题

增强

  • https://github.com/cocodroid

  • https://github.com/cocodroid

  • https://github.com/TeslaCN

  • 脚本作业发生错误时能够显示异常堆栈

  • 使用 Spring Boot 时支持使用不同的数据源作为 ElasticJob 事件跟踪数据源

  • ElasticJob 支持 Java 19

详细信息请参照 GitHub ElasticJob 仓库 Milestone。

参考文档

🔗 ElasticJob Milestone:https://github.com/apache/shardingsphere-elasticjob/milestone/5?closed=1

🔗 更新日志:

https://github.com/apache/shardingsphere-elasticjob/blob/master/RELEASE-NOTES.md

🔗 ShardingSphere ElasticJob 项目地址

https://github.com/apache/shardingsphere-elasticjob

🔗 ShardingSphere 项目地址:

https://github.com/apache/shardingsphere

🔗 ShardingSphere ElasticJob 官网地址:

https://shardingsphere.apache.org/elasticjob

作者

吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。专注于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuweijie@apache.org

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值