From ee6bb763b915480244401cc8c37223a95d2dfc8c Mon Sep 17 00:00:00 2001 From: movingsam Date: Mon, 2 Mar 2026 18:21:59 +0800 Subject: [PATCH] docs: update to use PostgreSQL NOTIFY for broadcast (lighter than Redis) --- .planning/PROJECT.md | 32 ++++++++++++++------------------ .planning/STATE.md | 10 ++-------- 2 files changed, 16 insertions(+), 26 deletions(-) diff --git a/.planning/PROJECT.md b/.planning/PROJECT.md index 209e8e5..8393fa0 100644 --- a/.planning/PROJECT.md +++ b/.planning/PROJECT.md @@ -22,7 +22,7 @@ ### 进行中 - [ ] 实现 console 驱动的配置管理(配置在 fengling-console 变更,网关监听并重载) -- [ ] 通过广播事件支持多网关实例部署 +- [ ] 通过 PostgreSQL NOTIFY 广播支持多网关实例部署 - [ ] 将 K8s 健康检查从网关移除(委托给 console) ### 范围外 @@ -34,22 +34,23 @@ ## 背景 **生态系统结构:** -```fengling-gateway/ # 当前项目 - API 网关 (YARP) +``` +fengling-gateway/ # 当前项目 - API 网关 (YARP) ↓ 路由流量到: fengling-console/ # 中央管理控制台 - 配置、租户管理 -fengling-console-web/ # 控制台 Web UI -fengling-auth-service/ # 认证服务 -fengling-member-service/ # 会员服务 -fengling-activity/ # 活动服务 -fengling-platform/ # 平台服务 -fengling-risk-control/ # 风控服务 -fengling-service-discovery/ # 服务发现 +fengling-console-web/ # 控制台 Web UI +fengling-auth-service/ # 认证服务 +fengling-member-service/ # 会员服务 +fengling-activity/ # 活动服务 +fengling-platform/ # 平台服务 +fengling-risk-control/ # 风控服务 +fengling-service-discovery/# 服务发现 ``` **架构决策(新):** - 网关配置由 fengling-console 管理,网关不直接配置 - Console 发布配置变更 → 网关订阅并重载 -- 多实例支持通过广播实现(Redis pub/sub 或 PostgreSQL NOTIFY) +- 多实例支持通过 PostgreSQL NOTIFY/LISTEN 实现(更轻量,无需 Redis) - Console 负责所有 K8s 服务健康监控 - 网关只处理请求路由 @@ -64,18 +65,13 @@ fengling-service-discovery/ # 服务发现 - fengling-console 已实现 GatewayController 和 GatewayService - Console 拥有 GatewayDbContext,可直接管理网关配置数据 - Console 的 ReloadGatewayAsync() 目前为空实现,未实现广播机制 -- Redis 已引用但未使用,可用于 pub/sub 广播 -- 硬编码凭据(安全风险) -- JWT Token 未验证(安全风险) -- API 端点无认证(安全风险) -- 负载均衡锁竞争 -- 缺少单元测试 +- 网关已有 PgSqlConfigChangeListener 使用 NOTIFY/LISTEN,可复用 ## 约束 - **多实例**:网关必须支持同时运行多个实例 - **热重载**:配置变更无需重启 -- **技术栈**:.NET 10.0, YARP, PostgreSQL, Redis +- **技术栈**:.NET 10.0, YARP, PostgreSQL - **部署**:Docker + Kubernetes ## 关键决策 @@ -83,7 +79,7 @@ fengling-service-discovery/ # 服务发现 | 决策 | 理由 | 结果 | |------|------|------| | Console 驱动配置 | 集中管理,单一事实来源 | ✓ 良好 | -| 广播事件实现多实例 | 支持水平扩展 | ✓ 良好 | +| PostgreSQL NOTIFY 广播 | 轻量方案,无需额外依赖 | ✓ 良好 | | K8s 健康委托给 console | 降低网关复杂度,console 是运维中心 | ✓ 良好 | | 保持 YARP 为核心 | 微软维护,支持良好 | ✓ 良好 | diff --git a/.planning/STATE.md b/.planning/STATE.md index dadc3e2..65ac022 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -51,7 +51,7 @@ | 决策 | 日期 | 备注 | |------|------|------| | 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 健康,非网关 | ### Console 集成现状 @@ -60,13 +60,7 @@ - Console 已实现 GatewayController 和 GatewayService - Console 拥有 GatewayDbContext,可直接管理网关配置 - ReloadGatewayAsync() 为空实现,需要实现广播机制 -- Redis 已引用但未使用,可用于 pub/sub - -| 决策 | 日期 | 备注 | -|------|------|------| -| Console 驱动配置 | 2026-03-02 | 配置在 fengling-console 变更,网关监听 | -| 多实例广播 | 2026-03-02 | Redis pub/sub 或 PostgreSQL NOTIFY | -| K8s 健康委托 | 2026-03-02 | Console 处理 K8s 健康,非网关 | +- 网关已有 PgSqlConfigChangeListener 使用 NOTIFY/LISTEN,可复用 ### Roadmap 演进