Skip to content

xmopher/FastGateway

Repository files navigation

FastGateway

配置要求

  • JDK 21
  • Maven 3.8+
  • Docker
  • Redis

📖 项目介绍

FastGateway 是一个轻量级、高性能的 API 网关服务,基于 Spring Boot 3.x 和 Spring Cloud 构建。它提供了丰富的功能集,包括高性能的请求路由、智能负载均衡、灵活的限流策略、服务发现、安全控制等,是构建现代化微服务架构的理想选择。

系统架构

                                    ┌─────────────┐
                                    │   Client    │
                                    └──────┬──────┘
                                           │
                                           ▼
┌─────────────────────────────────────────────────────────────────────────┐
│                              Mo Gateway                                 │
│                                                                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐ │
│  │  路由模块    │  │  认证鉴权    │  │  限流模块    │  │  负载均衡模块    │ │
│  │             │  │     模块    │  │             │  │                 │ │
│  │ • 请求路由  │  │ • JWT认证   │  │ • 令牌桶    │  │ • 轮询算法      │ │
│  │ • 路径匹配  │  │ • API Key   │  │ • 滑动窗口  │  │ • 加权轮询      │ │
│  │ • 协议转换  │  │ • SPI插件   │  │ • 分布式    │  │ • 最少连接      │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────────┘ │
│                                                                         │
│  ┌─────────────┐  ┌─────────────┐  ┌─────────────┐  ┌─────────────────┐ │
│  │  监控模块    │  │  服务发现    │  │  配置管理    │  │  缓存模块       │ │
│  │             │  │     模块    │  │     模块    │  │                 │ │
│  │ • Prometheus│  │ • K8s发现   │  │ • 动态配置  │  │ • Redis缓存     │ │
│  │ • 健康检查  │  │ • 健康检查  │  │ • 热重载    │  │ • 认证缓存      │ │
│  │ • 性能指标  │  │ • 服务注册  │  │ • 环境变量  │  │ • 限流状态      │ │
│  └─────────────┘  └─────────────┘  └─────────────┘  └─────────────────┘ │
└─────────────────────────────────────┬───────────────────────────────────┘
                                      │
                                      ▼
                               ┌─────────────┐
                               │  Services   │
                               │             │
                               │ • Service A │
                               │ • Service B │
                               │ • Service C │
                               └─────────────┘

🌟 核心特性

1. 高性能请求处理

  • 采用 Spring WebFlux 响应式编程模型,提供卓越的性能表现
  • 支持 HTTP/2 协议,实现更高效的网络传输
  • 异步非阻塞 I/O 处理,提高系统吞吐量
  • 智能的请求压缩和缓存策略,优化响应时间

2. 智能负载均衡

  • 提供多种负载均衡算法,满足不同场景需求
    • 轮询算法:适用于服务实例性能相近的场景
    • 加权轮询:支持服务实例差异化配置
    • 最少连接:适用于长连接场景
    • 响应时间加权:根据服务响应时间动态调整
  • 自动服务健康检查,及时剔除异常实例
  • 支持动态调整服务权重,实现更精细的流量控制

3. 灵活的限流策略

  • 基于 Redis 的分布式限流,支持集群部署
  • 多种限流算法支持,适应不同业务场景
    • 令牌桶:适合突发流量场景
    • 漏桶:适合平滑流量场景
    • 滑动窗口:适合精确控制场景
  • 支持服务级别、接口级别的限流配置
  • 提供限流降级策略,保证系统可用性

4. 服务发现与注册

  • 原生支持 Kubernetes 服务发现
  • 提供自定义服务注册机制
  • 支持动态服务上下线
  • 服务元数据管理,支持服务标签和属性配置

5. 插件化认证鉴权系统

  • SPI 插件架构:基于 Java SPI 机制的可扩展认证系统
  • 多重认证策略:支持 JWT、API Key 等多种认证方式
  • 热插拔支持:认证插件可动态加载和卸载
  • 认证链式处理:多个认证提供者按优先级顺序执行
  • 缓存机制:Redis 缓存认证结果,提升性能
  • 完整的 SSL/TLS 加密支持
  • 可配置的 CORS 策略
