基于mac的设备客户端任务队列调度服务 ——key设计


调度服务前文

基于mac的设备客户端任务队列调度服务

一、MAC 任务调度相关 Key

sensitive:mac:queue:<mac> — List(每个 MAC 一个)

每个设备的任务队列。入队时 RPUSH,消费时 RPOP(LIFO 栈行为)。过期检查、死信重投也在此操作。

sensitive:mac:active:<mac> — String(SET NX EX)

运行锁,防止同一 MAC 被多个 Worker 同时调度。NX 保证原子性获得锁,EX 自动过期(默认 900 秒)防止死锁,消费完成后手动 DELETE 释放。

sensitive:mac:schedule — ZSet(全局唯一)

调度有序集合,score = 老化等待秒数(封顶 600 秒 × 权重)。ZREVRANGE 按等待时间从高到低获取候选 MAC,实现 "等最久的先调度" 策略。

sensitive:mac:meta:<mac> — Hash(每个 MAC 一个)

元数据,包含以下字段:

字段说明
pending_count队列积压任务数
oldest_created_at最旧任务的创建时间,用于计算老化分数
updated_at最后更新时间
unschedulable_until退避到期时间戳(defer 指数退避时设置)

二、Worker 管理相关 Key

sensitive:worker:<hostname>:<pid> — Hash(每个 Worker 进程一个)

Worker 资源注册与心跳,包含 CPU/GPU/内存利用率、活跃任务数、最后心跳时间等。Worker 启动时 HSET 注册,每 15 秒 心跳更新,TTL 过期(默认 30 秒)后自动清理。


三、全局监控与过载保护 Key

sensitive:global_pending — String(计数器)

全局待处理任务总数。入队 INCR,出队 DECR,用于快速判断系统整体负载。

sensitive:overloaded_macs — Set

过载 MAC 集合。当单个 MAC 积压超过阈值(默认 200)时 SADD,恢复后 SREM。与 global_pending 一起用于 is_queue_overloaded() 过载判断。

sensitive:watermark — String(JSON)

队列水位快照,每 15 秒publish_watermark 定时任务更新,包含 total_pendingmac_countactive_workers,TTL 为发布间隔 + 5 秒。


四、死信与异常 Key

sensitive:dead_letter — List

死信队列。OCR 任务 defer 超过最大次数(默认 5 次)后移入此处,保留最近 10000 条供人工排查。

abnormal:parsed_queue — List

异常数据解析队列。decter 路由收到的异常数据 RPUSH 入队,限制上限 5000 条,TTL 20 秒兜底。


五、Celery Broker 队列(由 Celery 管理)

队列名用途
sensitive.dispatch调度器队列,运行 dispatch_next_mac_sensitive_tasks / process_mac_sensitive_tasks
sensitive.ocrOCR 敏感检测子任务队列
sensitive.text文本敏感检测子任务队列

Key 关系图

                       ┌─────────────────────┐
                       │  sensitive:schedule  │  ← ZSet, 按等待时间排序
                       └──────────┬──────────┘
                                  │
            ┌─────────────────────┼─────────────────────┐
            ▼                     ▼                     ▼
  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐
  │ queue:<mac_A>    │  │ queue:<mac_B>    │  │ queue:<mac_C>    │  ← List, 任务数据
  │ active:<mac_A>   │  │ active:<mac_B>   │  │ active:<mac_C>   │  ← String, 运行锁
  │ meta:<mac_A>     │  │ meta:<mac_B>     │  │ meta:<mac_C>     │  ← Hash, 元数据
  └──────────────────┘  └──────────────────┘  └──────────────────┘
                                  │
                    ┌─────────────┴─────────────┐
                    ▼                           ▼
          ┌──────────────────┐       ┌──────────────────────┐
          │ global_pending   │       │ sensitive:worker:*   │  ← Worker 心跳
          │ overloaded_macs  │       │ watermark            │  ← 水位快照
          │ dead_letter      │       │ parsed_queue         │  ← 异常数据
          └──────────────────┘       └──────────────────────┘

声明:一代明君的小屋|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 基于mac的设备客户端任务队列调度服务 ——key设计


欢迎来到我的小屋