LMSTFY入门

LMSTFY是一个由Go语言开发的基于Redis的任务队列服务,提供HTTP REST API,支持任务的生命周期管理,如TTL、延迟触发、重试和死信处理。内部实现依赖Redis的多个数据结构,包括Sorted Set、List和Key-Value存储。服务具有横向扩展能力,并包含监控和限流功能。示例展示了如何发布、消费、删除任务以及使用HTTP API进行交互。
摘要由CSDN通过智能技术生成

lmstfy介绍

GitHub - bitleak/lmstfy: A task queue with REST API

lmstfy是美图架构基础服务团队在 2018 年初基于 Redis 实现的简单任务队列(Task Queue)服务,由go语言开发。lmstfy本身不存储数据,而是使用Redis/Redis Sentinel。因此,数据的完整性和持久性掌握在redis手中,在生产环境中使用AOF和复制来确保这一点。

主要特性:

  • 通过 HTTP REST API 提供服务
  • 支持作业的额外生命周期管理:
    • job TTL (time-to-live)
    • job delay trigger (at second granularity)
    • job auto-retry
    • dead letter
  • 丰富的业务和性能指标
  • 具备横向扩展能力,消费/生成速率限制

内部实现图

官方图:
在这里插入图片描述

参考资料:

  1. lmstfy 的 redis 存储由四部分组成:

Timer Set(sorted Set):用来实现延迟任务的排序,再由后台线程定期将到期的任务写入到 Ready Queue 里面;Timer的实现是利用 zset 根据绝对时间戳进行排序,再由旁路线程定期轮询将到期的任务通过 redis lua script 来将数据原子地转移到 ready queue 里面。

Ready Queue (list):无延时或者已到期任务的队列

Dead Letter (list):消费失败(重试次数到达上限)的任务,可以手动重新放回队列

Job Pool(key-value):存储消息内容的池子

支持延迟的任务队列本质上是两个数据结构的结合: FIFO 和 sorted set。sorted set 用来实现延时的部分,将任务按照到期时间戳升序存储,然后定期将到期的任务迁移至 FIFO(ready queue)。任务的具体内容只会存储一份在 job pool 里面,其他的像 ready queue,timer,deadletter 只是存储 job id,这样可以节省一些内存空间。

  1. 内部主要由四个模块组成:

Pump Thread:每秒轮询 Redis 将到期的任务迁移到就绪队列(ready queue)

Metric Collector:定时收集队列相关统计数据到实例再通过 prometheus exporter 暴露给监控系统

Token Manager:用来管理 namespace 和 token 的模块,namespace 是用来做业务隔离的单位

Producer/Consumer:用来处理用户的任务和消费请求

Default Pool 除了用来存储业务数据,namespace/token 这类元数据也会默认存储到 Default 这个 Redis 池子里面

在这里插入图片描述

使用示例

此处我们在本机安装docker,使用官方提供的docker-compose即可启用体验lmstfy服务。

  1. 首先在拉取lmstfy源码,进入docker目录,通过docker-compose启动容器。

    docker-compose -p test-lmstfy up -d

  2. 创建namespace 和 token,此处会返回token

    curl -XPOST -d “description=test namesapce” “http://127.0.0.1:7778/token/test-ns”

    返回:

    {

    "token": "01GXTC3MF9MHW83RJ2FJJAH7VH"
    

    }

  3. Publish一个内容为value的任务

    curl -XPUT -H “X-token:{ENTER YOUR TOKEN}” -d “value” “http://127.0.0.1:7777/api/test-ns/test-queue?delay=1&ttl=3600&tries=16”

    返回:

    {“job_id”:“01GXTC71FFCCZSFFR3P40G0000”,“msg”:“published”}

  4. Consume任务

    curl -H “X-token:{ENTER YOUR TOKEN}” “http://127.0.0.1:7777/api/test-ns/test-queue?ttr=30&timeout=2”

    返回:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值