认证鉴权架构图
┌─────────────────────────────────────────────────────────────────────┐
│                        认证鉴权处理流程                              │
└─────────────────────────────────────────────────────────────────────┘

┌─────────────┐    ┌─────────────────────────────────────────────────┐
│   客户端     │────│                网关入口                         │
│   请求      │    │             (GatewayController)                │
└─────────────┘    └─────────────────┬───────────────────────────────┘
                                    │
                                    ▼
                   ┌─────────────────────────────────────────────────┐
                   │              认证服务                           │
                   │          (AuthenticationService)               │
                   └─────────────────┬───────────────────────────────┘
                                    │
                                    ▼
                   ┌─────────────────────────────────────────────────┐
                   │            插件管理器                           │
                   │          (AuthPluginManager)                   │
                   │                                                │
                   │  ┌─────────────┐  ┌─────────────────────────┐  │
                   │  │  JWT 插件   │  │     API Key 插件        │  │
                   │  │             │  │                         │  │
                   │  │ ┌─────────┐ │  │ ┌─────────────────────┐ │  │
                   │  │ │JWT解析  │ │  │ │   API Key 验证      │ │  │
                   │  │ │Token   │ │  │ │                     │ │  │
                   │  │ │验证     │ │  │ │   权限检查          │ │  │
                   │  │ │角色提取 │ │  │ │                     │ │  │
                   │  │ └─────────┘ │  │ └─────────────────────┘ │  │
                   │  └─────────────┘  └─────────────────────────┘  │
                   └─────────────────┬───────────────────────────────┘
                                    │
                                    ▼
                   ┌─────────────────────────────────────────────────┐
                   │              认证上下文                          │
                   │          (AuthenticationContext)                │
                   │                                                │
                   │  ┌─────────────┐  ┌─────────────────────────┐  │
                   │  │  缓存管理   │  │       配置管理           │  │
                   │  │             │  │                         │  │
                   │  │ ┌─────────┐ │  │ ┌─────────────────────┐ │  │
                   │  │ │Redis    │ │  │ │   动态配置          │ │  │
                   │  │ │缓存     │ │  │ │                     │ │  │
                   │  │ │认证结果 │ │  │ │   环境变量          │ │  │
                   │  │ └─────────┘ │  │ │                     │ │  │
                   │  └─────────────┘  │ │   属性文件          │ │  │
                   │                   │ └─────────────────────┘ │  │
                   │                   └─────────────────────────┘  │
                   └─────────────────┬───────────────────────────────┘
                                    │
                                    ▼
                   ┌─────────────────────────────────────────────────┐
                   │             认证结果                            │
                   │         (AuthenticationResult)                 │
                   │                                                │
                   │  成功: 用户信息 + 角色 + 权限 + 元数据             │
                   │  失败: 错误信息 + 错误码                        │
                   └─────────────────────────────────────────────────┘
SPI 插件化认证提供者
┌─────────────────────────────────────────────────────────────────────┐
│                    SPI 认证插件架构                                   │
└─────────────────────────────────────────────────────────────────────┘

META-INF/services/com.mo.gateway.spi.auth.AuthenticationProvider
├── com.mo.gateway.plugin.auth.jwt.JwtAuthenticationProvider
└── com.mo.gateway.plugin.auth.apikey.ApiKeyAuthenticationProvider

┌─────────────────────────────────────────────────────────────────────┐
│                 AuthenticationProvider SPI 接口                     │
├─────────────────────────────────────────────────────────────────────┤
│  + getProviderName() : String                                      │
│  + getVersion() : String                                           │
│  + supports(request) : boolean                                     │
│  + authenticate(request, context) : AuthenticationResult          │
│  + initialize(config) : void                                      │
│  + destroy() : void                                               │
│  + health() : HealthStatus                                        │
└─────────────────────────────────────────────────────────────────────┘
                                    ▲
                                    │
                    ┌───────────────┴───────────────┐
                    │                               │
          ┌─────────────────────┐        ┌─────────────────────┐
          │   JWT 认证提供者     │        │  API Key 认证提供者  │
          │                    │        │                     │
          │ • Token 解析       │        │ • Key 验证          │
          │ • 签名验证         │        │ • 权限检查          │
          │ • 过期检查         │        │ • 缓存支持          │
          │ • 角色提取         │        │ • 频率限制          │
          │ • 权限提取         │        │                     │
          └─────────────────────┘        └─────────────────────┘

