引言:算力碎片化的破局之道
在 AI 落地的深水区,架构师面临的最大挑战并非算法本身,而是算力环境的碎片化 。客户现场可能要求使用英伟达(Nvidia)的 GPU 进行高密度推理,也可能出于国产化信创要求部署华为昇腾(Ascend)或瑞芯微(Rockchip)的 NPU 边缘盒子。传统的 AI 平台往往绑定特定厂商的 SDK,导致一套代码难以在 X86 服务器和 ARM 边缘端同时运行,90% 的开发时间都浪费在了环境适配和编译依赖上。

今天,我们将深入剖析 YiheCode Server 的底层架构。这套系统通过 Docker 容器化与微服务解耦设计,实现了对 X86/ARM 指令集及多种 GPU/NPU 硬件的"全兼容"。它如何通过架构层面的创新,兑现"减少 95% 开发成本"的承诺?让我们一探究竟。
一、 核心架构:软硬解耦的微服务设计
YiheCode Server 的设计哲学是**"核心平台与计算单元分离"。系统并没有将算法推理代码死锁在后端进程中,而是构建了一个边缘计算调度中心(Edge Orchestration Center)**。
其核心逻辑在于:
- 控制平面(Control Plane):基于 Java Spring Boot 开发,负责设备管理、用户权限、告警逻辑,运行在中心服务器(通常是 X86 Docker 环境)。
- 数据平面(Data Plane):算法推理程序独立部署在边缘盒子(Edge Box)上,直接调用本地 NPU/GPU 硬件加速。
- 通信协议:两者通过轻量级的 Socket 或 HTTP API 进行指令交互,实现了物理位置和硬件架构的彻底解耦。
这种架构使得中心平台无需关心边缘端是英伟达显卡还是国产化芯片,只需发送"启动算法"或"停止算法"的指令,边缘端负责执行并将结果回传。
二、 硬件适配实战:X86 与 ARM 的异构部署
根据 Gitee 仓库的《新系统架构》图示,YiheCode Server 支持极其灵活的组网方式。无论是云端的 X86 集群,还是前端的 ARM 边缘计算,都能通过统一的接口接入。

2.1 边缘盒子(ARM/NPU)的接入管理
系统提供了一个专门的**"边缘平台"**模块,用于管理不同芯片类型的边缘设备。
- 设备纳管:支持查看盒子的芯片类型(如 1684x、RK3588 等)、IP 地址、在线状态及心跳时间。
- 算法分发:开发者可以在界面上选择特定的算法模型(如烟火识别、安全帽检测),并将其推送到指定的 ARM 边缘盒子上运行。
- 版本管理:支持对边缘盒子的算法程序进行版本升级与降级,无需现场插拔 U 盘。
边缘盒子配置逻辑(模拟):
json
{
"device_info": {
"box_name": "Factory_Edge_Node_01",
"chip_type": "Rockchip_RK3588", // 识别芯片类型以加载对应驱动
"architecture": "ARM64",
"ip_address": "192.168.10.50"
},
"algorithm_runtime": {
"assigned_models": [
"hard_hat_detect_v2.0",
"smoke_fire_detect_v1.5"
],
"resource_limit": {
"gpu_memory_percent": 80,
"cpu_cores": "0-3"
}
},
"status": "Online"
}
2.2 流媒体服务的集群调度(X86/ZLMediaKit)
对于中心管理平台,系统采用了 ZLMediaKit 作为流媒体服务核心。为了应对海量视频流的并发压力,架构支持ZLMediaKit 集群化部署。
ZLMediaKit 节点分配策略(基于最小负载):
python
def assign_camera_to_zlm(camera_stream):
"""
摄像头流媒体节点分配算法
"""
zlm_cluster = get_zlm_nodes_status() # 获取所有流媒体节点状态
# 核心策略:寻找流数量最少的节点
target_node = find_min_load_node(zlm_cluster)
if target_node:
# 下发拉流指令
result = target_node.api.pull_stream(
stream_url = camera_stream.source_url,
proxy_mode = True # 开启代理模式,减少中心带宽压力
)
# 更新数据库记录
camera_stream.media_node_id = target_node.id
camera_stream.save()
log.info(f"摄像头 {camera_stream.name} 已分配至节点 {target_node.ip}")
return result
else:
raise Exception("无可用流媒体节点")
三、 部署方案:基于 Docker 的容器化交付
YiheCode Server 强调"私有化部署"和"源码交付",为了保证在不同客户环境下的稳定性,推荐使用 Docker 进行部署。这种交付方式屏蔽了底层操作系统的差异(无论是 CentOS 还是 Ubuntu),确保了环境一致性。
3.1 环境准备
根据官方文档,私有化部署需要预先安装 Docker 和 Docker-Compose。
3.2 docker-compose.yml 核心配置
yaml
version: '3.5'
services:
# 1. 数据库服务 (PostgreSQL)
postgres:
image: postgres:12
container_name: ai_vms_db
environment:
POSTGRES_DB: yihecode
POSTGRES_USER: admin
POSTGRES_PASSWORD: secure_password
volumes:
- ./data/postgres:/var/lib/postgresql/data
restart: always
# 2. 缓存服务 (Redis)
redis:
image: redis:6
container_name: ai_vms_redis
volumes:
- ./data/redis:/data
restart: always
# 3. 流媒体服务 (ZLMediaKit)
zlmediakit:
image: zlmediakit/zlmediakit:master
container_name: zlmediakit
# 注意:边缘节点可能需要特定的硬件编解码权限
ports:
- "1935:1935" # RTMP
- "80:80" # HTTP
- "8443:8443" # HTTPS
volumes:
- ./config/zlmediakit:/opt/media/conf
restart: always
# 4. 核心后端服务
backend:
build: ./backend
container_name: yihecode_backend
depends_on:
- postgres
- redis
environment:
DB_HOST: postgres
REDIS_HOST: redis
ports:
- "8005:8005"
restart: always
# 5. 前端服务
frontend:
build: ./frontend
container_name: yihecode_frontend
ports:
- "8080:80"
restart: always
四、 总结
YiheCode Server 的架构设计在"通用性"与"高性能"之间找到了完美的平衡点。

它通过边缘计算架构 ,将繁重的 AI 推理任务下沉到前端 NPU/GPU 盒子中,释放了中心服务器的压力;同时,利用 Docker 容器化技术,解决了 X86 与 ARM 混合部署的环境依赖难题。对于需要在复杂硬件环境下快速交付 AI 视频项目的集成商而言,这套架构不仅提供了源码级的透明度,更通过标准化的接口定义,大幅降低了适配不同芯片厂商 SDK 的高昂成本。
架构师建议 :
在部署边缘盒子时,请务必参考仓库中的《新系统架构》图示。对于跨网段的场景,建议在边缘端部署 ZLMediaKit 节点进行拉流和转推,仅将关键的告警截图和视频片段回传至中心,以节省宝贵的公网带宽。