53 lines
2.9 KiB
Markdown
53 lines
2.9 KiB
Markdown
# 系统架构
|
||
|
||
## 模块边界
|
||
|
||
仓库包含 21 个 Go module:`module/` 下 18 个业务模块可独立运行,`pkgs/all` 聚合其中 15 个 base、ec、finance 服务,`pkgs/ecmall` 聚合其中 14 个 base、ec、finance 服务(不含 cloud);social 三个模块暂未聚合,`scripts/api-docgen` 是文档生成工具 module,不属于业务服务。
|
||
|
||
典型模块目录职责:
|
||
|
||
| 目录 | 职责 |
|
||
| --- | --- |
|
||
| cmd/main | 进程入口、配置和生命周期 |
|
||
| internal/config | 模块配置 |
|
||
| internal/impl | DB、Redis、etcd、内存缓存 |
|
||
| internal/logic | 业务逻辑 |
|
||
| internal/server | 服务构造与注册 |
|
||
| service | 对聚合宿主(`pkgs/all`、`pkgs/ecmall`)公开的 Expose API |
|
||
| pb | protobuf 生成代码 |
|
||
| etc | 配置样例 |
|
||
|
||
独立入口初始化自己的基础设施。聚合调用 Expose 时不重复初始化,而是注入 `pkgs/all` 创建的共享对象。
|
||
|
||
## pkgs/all 启动流程
|
||
|
||
1. 校验 --workspace 并读取 etc/<workspace>_<runtime>.yaml。
|
||
2. 初始化共享 DB、Redis、etcd 和内存缓存。
|
||
3. 创建独立端口的 gRPC server,以及承载 grpc-gateway、动态 RPC 和 Gin 的 HTTP server。
|
||
4. 按 Services 或 BSM_SERVICES 调用模块 Expose。
|
||
5. 分别监听 `Server.GRPC` 和 `Server.HTTP` 配置的地址,并响应退出信号。
|
||
|
||
HTTP 请求先进入 grpc-gateway;gateway 返回 404 时回退到 Gin。Gin 提供 `/rpc/{package}/{service}/{method}` 动态 JSON-to-protobuf unary 调用,以及 `/rest/{module}/...` 原生 REST 路由。动态调用通过本机 gRPC 端口进入完整 gRPC 处理链。
|
||
|
||
## pkgs/ecmall 启动流程
|
||
|
||
`pkgs/ecmall` 与 `pkgs/all` 共享同一套 server、鉴权、动态 RPC 与配置装配实现,启动流程完全一致,差别只在注册表、端口和专项配置:
|
||
|
||
| 项目 | pkgs/all | pkgs/ecmall |
|
||
| --- | --- | --- |
|
||
| module 路径 | bsm/full/pkgs/all | bsm/full/pkgs/ecmall |
|
||
| 监听端口 | gRPC 12000 / HTTP 12001 | gRPC 12300 / HTTP 12301 |
|
||
| 注册服务 | 15 个(10 base + 4 ec + wallet) | 14 个(9 base + 4 ec + wallet,不含 cloud) |
|
||
| 专项配置 | Fts、Mgt、Passport、Sender、Wallet | Fts、Mgt、Passport、Sender、Wallet |
|
||
| 本地 replace | 15 个业务模块 | 14 个业务模块 |
|
||
|
||
`ecmall` 的注册表包含除 cloud 外的全部 base、ec、finance 服务,未注册的 cloud 既不会暴露 gRPC/gateway 路由,也不会解析其专项配置。两个入口使用同一份 `module/` 代码,可同时运行。
|
||
|
||
## 依赖注入
|
||
|
||
ExposeOptions.Dependencies 可接收 RedisClient、etcd Client、gorm DB 和 Cache。参数非 nil 时覆盖模块 internal/impl 对象。address、market、order、mgt 的业务数据库访问已统一使用 internal/impl.DBService。
|
||
|
||
## 生命周期
|
||
|
||
统一 HTTP server 设置请求头读取超时、空闲超时和最大请求头。关闭时先执行 gRPC GracefulStop;超过 context 截止时间后强制 Stop,再关闭 HTTP server。
|