6. 监控与可观测性

  • 集成 Prometheus 监控系统
  • 详细的请求追踪
  • 丰富的性能指标
  • 完善的健康检查机制
  • 结构化的日志记录

🚀 快速开始

环境要求

  • JDK 21
  • Maven 3.8+
  • Docker 和 Docker Compose
  • Redis 7.x
  • Kubernetes(可选,用于生产环境)

本地开发环境搭建

  1. 克隆项目代码
  2. 启动依赖服务(Redis等)
  3. 构建并运行项目
  4. 验证服务是否正常运行

⚙️ 配置说明

基础配置

网关服务支持丰富的配置选项,包括:

  • 服务端口配置
  • SSL/TLS 配置
  • HTTP/2 支持
  • 认证鉴权配置
  • 限流参数配置
  • 负载均衡策略
  • 服务发现配置

认证鉴权配置

JWT 认证配置

gateway:
  auth:
    enabled: true
    plugin-directory: plugins
    enabled-providers:
      - jwt
      - apikey
    provider-configs:
      jwt:
        secret: ${JWT_SECRET:your-secret-key}
        issuer: ${JWT_ISSUER:mo-gateway}
        expiration-minutes: ${JWT_EXPIRATION_MINUTES:60}

API Key 认证配置

gateway:
  auth:
    provider-configs:
      apikey:
        cache-enabled: ${APIKEY_CACHE_ENABLED:true}
        cache-expiration-minutes: ${APIKEY_CACHE_EXPIRATION_MINUTES:30}

认证插件扩展

添加自定义认证插件只需:

  1. 实现 AuthenticationProvider 接口
  2. META-INF/services/com.mo.gateway.spi.auth.AuthenticationProvider 文件中注册
  3. 将插件 JAR 包放入 plugins 目录

详细配置说明请参考 配置指南

环境变量

支持通过环境变量覆盖默认配置,主要配置项包括:

  • 服务发现类型
  • Redis 连接信息
  • 限流参数
  • 日志级别
  • 监控配置

🔌 业务服务接入指南

服务接入流程

  1. 服务注册
    • Kubernetes 环境配置
    • 非 Kubernetes 环境配置
  2. 认证鉴权配置
  3. 限流配置
  4. 负载均衡配置
  5. 监控集成

认证鉴权使用示例

JWT 认证请求示例

# 使用 JWT Token 访问受保护的API
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
     -X GET "http://gateway:8080/api/v1/protected-resource"

API Key 认证请求示例

# 使用 API Key 访问受保护的API
curl -H "X-API-Key: your-api-key-here" \
     -X GET "http://gateway:8080/api/v1/protected-resource"

认证失败响应示例

{
  "timestamp": "2024-01-20T10:30:00Z",
  "status": 401,
  "error": "AUTHENTICATION_FAILED",
  "message": "Invalid JWT token",
  "path": "/api/v1/protected-resource"
}

详细接入说明请参考 服务接入指南

🐳 部署指南

部署方式

  1. Docker 部署
    • 单机部署
    • 集群部署
  2. Kubernetes 部署
    • 基础部署
    • 高可用部署

详细部署说明请参考 部署指南

📊 监控与运维

监控指标

  • 服务健康状态
  • 性能指标
  • 限流统计
  • 系统资源使用情况

日志管理

  • 结构化日志
  • 日志收集
  • 日志分析

详细运维说明请参考 运维指南

🤝 贡献指南

欢迎贡献代码,提交 Issue 或 Pull Request。请确保:

  1. 遵循代码规范
  2. 添加必要的测试
  3. 更新相关文档

详细贡献指南请参考 贡献指南

📝 许可证

本项目采用 MIT 许可证

📞 联系方式

Releases

No releases published

Packages

No packages published