系统架构设计
引用文件
本文引用的文件
- README.md
- pom.xml
- yudao-gateway/pom.xml
- yudao-gateway/src/main/resources/application.yaml
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/GatewayServerApplication.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLog.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/WebFrameworkUtils.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/route/dynamic/package-info.java
- yudao-module-device/yudao-module-device-biz/src/main/java/cn/iocoder/yudao/module/device/config/NacosConfigUpdater.java
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/core/constant/DataSourceConstants.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/framework/core/constant/DataSourceConstants.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/prometheus/PrometheusController.java
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/controller/admin/blacklisted/AppBlacklistedController.java
- script/docker/docker-compose.yml
目录
引言
本文件面向 yudao-cloud 的系统架构设计,聚焦于基于 Spring Cloud Alibaba 的微服务架构,覆盖服务治理、负载均衡、熔断限流、网关灰度发布、路由转发与安全认证等主题。文档同时阐述微服务间通信、数据一致性与分布式事务的挑战与实践建议,并提供架构拓扑图与组件交互时序图,帮助读者快速理解系统设计思路与落地要点。
项目结构
yudao-cloud 采用多模块聚合工程,顶层 POM 定义了版本与依赖管理,核心模块包括网关服务与多个业务模块。项目通过 Nacos 进行注册与配置中心,结合 Spring Cloud Gateway 提供统一入口与动态路由能力。
图表来源
章节来源
核心组件
- 网关服务(yudao-gateway):基于 Spring Cloud Gateway,提供统一入口、动态路由、跨域、灰度负载均衡、访问日志、安全认证(Token 校验)等能力。
- 业务模块:系统、基础设施、工作流、报表、设备管理、运营、任务与OTA、规则引擎、黑名单等模块,通过 Nacos 注册与配置中心协同工作。
- 中间件:Nacos(注册与配置)、Redis(缓存)、MySQL(业务库)、TDengine(时序/日志)、Kafka(消息队列)。
章节来源
架构总览
整体采用“网关 + 微服务 + 中间件”的架构,网关负责路由、鉴权与灰度发布,后端服务按业务域拆分,中间件支撑注册与配置、缓存、消息与时序数据存储。
图表来源
章节来源
组件详解
网关服务(yudao-gateway)设计理念与实现
- 统一入口与动态路由:通过 Nacos 配置中心监听路由变化,实现动态路由刷新。
- 安全认证:TokenAuthenticationFilter 从请求头提取令牌,调用系统模块的 OAuth2 校验接口,校验通过后将用户信息注入请求头,转发给下游服务。
- 灰度发布:GrayReactiveLoadBalancerClientFilter 与 GrayLoadBalancer 结合,基于请求头 version 与 tag 进行实例筛选,再按权重随机选择,实现灰度流量控制。
- 访问日志:AccessLogFilter 统一采集请求与响应上下文,便于审计与问题定位。
- 跨域处理:CorsResponseHeaderFilter 修复 Spring Cloud Gateway 2.x 跨域重复 Origin 的问题。
图表来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLog.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/cors/CorsResponseHeaderFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/route/dynamic/package-info.java
灰度发布机制
- 策略:基于请求头 version 与 tag,优先匹配相同版本/标签的实例;若无匹配则回退至全部实例,仍按权重随机选择。
- 实现:GrayReactiveLoadBalancerClientFilter 重写选择逻辑,GrayLoadBalancer 从 Nacos 元数据中筛选实例并使用 Nacos 权重选择。
图表来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayLoadBalancer.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
路由转发策略与动态路由
- 动态路由:基于 Nacos 配置中心,监听 gateway-server.yaml 的 spring.cloud.gateway.routes 变化,触发网关路由刷新。
- 路由配置:通过 application.yaml 导入 Nacos 配置,结合本地 profile 与应用级配置,实现灵活的路由与开关控制。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/route/dynamic/package-info.java
- yudao-gateway/src/main/resources/application.yaml
安全认证与租户隔离
- Token 校验:TokenAuthenticationFilter 从请求头提取 Authorization,调用系统模块 OAuth2 校验接口,解析用户信息并注入请求头。
- 租户隔离:通过 Header 传递 tenant-id,实现多租户场景下的资源隔离与缓存键区分。
- 缓存策略:本地缓存 LoginUser,降低频繁校验开销,过期后异步刷新。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/security/TokenAuthenticationFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/WebFrameworkUtils.java
访问日志与可观测性
- 访问日志:AccessLogFilter 统一采集请求方法、URL、参数、头、Body、用户IP、路由等信息,便于审计与问题定位。
- 监控集成:PrometheusController 暴露服务发现 Target 列表,配合 Prometheus 抓取指标;Docker 编排中为服务注入 SkyWalking Agent,实现全链路追踪。
章节来源
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java
- yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/controller/prometheus/PrometheusController.java
- script/docker/docker-compose.yml
微服务间通信与数据一致性
- 通信方式:基于 Nacos 注册中心的服务发现与负载均衡,网关侧通过 GrayReactiveLoadBalancerClientFilter 实现灰度负载均衡;服务间通过 HTTP(WebClient)或消息队列(Kafka)交互。
- 数据一致性:系统采用多数据源与混合存储(MySQL + TDengine),通过规则引擎与业务流程(BPM)实现强约束与审批闭环;对于跨服务一致性,建议结合 Saga 或 TCC 模式在业务层实现补偿与幂等。
章节来源
- README.md
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/core/constant/DataSourceConstants.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/framework/core/constant/DataSourceConstants.java
分布式事务处理
- 建议采用 Saga 模式:将长事务拆分为多个本地事务,通过事件驱动与补偿机制保证最终一致性;结合 Kafka 实现可靠消息传递与幂等消费。
- 幂等设计:在接口层引入幂等键与去重表,避免重复提交导致的数据不一致。
[本节为通用架构建议,无需特定文件引用]
依赖关系分析
- 网关依赖:Spring Cloud Gateway、Nacos 注册与配置、LoadBalancer、监控与工具类。
- 动态路由:通过 Nacos 配置中心监听路由配置变化,触发网关刷新。
- 灰度负载均衡:基于 Nacos 元数据与权重,实现按版本/标签的实例筛选与选择。
图表来源
- yudao-gateway/pom.xml
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/route/dynamic/package-info.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
章节来源
性能考量
- 灰度负载均衡:基于 Nacos 权重与随机选择,减少热点实例压力;建议为不同版本/标签配置合理权重。
- 缓存策略:Token 校验结果本地缓存,降低系统模块压力;注意缓存过期与异步刷新。
- 日志与监控:访问日志按需落盘或远程上报,避免阻塞;Prometheus 与 SkyWalking 配置合理的抓取间隔与采样率。
- 存储分层:业务数据走 MySQL,海量日志与时序数据走 TDengine,降低 OLTP 压力。
[本节提供通用指导,无需特定文件引用]
故障排查指南
- 网关启动与端口:确认 application.yaml 中 server.port 与本地端口冲突;查看 BannerApplicationRunner 输出的文档地址。
- 动态路由不生效:检查 Nacos 配置中心 gateway-server.yaml 的 routes 配置是否正确,以及命名空间与分组设置。
- 灰度不生效:确认请求 URL Scheme 是否为 grayLb,请求头是否包含 version/tag;核对服务实例 metadata 中的 version 与标签。
- 认证失败:检查 Authorization 头是否正确传递,系统模块 OAuth2 校验接口是否可达,租户头 tenant-id 是否设置。
- 访问日志缺失:确认 AccessLogFilter 是否启用,日志输出路径与级别配置。
章节来源
- yudao-gateway/src/main/resources/application.yaml
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/GatewayServerApplication.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/logging/AccessLogFilter.java
- yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/filter/grey/GrayReactiveLoadBalancerClientFilter.java
结论
yudao-cloud 基于 Spring Cloud Alibaba 构建了高内聚、低耦合的微服务体系,网关作为统一入口承担路由、鉴权与灰度发布职责,结合 Nacos、Redis、MySQL、TDengine、Kafka 等中间件,形成“网关 + 微服务 + 中间件”的稳定架构。通过动态路由与灰度负载均衡,系统具备良好的可演进性;通过规则引擎与 BPM 审批,保障业务规则与流程的可控性。建议在分布式事务与数据一致性方面采用 Saga/TCC 等模式,并持续完善监控与可观测性体系。
[本节为总结性内容,无需特定文件引用]
附录
- 配置管理:Nacos 命名空间与分组、配置加载顺序与应用级配置。
- 消息队列:Kafka 生产者示例(黑名单模块回调事件)。
- 数据源常量:各模块针对 TDengine 的数据源命名与用途。
章节来源
- README.md
- yudao-module-blacklist/yudao-module-blacklist-biz/src/main/java/cn/iocoder/yudao/module/blacklist/controller/admin/blacklisted/AppBlacklistedController.java
- yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/core/constant/DataSourceConstants.java
- yudao-module-task/yudao-module-task-biz/src/main/java/cn/iocoder/yudao/module/task/framework/core/constant/DataSourceConstants.java
- yudao-module-device/yudao-module-device-biz/src/main/java/cn/iocoder/yudao/module/device/config/NacosConfigUpdater.java