当当开源 Elastic-job 有哪些十大特性?分布式任务调度怎么实现?
当当开源的 Elastic-Job 具备弹性扩容、高可用、失效转移、并行调度、丰富作业类型、可视化运维等十大特性。分布式任务调度通过 ZooKeeper 作为注册中心实现节点选举与分片管理,结合 Quartz 进行时间调度。任务被拆分为多个分片并在多节点并行执行,支持动态增减节点自动重新分片,解决了传统单机定时任务在分布式环境下的单点故障、重复执行及负载不均问题,适用于订单取消、数据同步等场景。
ElasticJob 分布式调度从入门到实战
在分布式系统中,定时任务调度是一个常见但又极具挑战性的技术问题。传统的单机定时任务框架如 Spring Task、Quartz 等,在分布式环境下存在明显的局限性:单点故障:调度服务器宕机,所有任务停止执行 缺乏弹性:无法动态增减执行节点 重复执行:多实例部署时,同一任务被多次执行 负载不均:无法均衡分配任务到各个节点 ElasticJob 正是为解决这些问题而诞生的分布式调度解决方案。本文将带你从零开始,全面掌握 ElasticJob 的使用方法,并通过实际案例展示其在生产环境中的应用价值。1.1 什么是 ElasticJob ElasticJob 是当当网开源的分布式调度解决方案,于 2015 年开源,2020 年成为 Apache ShardingSphere 的子项目。它由两个相互独立的子项目组成:ElasticJob-Lite:定位为轻量级无中心化解决方案,使用 jar 包形式提供最轻量级的接入方式 ElasticJob-Cloud:定位为 Mesos 的资源调度解决方案,使用 Mesos Container 进行资源调度 本文聚焦于 ElasticJob-Lite,因为它更易于部署和使用,适合大多数企业场景。弹性扩容 ElasticJob 最核心的特性是弹性扩容能力。当业务量增加时,只需增加应用实例,ElasticJob 会自动重新分配任务分片,无需人工干预。这种特性使得系统能够从容应对业务峰值。高可用 采用无中心化设计,不存在单点故障。任意节点宕机,其他节点会自动接管该节点负责的任务分片,保证任务继续执行。多作业类型支持 支持 Simple Job(简单作业)、Dataflow Job(流式作业)、Script Job(脚本作业)、HTTPJob(HTTP 作业) 等多种作业类型,满足不同场景需求。可视化运维 提供独立的运维控制台,支持作业配置、监控、启停等操作,降低运维成本。
当当 Elastic-job 开源项目的十项特性 - 树叶云
一、为什么需要作业 (定时任务)? 作业即定时任务。一般来说,系统可使用消息传递代替部分使用作业的场景。两者确有相似之处。可互相替换的场景,如队列表。将待处理的数据放入队列表,然后使用频率极短的定时任务拉取队列表的数据并处理。这种情况使用消息中间件的推送模式可更好的处理实时性数据。而且基于数据库的消息存储吞吐量远远小于基于文件的顺序追加消息存储。但在某些场景下则不能互换:时间驱动 OR 事件驱动:内部系统一般可以通过事件来驱动,但涉及到外部系统,则只能使用时间驱动。如:抓取外部系统价格。每小时抓取,由于是外部系统,不能像内部系统一样发送事件触发事件。批量处理 OR 逐条处理:批量处理堆积的数据更加高效,在不需要实时性的情况下比消息中间件更有优势。而且有的业务逻辑只能批量处理,如:电商公司与快递公司结算,一个月结算一次,并且根据送货的数量有提成。比如,当月送货超过 1000 则额外给快递公司多 1% 优惠。非实时性 OR 实时性:虽然消息中间件可以做到实时处理数据,但有的情况并不需要如的实时。如:VIP 用户降级,如果超过 1 年无购买行为,则自动降级。这类需求没有强烈的时间要求,不需要按照时间精确的降级 VIP 用户。系统内部 OR 系统解耦。作业一般封装在系统内部,而消息中间件可用于系统间解耦。当当之前使用的作业系统比较散乱,各自为战,大致分为以下 4 种:Quartz:Java 事实上的定时任务标准。但 Quartz 关注点在于定时任务而非数据,并无一套根据数据处理而定制化的流程。虽然 Quartz 可以基于数据库实现作业的高可用,但缺少分布式并行执行作业的功能。TBSchedule:阿里早期开源的分布式任务调度系统。代码略陈旧,使用 timer 而非线程池执行任务调度。众所周知,timer 在处理异常状况时是有缺陷的。而且 TBSchedule 作业类型较为单一,只能是获取/处理数据一种模式。
Elastic-Job:分布式任务调度的实践指南
一、Elastic-Job 概述 Elastic-Job 是一个面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目组成:Elastic-Job-Lite 和 Elastic-Job-Cloud。Elastic-Job-Lite:定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。它不需要额外的中心化调度组件,各节点通过对等通信和注册中心 (如 ZooKeeper) 实现分布式协调。Elastic-Job-Cloud:则基于 Mesos 和 ZooKeeper,以私有云平台的方式提供集资源、调度以及分片为一体的全量级解决方案。它更适合需要高度资源管理和隔离的场景。二、Elastic-Job 的工作原理 Elastic-Job 的核心思想是将任务拆分成多个子任务 (分片),并在多个节点上并行执行。以下是其主要工作流程:任务注册:任务启动时,首先向注册中心 (如 ZooKeeper) 注册任务信息,包括任务名称、分片信息等。节点选举:通过注册中心实现节点选举,选出一个或多个主节点,用于处理分片等集中式任务。任务分片:主节点根据任务配置和节点信息,将任务划分为多个分片,并将分片信息同步到注册中心。任务执行:各节点从注册中心获取分片信息,并启动相应数量的线程来执行分片任务。任务监控:监控任务执行状态,并在需要时进行重试、告警等操作。三、Elastic-Job 的功能特性 Elastic-Job 凭借其丰富的功能特性,满足了多样化的分布式任务调度需求:弹性扩容缩容:支持在运行中动态增减节点,下次任务执行前自动重新分片,不影响当前任务执行。失效转移:主节点或执行节点宕机时,其他节点可以接管其任务分片,确保任务不丢失。并行调度:支持将任务拆分为多个分片,并行执行,提高任务处理效率。丰富的作业类型:支持 SimpleJob、DataFlowJob、ScriptJob 等多种作业类型,满足不同场景需求。
FAQ
Elastic-Job 有哪些子项目?
由 Elastic-Job-Lite 和 Elastic-Job-Cloud 两个相互独立的子项目组成。
分布式分片是如何实现的?
主节点根据任务配置和节点信息,将任务划分为多个分片,并将分片信息同步到注册中心。
相比 Quartz 有什么优势?
解决了 Quartz 缺少分布式并行执行作业的功能,不能实现水平扩展的问题。