#cron #scheduler #distributed #consistent-hashing

distributed-scheduler

一个分布式定时任务库

8 个稳定版本

2.1.3 2024年7月9日
2.0.1 2024年7月6日
1.1.0 2024年7月3日
0.1.1 2024年6月25日

数据库接口 中排名 444

Download history 69/week @ 2024-06-19 45/week @ 2024-06-26 639/week @ 2024-07-03 173/week @ 2024-07-10 35/week @ 2024-07-24 20/week @ 2024-07-31

每月下载量 55

AGPL-3.0 或更高版本

41KB
804 行代码(不包括注释)

分布式调度器

Crates.io License GitHub Actions Workflow Status

这是一个可以用于在机器集群上调度任务的分布式调度器。调度器用 Rust 实现,并使用 tokio 库进行异步 I/O。调度器设计为容错,可以从调度器自身或集群中机器的故障中恢复。

当前 cronjob 提供商为 job_scheduler,但它不再维护,所以我可能在将来用另一个包替换它。

架构

调度器由多个组件组成,这些组件协同工作以调度任务。主要组件包括

  • 定时器:负责在集群上调度任务的主要调度器。它负责维护集群状态并在集群中的机器上调度任务。
  • 节点池:节点池负责管理单个机器上的节点。它将检查作业是否应在本地机器上运行。调度算法基于一致性哈希。
  • 驱动器:我们提供多个驱动器来运行作业。驱动器负责维护作业状态并同步节点列表。

可用的驱动器

  • Redis(键扫描)
  • Redis(Z-SET)
  • Etcd(租约)
  • Consul(键值对)

用法

要使用调度器,您可以在 examples 目录中查看示例包。以下是一个简要示例

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let rdb = redis::Client::open("redis://127.0.0.1:6379").unwrap();

    let driver = distributed_schedular::driver::redis::RedisDriver::new(rdb).await?;
    let np = distributed_schedular::node_pool::NodePool::new(driver);
    let cron = distributed_schedular::cron::Cron::new(np).await?;

    cron.add_job("test", "* * * * * *".parse().unwrap(), || {
        println!("Hello, I run every seconds");
    }).await?;

    Ok(())
}

许可

该项目采用 AGPL-3.0 许可证 - 有关详细信息,请参阅 LICENSE 文件。

依赖项

~7–18MB
~233K SLoC