网关系统概述
2025/5/20大约 3 分钟
网关系统概述
本系统是一个基于Netty和Springboot 责任链模式 和 分布式服务治理的微服务网关,核心功能包括 负载均衡、请求鉴权、自定义请求处理、接口调用处理、结果包装、服务注册与发现、动态配置更新 等。系统通过 Redis 实现接口信息缓存、心跳状态同步,结合 JWT鉴权 与 安全组标识 完成权限校验,支持 HTTP/Dubbo 双协议封装与泛化调用。
网关核心模块
- 功能:作为请求处理的核心入口,负责请求的完整生命周期管理。
- 子模块:
- 请求处理器:解析请求参数、路径、方法,并执行鉴权、限流、路由等逻辑。
- 鉴权模块:通过 JWT 鉴权验证请求合法性,结合安全组秘钥进行权限校验。
- 限流与负载均衡:基于 NGINX的分布式限流(令牌桶算法),并根据NGINX负载均衡 + 自定义负载均衡策略(权重)分配请求到后端服务。
- 动态代理与 RPC 调用:创建动态代理对象,封装 HTTP/Dubbo 请求,对连接源进行包装存储,支持泛化调用(泛型参数传递)。
- 结果封装:统一处理服务返回结果,包装为 JSON/XML 格式,处理异常并返回标准状态码。
- 自定义处理器:通过责任链处理自定义处理器(如鉴权处理器、日志处理器、限流处理器)按顺序进行自定义请求处理。
网关中心模块
- 功能:管理全局配置、服务注册与发现、接口信息同步。
- 子模块:
- 配置管理:动态加载并刷新 Redis/Nginx 配置,支持负载均衡策略更新。
- 服务注册与发现:
- 服务提供者通过 SDK 注册服务信息(URL、接口名、方法名、参数类型)。
- Redis 存储服务元数据(如
heart:beat:server:group:服务名
,包含地址、上次心跳时间)。 - 定时同步数据库信息到 Redis,确保服务列表实时性。
- 心跳与续约:
- 服务启动时主动注册,后续定期发送心跳续约(间隔 15 秒,过期时间 30 秒)。
- Redis Key 过期自动触发服务下线,避免僵尸节点。
- 接口拉取与同步:定时从数据库拉取接口信息,更新到 Redis 和 Nginx 配置。
SDK 模块
- 功能:提供服务提供者使用的 SDK,简化服务注册与调用。
- 子模块:
- 服务注册 SDK:自动加载配置,扫描自定义注解并上传接口信息,封装 HTTP/RPC 请求,创建数据源并注册服务。
- 请求调用SDK: 更便捷地进行请求调用,支持失败重试。
Redis 消息订阅与事件通知
- 功能:实现分布式事件驱动,确保网关与服务提供者的实时通信。
- 子模块:
- 消息订阅:监听 Redis 通道,接收服务上下线、配置变更等事件。
- 事件处理:
- 服务下线事件:自动删除 Redis 中的服务记录,更新负载均衡池。
- 配置变更事件:触发 Nginx 配置刷新,动态调整路由规则和负载均衡策略。
- 分布式锁与 ID 生成:基于 Redis 实现分布式锁,生成全局唯一 ID(Snowflake 算法)。
数据库与持久化
- 功能:存储网关核心数据,支持高可用与快速查询。
- 子模块:
- 接口信息:存储接口的 URL、方法、参数、安全组等元数据。
- 服务注册:记录服务提供者的地址、心跳时间、接口映射关系。
- 配置管理:存储网关全局配置(如NGINX地址、负载均衡权重等等)。