go的Job Scheduling

背景

司内线上服务有很多异步脚本,大量冗余代码,管理很不方便
急需一个美丽的框架,让代码变得美好

go get github.com/go-co-op/gocron/v2

介绍

gocron is a job scheduling package which lets you run Go functions at pre-determined intervals.

概念

  • Job
    Job封装(encapsulates)一个“任务task”,它由一个go函数和任意函数参数组成。
    该作业向调度程序提供该作业下次应计划运行的时间。
    The Job then provides the scheduler with the time the job should next be scheduled to run.

  • Scheduler
    调度程序跟踪(keeps track of)所有作业,并在每个作业准备好运行时将其发送到执行程序。
    The scheduler sends each job to the executor when it is ready to be run

  • Executor
    执行器调用作业的任务并管理不同作业执行时序要求的复杂性
    manages the complexities of different job execution timing requirements
    例如
    单例singletons不应相互溢出(overrun each other)
    限制运行的作业的最大数量 imiting the max number of jobs running)

能力

Job types

Jobs can be run at various intervals.

Duration: Jobs can be run at a fixed time.Duration.
Random duration: Jobs can be run at a random time.Duration between a min and max.
Cron: Jobs can be run using a crontab.
Daily: Jobs can be run every x days at specific times.
Weekly: Jobs can be run every x weeks on specific days of the week and at specific times.
Monthly: Jobs can be run every x months on specific days of the month and at specific times.
One time: Jobs can be run once at a specific time. These are non-recurring jobs.
可以以各种形式执行:a fixed time.Duration、a random time.Duration between a min and max、crontab、every x days at specific times、every x weeks on specific days of the week and at specific times、every x months on specific days of the month and at specific times、run once at a specific time
非经常性工作:non-recurring jobs

Concurrency Limits

Jobs can be limited individually or across the entire scheduler.
可以单独或跨整个scheduler限制Job。

Per job limiting with singleton mode: Jobs can be limited to a single concurrent execution that either reschedules (skips overlapping executions) or queues (waits for the previous execution to finish).
Per scheduler limiting with limit mode: Jobs can be limited to a certain number of concurrent executions across the entire scheduler using either reschedule (skip when the limit is met) or queue (jobs are added to a queue to wait for the limit to be available).
Note: A scheduler limit and a job limit can both be enabled.

Distributed instances of gocron

Multiple instances of gocron can be run.
多实例

Elector: An elector can be used to elect a single instance of gocron to run as the primary with the other instances checking to see if a new leader needs to be elected.
elector用于选择一个 gocron 实例作为主(primary)实例运行,其他实例则检查是否需要选举新的领导者。
Implementations: go-co-op electors

Locker: A locker can be used to lock each run of a job to a single instance of gocron.
Locker可用于将作业的每次运行锁定到 gocron 的单个实例
Implementations: go-co-op lockers

我用的是redis实现的分布式

Events

Job events can trigger actions.

Listeners

Can be added to a job, with event listeners, or all jobs across the scheduler to listen for job events and trigger actions.
可以添加到具有事件侦听器( event listeners)的作业或调度程序中的所有作业中,以侦听作业事件并触发操作

你可能感兴趣的:(go,golang,开发语言,后端)