分布式定时任务 | 青训营笔记

144 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

分布式调度任务

当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度

Asynq 是一个 Go 库,用于排队任务并与 worker 异步处理它们。它由 Redis 提供支持,旨在实现可扩展且易于上手。

Asynq 工作原理的高级概述:

  • 客户端将任务放入队列
  • 服务器从队列中拉取任务并为每个任务启动一个工作协程
  • 任务由多个worker同时处理

任务队列用作跨多台机器分配工作的机制。一个系统可以由多个工作服务器和代理组成,使其具有高可用性和水平扩展特性。

Asynq有很多易用的特性,下面简单列举几个:

  • 任务调度
  • 保证任务至少执行一次
  • 失败任务重试
  • 自动恢复
  • 优先级队列
  • 使用唯一选项对任务进行重复数据删除
  • 周期性任务
  • 可视化的管理界面
  • 支持Redis集群和哨兵模式 golang分布式任务主要分为

master 服务端   主要提供后台操作的api,添加定时任务和一次性任务到etcd中,对任务进行增删改查 日志  服务发现 服务注册等功能

worker 客户端   主要监听etcd中的任务(与自己服务器ip相关的任务) 一次性任务立即执行即可,定时任务解析表达式后,放入内存中,定时执行 ** master:**

主要负责接收后台对任务的管理 提供api接口

go run .\master\main\master.go -config= .\master\main\master.json

** worker:**

监听任务,执行任务,任务调度