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 变更,网关监听并重载)
- [ ] 通过广播事件支持多网关实例部署
- [ ] 通过 PostgreSQL NOTIFY 广播支持多网关实例部署
- [ ] 将 K8s 健康检查从网关移除(委托给 console
### 范围外
@ -34,7 +34,8 @@
## 背景
**生态系统结构:**
```fengling-gateway/ # 当前项目 - API 网关 (YARP)
```
fengling-gateway/ # 当前项目 - API 网关 (YARP)
↓ 路由流量到:
fengling-console/ # 中央管理控制台 - 配置、租户管理
fengling-console-web/ # 控制台 Web UI
@ -49,7 +50,7 @@ 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 为核心 | 微软维护,支持良好 | ✓ 良好 |

View File

@ -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 演进