6.7 KiB
6.7 KiB
Phase 3: 调整网关部分的需求 - Context
Gathered: 2026-03-03 Status: Ready for planning
## Phase Boundary调整 Gateway 模块的实体结构和 YARP 集成方式,包括:
- 重构实体模型(删除 GwTenant 和 GwServiceInstance,新增 GwCluster)
- 扩展 GwTenantRoute 的匹配和转换能力
- 实现与 YARP 配置模型的完整对接
实体结构调整
删除的实体
- GwTenant - 删除,直接使用 Platform.Tenant 通过 TenantCode 关联
- GwServiceInstance - 删除,改为 GwCluster 聚合根内嵌 Destination
新增的实体
GwCluster(集群聚合根)
string Id- GUID,与 YARP ClusterId 类型一致string ClusterId- 集群标识(业务 ID)string Name- 集群名称string? Description- 描述List<GwDestination> Destinations- 目标端点列表(内嵌)string LoadBalancingPolicy- 负载均衡策略 (RoundRobin, WeightedRoundRobin, LeastRequests 等)GwHealthCheckConfig? HealthCheck- 健康检查配置GwSessionAffinityConfig? SessionAffinity- 会话亲和配置int Status- 状态- 审计字段 (CreatedBy, CreatedTime, UpdatedBy, UpdatedTime, IsDeleted, Version)
GwDestination(内嵌值对象)
string DestinationId- 目标标识string Address- 后端地址string? Health- 健康检查端点int Weight- 权重(用于加权负载均衡)int HealthStatus- 健康状态int Status- 状态
GwHealthCheckConfig(内嵌值对象)
bool Enabled- 是否启用string? Path- 健康检查路径 (默认 /health)int IntervalSeconds- 检查间隔(秒)int TimeoutSeconds- 超时时间(秒)
GwSessionAffinityConfig(内嵌值对象)
bool Enabled- 是否启用string Policy- 策略 (Header)string AffinityKeyName- 亲和键名称
修改的实体
GwTenantRoute 扩展字段
string? Methods- HTTP 方法匹配 (GET,POST,PUT,DELETE 等)string? Hosts- Host 头匹配 (支持通配符)string? Headers- Header 匹配规则 (JSON 格式)string? LoadBalancingPolicy- 路由级别负载均衡策略覆盖string? AuthorizationPolicy- 授权策略string? RateLimiterPolicy- 限流策略string? CorsPolicy- CORS 策略string? Transforms- 请求/响应转换规则 (JSON 格式)
保留现有字段:
string Id- GUID v7string TenantCode- 租户代码(关联 Platform.Tenant)string ServiceName- 服务名称string ClusterId- 关联 GwClusterstring PathPattern- 路径匹配模式int Priority- 优先级int Status- 状态bool IsGlobal- 是否全局路由
路由匹配能力
- Path: 完整支持 YARP Path 模式 (如
/api/{**catch-all}) - Methods: 支持 HTTP 方法过滤,逗号分隔 (如
GET,POST) - Hosts: 支持 Host 头匹配,逗号分隔 (如
api.example.com,*.api.com) - Headers: JSON 格式动态配置,如
[{"Name":"X-Custom","Values":["value1"],"Mode":"ExactHeader"}]
负载均衡策略
- 集群级别配置: GwCluster.LoadBalancingPolicy 存储默认策略
- 路由级别覆盖: GwTenantRoute.LoadBalancingPolicy 可覆盖集群默认策略
- 支持策略:
RoundRobin,LeastRequests,Random,PowerOfTwoChoices,WeightedRoundRobin
会话亲和 (Session Affinity)
- 策略: Header 方式
- 标识来源: UserId 优先,TenantCode 兜底
- AffinityKeyName:
X-Session-Key - 实现逻辑:
- 已登录用户: 使用
UserId作为会话键 - 未登录用户: 使用
TenantCode作为会话键 - 同一会话键的请求路由到同一后端实例
- 已登录用户: 使用
健康检查
- 方式: 主动健康检查 (Active Health Check)
- 配置位置: GwCluster.HealthCheck
- 默认配置:
- Path:
/health - Interval: 30 秒
- Timeout: 10 秒
- Path:
请求/响应转换 (Transforms)
- 格式: JSON 数组
- 示例:
[ {"RequestHeader": "X-Forwarded-For", "Set": "true"}, {"ResponseHeader": "X-Served-By", "Set": "gateway"} ] - 支持的转换类型: RequestHeader, ResponseHeader, PathPrefix, PathRemovePrefix 等
租户关联
- GwTenant 删除: 不再单独维护网关租户表
- 关联方式: 通过
TenantCode直接关联 Platform.Tenant - TenantCode 来源:
- 已登录用户: 从 User.TenantInfo.TenantCode 获取
- 请求头: 从
X-Tenant-Code获取
ID 类型约定
| 实体 | ID 类型 | 原因 |
|---|---|---|
| GwTenantRoute | string (GUID v7) |
与 YARP RouteId 一致 |
| GwCluster | string (GUID) |
与 YARP ClusterId 一致 |
| GwDestination | 无独立 ID | 内嵌值对象 |
Claude's Discretion
- Transforms JSON 的具体结构和验证规则
- HealthCheckConfig 和 SessionAffinityConfig 的详细字段设计
- Header 匹配规则 JSON 的完整 Schema
- 错误处理和验证逻辑
- 会话亲和 Header 名称:
X-Session-Key - 健康检查默认路径:
/health - 负载均衡默认策略:
PowerOfTwoChoices(YARP 推荐) - Header 匹配采用 JSON 格式,支持运行时动态配置
<code_context>
Existing Code Insights
需要删除的文件
Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwTenant.csFengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwServiceInstance.cs
需要修改的文件
Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwTenantRoute.cs- 扩展字段Fengling.Platform.Infrastructure/PlatformDbContext.cs- 更新 DbSet 和配置Fengling.Platform.Infrastructure/IInstanceStore.cs- 删除或改为 IClusterStoreFengling.Platform.Infrastructure/InstanceStore.cs- 删除或改为 ClusterStore
需要新增的文件
Fengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwCluster.csFengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwDestination.csFengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwHealthCheckConfig.csFengling.Platform.Domain/AggregatesModel/GatewayAggregate/GwSessionAffinityConfig.csFengling.Platform.Infrastructure/IClusterStore.csFengling.Platform.Infrastructure/ClusterStore.cs
参考资源
- YARP 配置模型文档:
docs/yarp-configuration-model.md - YARP 官方仓库: https://github.com/microsoft/reverse-proxy
</code_context>
## Deferred Ideas- 被动健康检查 (Passive Health Check) - 可在后续版本添加
- 限流策略配置 (RateLimiterPolicy) - 可在后续版本添加
- 授权策略配置 (AuthorizationPolicy) - 可在后续版本添加
- CORS 策略配置 (CorsPolicy) - 可在后续版本添加
Phase: 03- Context gathered: 2026-03-03