Files
full/wiki/architecture.md

2.9 KiB
Raw Blame History

系统架构

模块边界

仓库包含 21 个 Go modulemodule/ 下 18 个业务模块可独立运行,pkgs/all 聚合其中 15 个 base、ec、finance 服务,pkgs/ecmall 聚合其中 14 个 base、ec、finance 服务(不含 cloudsocial 三个模块暂未聚合,scripts/api-docgen 是文档生成工具 module不属于业务服务。

典型模块目录职责:

目录 职责
cmd/main 进程入口、配置和生命周期
internal/config 模块配置
internal/impl DB、Redis、etcd、内存缓存
internal/logic 业务逻辑
internal/server 服务构造与注册
service 对聚合宿主(pkgs/allpkgs/ecmall)公开的 Expose API
pb protobuf 生成代码
etc 配置样例

独立入口初始化自己的基础设施。聚合调用 Expose 时不重复初始化,而是注入 pkgs/all 创建的共享对象。

pkgs/all 启动流程

  1. 校验 --workspace 并读取 etc/_.yaml。
  2. 初始化共享 DB、Redis、etcd 和内存缓存。
  3. 创建独立端口的 gRPC server以及承载 grpc-gateway、动态 RPC 和 Gin 的 HTTP server。
  4. 按 Services 或 BSM_SERVICES 调用模块 Expose。
  5. 分别监听 Server.GRPCServer.HTTP 配置的地址,并响应退出信号。

HTTP 请求先进入 grpc-gatewaygateway 返回 404 时回退到 Gin。Gin 提供 /rpc/{package}/{service}/{method} 动态 JSON-to-protobuf unary 调用,以及 /rest/{module}/... 原生 REST 路由。动态调用通过本机 gRPC 端口进入完整 gRPC 处理链。

pkgs/ecmall 启动流程

pkgs/ecmallpkgs/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。