Skip to content

架构总览

多模块拆进程 + nginx 负载均衡

本项目参照 RuoYi-Vue-Plus 的功能,用 Go + Gin 重新实现。架构核心是 多模块拆进程 + nginx 负载均衡:每个业务模块编译成独立 binary、独立进程启动;另提供 standalone 单体入口,四模块同进程,便于本地调试。

四个业务模块

模块职责
auth登录 / 验证码 / 三方绑定
system用户 / 角色 / 菜单 / 部门 / 字典 / 参数 / 公告 / 客户端 / 社交账号
monitor在线用户 / 登录日志 / 操作日志 / 缓存监控
resourceOSS 对象存储 / 消息推送 / 短信 / 邮箱验证码

两种部署形态

单体(standalone)

一个进程,四个模块同进程。cmd/standalone/main.gogin.New() + 全局中间件装配一次,再调各模块 RegisterRoutes(r, "/<prefix>")。进程内自带 /resource 前缀(等价于网关 StripPrefix=1 后的效果),保留 /auth/system/monitor 前缀与前端直连的网关路径一致。

微服务(modular)

四个进程,每个模块一个。各 internal/<module>/router.goInitRouter() 各自 gin.New() + r.Use(...),然后 RegisterRoutes(r, "")空前缀注册)。/resource 由 nginx 剥离后匹配裸路径。前端始终打 /auth/system/resource/monitor 前缀路径,两种部署前端无感。

数据库与缓存

  • 数据库: MySQL + GORM,所有进程共用同一个库(ry-cloud)。
  • Redis 做会话 / 缓存 / 分布式锁 / 验证码 / 推送分发。

关键设计取舍

  • auth 复用 system 走 in-processinternal/auth/service 直接 import internal/system/service,同进程函数调用, 不走 HTTP。auth 进程也连同一数据库。
  • 只有 repository 层接触 GORM:service 拿到的是 model,不感知 SQL。
  • 模块隔离internal/systeminternal/auth 之间只能通过 service 层导出的接口交互,不跨模块 import handler/repository/model 内部。
  • pkg 不能 import internal:注解层落库等场景用 Recorder 回调让 internal 反向注册(见 pkg 参考 / oplog)。

接下来

基于 MIT 协议开源