【边缘计算实战】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 /register
  • POST /heartbeat
  • GET /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_ROLE
  • CPU_CORES / BASE_LATENCY_MS
  • REGISTRY_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 可观测诊断

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