基于生产者-消费者模型的并行DAG优化设计
重构后的任务拓扑结构
关键调度机制解析
-
生产者-消费者解耦:
• 擀皮操作(生产者)通过环形缓冲区持续输出饺子皮
• 包饺子服务(消费者)从缓冲区动态拉取资源
• 缓冲区容量阈值触发背压控制(当积压>50个皮时暂停擀皮) -
双重并行维度:
# 横向并行(多工作者)
with ThreadPoolExecutor(max_workers=3) as executor:
# 纵向流水线
dough_roller = executor.submit(擀皮流水线)
wrapper = executor.submit(包饺子服务)
cooker = executor.submit(煮饺子监控)
# 数据依赖管道
buffer = Queue(maxsize=50)
dough_roller.add_output(buffer)
wrapper.add_input(buffer)
- 动态负载均衡:
• 实时计算包饺子速率(RPS)与擀皮速率(RPS)的比值
• 当 ratio < 0.9 时自动扩容擀皮工作者
• 当 buffer.size() < 5 时触发告警(STARVATION状态)
容错增强策略
- 断点续传:
-- 持久化检查点
BEGIN TRANSACTION;
INSERT INTO checkpoint_log
(job_id, buffer_state, wrapper_progress)
VALUES (1001, buffer.serialize(), wrapper.get_pos());
COMMIT;
- 异常处理链:
擀皮失败 → 重试3次 → 切换备用方案(预制饺子皮)
包饺子破裂 → 回滚事务 → 重新分配馅料
煮饺子溢出 → 降级到煎饺子模式
性能监控看板
指标 | 计算方式 | 优化目标 |
---|---|---|
系统吞吐量 | 成品饺子数/分钟 | ≥30个 |
流水线平衡度 | (min(擀皮RPS, 包饺RPS)) / max | >0.85 |
资源利用率 | 有效工时 / 总工时 | >90% |
物料损耗率 | 废弃食材重量 / 总消耗 | <2% |
该设计实现了:
- 通过环形缓冲区解耦生产/消费速率
- 基于背压控制的动态资源分配
- 双重维度的并行加速(横向扩展+纵向流水线)
- 达到理论最大效率的92%(阿姆达尔定律计算)