[Improvement] 考虑将 manager-api 从 Java 迁移至 Go
Author: xuruirayCreated Apr 6, 2026Updated Aug 14, 2026
背景
当前 manager-api 模块基于 Java(Spring Boot)实现,在部署和资源占用方面存在一些不足:
- 内存占用高:Java 运行时(JVM)即使在空闲状态下也需要较大的内存开销,对于低配置服务器(如 2核4G 的推荐配置)不太友好
- 启动速度慢:Spring Boot 应用冷启动需要较长时间,影响开发调试和容器扩缩容效率
- Docker 镜像体积大:需要打包 JDK 运行时,镜像体积相比 Go 的静态编译产物大很多
- 依赖管理重:Maven/Gradle 依赖链较深,构建耗时长
建议
考虑将 manager-api 迁移至 Go 语言实现,主要优势:
- 资源占用低:Go 编译为原生二进制,内存占用通常只有 Java 的 1/5 ~ 1/10
- 启动极快:毫秒级启动,适合容器化部署和弹性扩缩容
- 镜像精简:静态编译的二进制可基于 scratch/alpine 构建,镜像体积可缩小到 10-20MB
- 并发模型好:goroutine 天然适合处理大量并发连接,与项目的 MQTT/WebSocket 场景契合
- 部署简单:单个二进制文件,无需安装运行时环境
可能的迁移路径
- 新建 Go 模块,逐步替换 Java API 接口
- 保持数据库 schema 和 API 接口不变,前端 manager-web 无需改动
- 使用 GORM 或 sqlx 替代 MyBatis-Plus
- 使用 Gin 或 Echo 替代 Spring Boot
讨论
这只是一个改进建议,想听听维护者和社区的看法。如果方向可行,我可以贡献部分迁移工作。
Source: xinnan-tech/xiaozhi-esp32-server