docs: update to use PostgreSQL NOTIFY for broadcast (lighter than Redis)

This commit is contained in:
movingsam 2026-03-02 18:21:59 +08:00
parent 27ea1d1c21
commit ee6bb763b9
2 changed files with 16 additions and 26 deletions

View File

@ -22,7 +22,7 @@
### 进行中 ### 进行中
- [ ] 实现 console 驱动的配置管理(配置在 fengling-console 变更,网关监听并重载) - [ ] 实现 console 驱动的配置管理(配置在 fengling-console 变更,网关监听并重载)
- [ ] 通过广播事件支持多网关实例部署 - [ ] 通过 PostgreSQL NOTIFY 广播支持多网关实例部署
- [ ] 将 K8s 健康检查从网关移除(委托给 console - [ ] 将 K8s 健康检查从网关移除(委托给 console
### 范围外 ### 范围外
@ -34,7 +34,8 @@
## 背景 ## 背景
**生态系统结构:** **生态系统结构:**
```fengling-gateway/ # 当前项目 - API 网关 (YARP) ```
fengling-gateway/ # 当前项目 - API 网关 (YARP)
↓ 路由流量到: ↓ 路由流量到:
fengling-console/ # 中央管理控制台 - 配置、租户管理 fengling-console/ # 中央管理控制台 - 配置、租户管理
fengling-console-web/ # 控制台 Web UI fengling-console-web/ # 控制台 Web UI
@ -43,13 +44,13 @@ fengling-member-service/ # 会员服务
fengling-activity/ # 活动服务 fengling-activity/ # 活动服务
fengling-platform/ # 平台服务 fengling-platform/ # 平台服务
fengling-risk-control/ # 风控服务 fengling-risk-control/ # 风控服务
fengling-service-discovery/ # 服务发现 fengling-service-discovery/# 服务发现
``` ```
**架构决策(新):** **架构决策(新):**
- 网关配置由 fengling-console 管理,网关不直接配置 - 网关配置由 fengling-console 管理,网关不直接配置
- Console 发布配置变更 → 网关订阅并重载 - Console 发布配置变更 → 网关订阅并重载
- 多实例支持通过广播实现Redis pub/sub 或 PostgreSQL NOTIFY - 多实例支持通过 PostgreSQL NOTIFY/LISTEN 实现(更轻量,无需 Redis
- Console 负责所有 K8s 服务健康监控 - Console 负责所有 K8s 服务健康监控
- 网关只处理请求路由 - 网关只处理请求路由
@ -64,18 +65,13 @@ fengling-service-discovery/ # 服务发现
- fengling-console 已实现 GatewayController 和 GatewayService - fengling-console 已实现 GatewayController 和 GatewayService
- Console 拥有 GatewayDbContext可直接管理网关配置数据 - Console 拥有 GatewayDbContext可直接管理网关配置数据
- Console 的 ReloadGatewayAsync() 目前为空实现,未实现广播机制 - Console 的 ReloadGatewayAsync() 目前为空实现,未实现广播机制
- Redis 已引用但未使用,可用于 pub/sub 广播 - 网关已有 PgSqlConfigChangeListener 使用 NOTIFY/LISTEN可复用
- 硬编码凭据(安全风险)
- JWT Token 未验证(安全风险)
- API 端点无认证(安全风险)
- 负载均衡锁竞争
- 缺少单元测试
## 约束 ## 约束
- **多实例**:网关必须支持同时运行多个实例 - **多实例**:网关必须支持同时运行多个实例
- **热重载**:配置变更无需重启 - **热重载**:配置变更无需重启
- **技术栈**.NET 10.0, YARP, PostgreSQL, Redis - **技术栈**.NET 10.0, YARP, PostgreSQL
- **部署**Docker + Kubernetes - **部署**Docker + Kubernetes
## 关键决策 ## 关键决策
@ -83,7 +79,7 @@ fengling-service-discovery/ # 服务发现
| 决策 | 理由 | 结果 | | 决策 | 理由 | 结果 |
|------|------|------| |------|------|------|
| Console 驱动配置 | 集中管理,单一事实来源 | ✓ 良好 | | Console 驱动配置 | 集中管理,单一事实来源 | ✓ 良好 |
| 广播事件实现多实例 | 支持水平扩展 | ✓ 良好 | | PostgreSQL NOTIFY 广播 | 轻量方案,无需额外依赖 | ✓ 良好 |
| K8s 健康委托给 console | 降低网关复杂度console 是运维中心 | ✓ 良好 | | K8s 健康委托给 console | 降低网关复杂度console 是运维中心 | ✓ 良好 |
| 保持 YARP 为核心 | 微软维护,支持良好 | ✓ 良好 | | 保持 YARP 为核心 | 微软维护,支持良好 | ✓ 良好 |

View File

@ -51,7 +51,7 @@
| 决策 | 日期 | 备注 | | 决策 | 日期 | 备注 |
|------|------|------| |------|------|------|
| Console 驱动配置 | 2026-03-02 | 配置在 fengling-console 变更,网关监听 | | Console 驱动配置 | 2026-03-02 | 配置在 fengling-console 变更,网关监听 |
| 多实例广播 | 2026-03-02 | Redis pub/sub 或 PostgreSQL NOTIFY | | PostgreSQL NOTIFY 广播 | 2026-03-02 | 使用 PostgreSQL NOTIFY/LISTEN更轻量 |
| K8s 健康委托 | 2026-03-02 | Console 处理 K8s 健康,非网关 | | K8s 健康委托 | 2026-03-02 | Console 处理 K8s 健康,非网关 |
### Console 集成现状 ### Console 集成现状
@ -60,13 +60,7 @@
- Console 已实现 GatewayController 和 GatewayService - Console 已实现 GatewayController 和 GatewayService
- Console 拥有 GatewayDbContext可直接管理网关配置 - Console 拥有 GatewayDbContext可直接管理网关配置
- ReloadGatewayAsync() 为空实现,需要实现广播机制 - ReloadGatewayAsync() 为空实现,需要实现广播机制
- Redis 已引用但未使用,可用于 pub/sub - 网关已有 PgSqlConfigChangeListener 使用 NOTIFY/LISTEN可复用
| 决策 | 日期 | 备注 |
|------|------|------|
| Console 驱动配置 | 2026-03-02 | 配置在 fengling-console 变更,网关监听 |
| 多实例广播 | 2026-03-02 | Redis pub/sub 或 PostgreSQL NOTIFY |
| K8s 健康委托 | 2026-03-02 | Console 处理 K8s 健康,非网关 |
### Roadmap 演进 ### Roadmap 演进