调度服务前文
一、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_pending、mac_count、active_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.ocr | OCR 敏感检测子任务队列 |
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 │ ← 异常数据
└──────────────────┘ └──────────────────────┘ 

Comments | NOTHING