- 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 │
└─────────────┘
- 采用 Spring WebFlux 响应式编程模型,提供卓越的性能表现
- 支持 HTTP/2 协议,实现更高效的网络传输
- 异步非阻塞 I/O 处理,提高系统吞吐量
- 智能的请求压缩和缓存策略,优化响应时间
- 提供多种负载均衡算法,满足不同场景需求
- 轮询算法:适用于服务实例性能相近的场景
- 加权轮询:支持服务实例差异化配置
- 最少连接:适用于长连接场景
- 响应时间加权:根据服务响应时间动态调整
- 自动服务健康检查,及时剔除异常实例
- 支持动态调整服务权重,实现更精细的流量控制
- 基于 Redis 的分布式限流,支持集群部署
- 多种限流算法支持,适应不同业务场景
- 令牌桶:适合突发流量场景
- 漏桶:适合平滑流量场景
- 滑动窗口:适合精确控制场景
- 支持服务级别、接口级别的限流配置
- 提供限流降级策略,保证系统可用性
- 原生支持 Kubernetes 服务发现
- 提供自定义服务注册机制
- 支持动态服务上下线
- 服务元数据管理,支持服务标签和属性配置
- SPI 插件架构:基于 Java SPI 机制的可扩展认证系统
- 多重认证策略:支持 JWT、API Key 等多种认证方式
- 热插拔支持:认证插件可动态加载和卸载
- 认证链式处理:多个认证提供者按优先级顺序执行
- 缓存机制:Redis 缓存认证结果,提升性能
- 完整的 SSL/TLS 加密支持
- 可配置的 CORS 策略
┌─────────────────────────────────────────────────────────────────────┐
│ 认证鉴权处理流程 │
└─────────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────────────────────────────────────────┐
│ 客户端 │────│ 网关入口 │
│ 请求 │ │ (GatewayController) │
└─────────────┘ └─────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ 认证服务 │
│ (AuthenticationService) │
└─────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ 插件管理器 │
│ (AuthPluginManager) │
│ │
│ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ JWT 插件 │ │ API Key 插件 │ │
│ │ │ │ │ │
│ │ ┌─────────┐ │ │ ┌─────────────────────┐ │ │
│ │ │JWT解析 │ │ │ │ API Key 验证 │ │ │
│ │ │Token │ │ │ │ │ │ │
│ │ │验证 │ │ │ │ 权限检查 │ │ │
│ │ │角色提取 │ │ │ │ │ │ │
│ │ └─────────┘ │ │ └─────────────────────┘ │ │
│ └─────────────┘ └─────────────────────────┘ │
└─────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ 认证上下文 │
│ (AuthenticationContext) │
│ │
│ ┌─────────────┐ ┌─────────────────────────┐ │
│ │ 缓存管理 │ │ 配置管理 │ │
│ │ │ │ │ │
│ │ ┌─────────┐ │ │ ┌─────────────────────┐ │ │
│ │ │Redis │ │ │ │ 动态配置 │ │ │
│ │ │缓存 │ │ │ │ │ │ │
│ │ │认证结果 │ │ │ │ 环境变量 │ │ │
│ │ └─────────┘ │ │ │ │ │ │
│ └─────────────┘ │ │ 属性文件 │ │ │
│ │ └─────────────────────┘ │ │
│ └─────────────────────────┘ │
└─────────────────┬───────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────┐
│ 认证结果 │
│ (AuthenticationResult) │
│ │
│ 成功: 用户信息 + 角色 + 权限 + 元数据 │
│ 失败: 错误信息 + 错误码 │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────────┐
│ 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 验证 │
│ • 签名验证 │ │ • 权限检查 │
│ • 过期检查 │ │ • 缓存支持 │
│ • 角色提取 │ │ • 频率限制 │
│ • 权限提取 │ │ │
└─────────────────────┘ └─────────────────────┘
- 集成 Prometheus 监控系统
- 详细的请求追踪
- 丰富的性能指标
- 完善的健康检查机制
- 结构化的日志记录
- JDK 21
- Maven 3.8+
- Docker 和 Docker Compose
- Redis 7.x
- Kubernetes(可选,用于生产环境)
- 克隆项目代码
- 启动依赖服务(Redis等)
- 构建并运行项目
- 验证服务是否正常运行
网关服务支持丰富的配置选项,包括:
- 服务端口配置
- SSL/TLS 配置
- HTTP/2 支持
- 认证鉴权配置
- 限流参数配置
- 负载均衡策略
- 服务发现配置
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}
gateway:
auth:
provider-configs:
apikey:
cache-enabled: ${APIKEY_CACHE_ENABLED:true}
cache-expiration-minutes: ${APIKEY_CACHE_EXPIRATION_MINUTES:30}
添加自定义认证插件只需:
- 实现
AuthenticationProvider
接口 - 在
META-INF/services/com.mo.gateway.spi.auth.AuthenticationProvider
文件中注册 - 将插件 JAR 包放入
plugins
目录
详细配置说明请参考 配置指南
支持通过环境变量覆盖默认配置,主要配置项包括:
- 服务发现类型
- Redis 连接信息
- 限流参数
- 日志级别
- 监控配置
- 服务注册
- Kubernetes 环境配置
- 非 Kubernetes 环境配置
- 认证鉴权配置
- 限流配置
- 负载均衡配置
- 监控集成
# 使用 JWT Token 访问受保护的API
curl -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-X GET "http://gateway:8080/api/v1/protected-resource"
# 使用 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"
}
详细接入说明请参考 服务接入指南
- Docker 部署
- 单机部署
- 集群部署
- Kubernetes 部署
- 基础部署
- 高可用部署
详细部署说明请参考 部署指南
- 服务健康状态
- 性能指标
- 限流统计
- 系统资源使用情况
- 结构化日志
- 日志收集
- 日志分析
详细运维说明请参考 运维指南
欢迎贡献代码,提交 Issue 或 Pull Request。请确保:
- 遵循代码规范
- 添加必要的测试
- 更新相关文档
详细贡献指南请参考 贡献指南
本项目采用 MIT 许可证
- 项目维护者:[Mo]
- 邮箱:[xmopher@hotmail.com]
- 项目链接:[https://github.com/xmopher/gateway.git]