【边缘计算实战】P2:Docker Compose 搭建巡检边缘运行时(含 /infer 与心跳)
【边缘计算实战】P2:Docker Compose 搭建巡检边缘运行时(含 /infer 与心跳)
系列:巡检机器人边云协同(P1→P2→P3→P4)
代码仓库:https://gitee.com/ghaweiuptgb/edge-computing
本篇目录:projects/p02-edge-runtime
前置:建议先读 P1(理解卸载在解决什么问题)
一、为什么需要 P2?
P1 里的「边缘节点」是 Python 对象。要对接真实巡检系统,至少得有:
- 可 HTTP 调用的推理接口
- 多节点拓扑(边 A / 边 B / 云)
- 服务发现与健康检查(节点挂了能知道)
P2 用 Docker Compose + FastAPI 做最小运行时:不上 K8s,不上 Redis,够研0 演示与联调。
二、总体拓扑
robot-sim ──/infer──► edge-node-a
edge-node-a/b ──register/heartbeat──► registry
cloud-stub ──register/heartbeat──► registry
| 服务 | 端口 | 作用 |
|---|---|---|
| registry | 8000 | 注册 / 心跳 / 节点列表 |
| edge-node-a | 8001 | 弱一点的边 |
| edge-node-b | 8002 | 强一点的边 |
| cloud-stub | 8003 | 云端桩(算力强、固有时延大) |
| robot-sim | 8004 | 模拟巡检任务与电量 |
三、核心接口约定
1. 健康与信息
GET /health→{"status":"ok", ...}GET /info→ 节点角色、CPU、支持模型等
2. 推理 /infer
{
"task_id": "task-0001",
"model": "auto",
"payload": {"image_size_kb": 256, "complexity": "medium"},
"timeout_ms": 800
}
model 取值:
small:快large:慢auto:先 large,失败/超时再降级 small(degraded=true)
3. Registry
POST /registerPOST /heartbeatGET /nodes(含healthy字段,心跳超时则变 false)
四、Mock 推理怎么模拟「算力差异」?
研0 不必一上来接 ONNX。P2 用 asyncio.sleep 模拟服务时间:
service ≈ base_latency + model_base * complexity * size / cpu_cores
并用 Semaphore 限制并发;若预估已超时,则 快速失败(返回 ok=false),保证过载时进程不崩。
视觉组以后给
.onnx,只需替换引擎内部,HTTP 契约保持不变。说明见仓库docs/onnx-replacement.md。
五、一键启动
前提:Docker Desktop 已运行。
cd edge-computing/projects/p02-edge-runtime
pip install -r requirements.txt
docker compose up --build -d
python scripts/smoke_test.py
python scripts/load_test.py --url http://127.0.0.1:8001
python scripts/accept_p2.py
浏览器可直接看:
- http://127.0.0.1:8000/nodes
- http://127.0.0.1:8004/status
六、实现要点(面试/组会也好讲)
1. 一套代码,三套节点
edge-a / edge-b / cloud 共用 compute_node.app,靠环境变量区分:
NODE_ID/NODE_ROLECPU_CORES/BASE_LATENCY_MSREGISTRY_URL/SELF_URL
避免复制三份几乎相同的服务代码。
2. 心跳 TTL
Registry 内存表记录 last_heartbeat_ts。docker compose stop edge-node-a 后数秒,/nodes 里该节点 healthy=false。
这就是「复杂环境」里节点掉线的最小可观测性。
3. 降级与快失败
高负载下系统可以变慢、可以失败,但 不能无响应崩溃——这是边缘运行时的基本功。
七、验收清单(本仓库脚本已覆盖)
- Compose 一键启动
- 停掉 edge 后 registry 感知不健康
- 过载下
/infer返回失败而非服务挂死 - 有 ONNX 替换说明文档
八、小结与下期预告
P2 把节点变成了「真服务」。
下一篇 【P3】在线卸载与复杂环境工况:把 P1 的策略接到 P2 的 /infer,并注入弱网、过载、节点宕机,对比仿真与在线结果。
标签建议:Docker Compose FastAPI 边缘计算 微服务 心跳检测 推理服务
系列导航:P1 仿真 → P2 运行时(本篇) → P3 在线卸载 → P4 可观测诊断
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)