# 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 变更,网关监听并重载) - [ ] 通过 PostgreSQL NOTIFY 广播支持多网关实例部署 - [ ] 将 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 发布配置变更 → 网关订阅并重载 - 多实例支持通过 PostgreSQL NOTIFY/LISTEN 实现(更轻量,无需 Redis) - Console 负责所有 K8s 服务健康监控 - 网关只处理请求路由 **当前问题(来自 CONCERNS.md):** - 硬编码凭据(安全风险) - JWT Token 未验证(安全风险) - API 端点无认证(安全风险) - 负载均衡锁竞争 - 缺少单元测试 **Console 集成现状:** - fengling-console 已实现 GatewayController 和 GatewayService - Console 拥有 GatewayDbContext,可直接管理网关配置数据 - Console 的 ReloadGatewayAsync() 目前为空实现,未实现广播机制 - 网关已有 PgSqlConfigChangeListener 使用 NOTIFY/LISTEN,可复用 ## 约束 - **多实例**:网关必须支持同时运行多个实例 - **热重载**:配置变更无需重启 - **技术栈**:.NET 10.0, YARP, PostgreSQL - **部署**:Docker + Kubernetes ## 关键决策 | 决策 | 理由 | 结果 | |------|------|------| | Console 驱动配置 | 集中管理,单一事实来源 | ✓ 良好 | | PostgreSQL NOTIFY 广播 | 轻量方案,无需额外依赖 | ✓ 良好 | | K8s 健康委托给 console | 降低网关复杂度,console 是运维中心 | ✓ 良好 | | 保持 YARP 为核心 | 微软维护,支持良好 | ✓ 良好 | --- *最后更新:2026-03-02 初始化后*