docs: update to use PostgreSQL NOTIFY for broadcast (lighter than Redis)
This commit is contained in:
parent
27ea1d1c21
commit
ee6bb763b9
@ -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
|
||||
@ -43,13 +44,13 @@ fengling-member-service/ # 会员服务
|
||||
fengling-activity/ # 活动服务
|
||||
fengling-platform/ # 平台服务
|
||||
fengling-risk-control/ # 风控服务
|
||||
fengling-service-discovery/ # 服务发现
|
||||
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 为核心 | 微软维护,支持良好 | ✓ 良好 |
|
||||
|
||||
|
||||
@ -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 演进
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user