93 lines
3.2 KiB
Markdown
93 lines
3.2 KiB
Markdown
# Fengling Gateway
|
||
|
||
## 这是什么
|
||
|
||
基于 YARP (Yet Another Reverse Proxy) 的 API 网关,用于风灵微服务生态系统。支持多租户路由、动态配置和分布式负载均衡,将请求路由到下游服务(auth-service、member-service、activity、platform、risk-control 等)。
|
||
|
||
## 核心价值
|
||
|
||
可靠、可扩展的 API 网关,将流量分发到后端微服务,支持零停机配置更新。
|
||
|
||
## 需求
|
||
|
||
### 已验证(现有功能)
|
||
|
||
- ✓ 基于 URL 路径的多租户路由 — 已有
|
||
- ✓ JWT Token 解析和租户声明提取 — 已有
|
||
- ✓ PostgreSQL 动态路由配置 — 已有
|
||
- ✓ Kubernetes 服务发现集成 — 已有
|
||
- ✓ 加权轮询负载均衡 — 已有
|
||
- ✓ 通过 PostgreSQL NOTIFY 实现配置热重载 — 已有
|
||
|
||
### 进行中
|
||
|
||
- [ ] 实现 console 驱动的配置管理(配置在 fengling-console 变更,网关监听并重载)
|
||
- [ ] 通过广播事件支持多网关实例部署
|
||
- [ ] 将 K8s 健康检查从网关移除(委托给 console)
|
||
|
||
### 范围外
|
||
|
||
- [直接配置网关的 UI] — 由 fengling-console 负责
|
||
- [网关中的 K8s 服务健康检查] — 委托给 console
|
||
- [认证/授权逻辑] — 由 auth-service 负责
|
||
|
||
## 背景
|
||
|
||
**生态系统结构:**
|
||
```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 管理,网关不直接配置
|
||
- Console 发布配置变更 → 网关订阅并重载
|
||
- 多实例支持通过广播实现(Redis pub/sub 或 PostgreSQL NOTIFY)
|
||
- Console 负责所有 K8s 服务健康监控
|
||
- 网关只处理请求路由
|
||
|
||
**当前问题(来自 CONCERNS.md):**
|
||
- 硬编码凭据(安全风险)
|
||
- JWT Token 未验证(安全风险)
|
||
- API 端点无认证(安全风险)
|
||
- 负载均衡锁竞争
|
||
- 缺少单元测试
|
||
|
||
**Console 集成现状:**
|
||
- fengling-console 已实现 GatewayController 和 GatewayService
|
||
- Console 拥有 GatewayDbContext,可直接管理网关配置数据
|
||
- Console 的 ReloadGatewayAsync() 目前为空实现,未实现广播机制
|
||
- Redis 已引用但未使用,可用于 pub/sub 广播
|
||
- 硬编码凭据(安全风险)
|
||
- JWT Token 未验证(安全风险)
|
||
- API 端点无认证(安全风险)
|
||
- 负载均衡锁竞争
|
||
- 缺少单元测试
|
||
|
||
## 约束
|
||
|
||
- **多实例**:网关必须支持同时运行多个实例
|
||
- **热重载**:配置变更无需重启
|
||
- **技术栈**:.NET 10.0, YARP, PostgreSQL, Redis
|
||
- **部署**:Docker + Kubernetes
|
||
|
||
## 关键决策
|
||
|
||
| 决策 | 理由 | 结果 |
|
||
|------|------|------|
|
||
| Console 驱动配置 | 集中管理,单一事实来源 | ✓ 良好 |
|
||
| 广播事件实现多实例 | 支持水平扩展 | ✓ 良好 |
|
||
| K8s 健康委托给 console | 降低网关复杂度,console 是运维中心 | ✓ 良好 |
|
||
| 保持 YARP 为核心 | 微软维护,支持良好 | ✓ 良好 |
|
||
|
||
---
|
||
|
||
*最后更新:2026-03-02 初始化后*
|