分布式架构-网关(Gateway) 如果是Java Web 前后端分离 分布式架构网关Gateway是整个系统最重要的组件之一。下面按照企业级项目来介绍而不是物联网场景。一、整体架构用户 │ 浏览器(Vue/React) │ HTTPS │ ┌─────────────┐ │ Nginx/CDN │ └─────────────┘ │ ▼ ┌───────────────────┐ │ API Gateway 网关 │ │ Spring Cloud Gateway │ 或 APISIX/Kong └───────────────────┘ │ │ │ │ │ │ ▼ ▼ ▼ 用户服务 商品服务 订单服务 User Product Order │ │ │ └───────┼────────┘ │ MySQL/Redis │ Kafka/RabbitMQ二、为什么需要网关如果没有网关Vue /user/login http://1.1.1.1:8081 /order/list http://1.1.1.2:8082 /product/list http://1.1.1.3:8083问题前端知道所有服务地址服务增加需要修改前端安全性差权限不好控制日志分散所以增加 Gateway。增加之后Vue /api/user/login /api/order/list /api/product/list │ ▼ Spring Cloud Gateway │ ├──User Service ├──Order Service └──Product Service前端永远只访问https://api.xxx.com三、Gateway职责1、统一入口所有请求浏览器 ↓ Gateway ↓ 微服务任何请求都必须经过Gateway。2、路由转发例如/user/**转发user-service例如GET /api/user/listGateway↓http://user-service:8081/user/list3、身份认证例如登录POST /login返回JWT以后Authorization: Bearer xxxxxGateway先校验JWT是否合法合法↓继续非法↓401不用每个服务都校验。4、权限控制例如管理员ROLE_ADMIN普通用户ROLE_USERGateway直接拦截ROLE_USER ↓ 不能访问 /admin/**5、限流例如1000 次/秒超过429 Too Many Requests保护后端。一般结合 Redis。6、黑名单例如IP 192.168.xxx.xxxGateway拒绝7、日志统一记录访问时间 IP URL 耗时 状态码 用户方便ELK分析。8、灰度发布例如10% ↓ 新版本 90% ↓ 旧版本Gateway控制。9、负载均衡例如User Service 8081 8082 8083Gateway轮询 ↓ 8081 ↓ 8082 ↓ 8083不用前端关心。10、统一异常返回{code:401,msg:token expired}所有服务统一。四、Gateway与Nginx区别NginxGateway七层代理API网关静态资源微服务入口HTTPSJWT认证反向代理权限控制负载均衡限流gzip熔断SSL动态路由rewrite服务发现企业通常两者配合使用浏览器 ↓ Nginx ↓ Gateway ↓ 微服务五、Gateway与注册中心例如Gateway ↓ NacosGateway不知道IP。只知道user-serviceGatewayNacos ↓ 获取 10.1.1.10 10.1.1.11 10.1.1.12动态路由。六、Gateway过滤器请求POST /order/create流程请求 ↓ GlobalFilter ↓ JWT ↓ 权限 ↓ 日志 ↓ 路由 ↓ Order Service ↓ 返回 ↓ GlobalFilter ↓ 响应日志 ↓ 浏览器过滤器就是AOP思想。七、典型请求流程浏览器 ↓ Nginx ↓ Gateway ↓ JWT校验 ↓ Redis查询用户 ↓ 限流 ↓ 日志 ↓ Nacos ↓ User Service ↓ MySQL ↓ 返回 ↓ Gateway ↓ 浏览器八、完整分布式架构Internet │ HTTPS │ Nginx集群 │ ┌──────────┴──────────┐ │ │ Gateway1 Gateway2 │ │ └──────────┬──────────┘ │ Nacos │ ┌──────────────┼──────────────┐ │ │ │ User Service Order Service Product Service │ │ │ ├────Redis─────┤ │ │ │ │ └────Kafka─────┴──────────────┘ │ MySQLGateway可以部署多个实例由 Nginx 或云负载均衡分发流量。九、企业级网关设计一个成熟的 Java 微服务网关通常具备以下能力功能是否建议API 路由✅ 必须JWT/OAuth2 鉴权✅ 必须服务发现Nacos/Eureka✅ 必须负载均衡✅ 必须全局异常处理✅ 必须请求/响应日志✅ 必须CORS 跨域处理✅ 必须限流Redis✅ 必须熔断、降级、重试✅ 建议灰度发布、蓝绿发布✅ 建议链路追踪TraceId✅ 建议接口版本管理✅ 建议API 文档聚合✅ 建议黑白名单、IP 访问控制✅ 建议配置中心统一管理✅ 建议十、推荐技术栈Java 后端当前主要做Java Spring Boot开发比较主流的一套企业级分布式架构是层级推荐技术前端Vue 3 TypeScript ViteWeb 服务器NginxAPI 网关Spring Cloud Gateway服务注册/配置中心Nacos微服务框架Spring Boot Spring Cloud服务调用OpenFeign数据库MySQL缓存Redis消息队列Kafka高吞吐或 RabbitMQ业务消息搜索Elasticsearch按需分布式事务Seata按需链路追踪SkyWalking 或 OpenTelemetry日志ELK / EFK容器化Docker Kubernetes生产环境智慧园区、停车场、门禁、设备管理等 Java 项目这套架构也是业内比较常见的方案。即使项目不涉及物联网也适用于 OA、ERP、商城、政务等前后端分离的分布式系统。