SpringCloud之Zuul
推荐参考:https://www.springcloud.cc/spring-cloud-dalston.html#_router_and_filter_zuul
1. 什么是Zuul
Spring Cloud Zuul 是 Netflix 提供的微服务网关核心组件,作为统一的 API 入口,承担请求路由、过滤、安全控制等关键职责。
SpringCloud官网图示:
2. Zuul 的核心功能与作用
(1)统一入口与路由转发
所有外部请求先经过 Zuul,由其根据配置的路由规则(如路径匹配)将请求分发至后端服务。
路由配置方式:
-
路径匹配:zuul.routes.service-a.path=/api/** → 映射到指定 URL 或服务 ID。
-
服务名称匹配:自动关联注册中心(如 Eureka)的服务实例,实现负载均衡(集成 Ribbon)。
配置示例:
zuul:routes:user-service:path: /user/**serviceId: user-service # 转发至用户服务
(2)过滤器链(Filter Chain)
Zuul 的核心是 过滤器机制,分为四类生命周期:
过滤器类型 | 执行阶段 | 应用场景 |
---|---|---|
Pre | 路由前执行 | 身份认证、请求日志记录 |
Route | 路由到具体服务时执行 | 请求转发(如 Ribbon 调用) |
Post | 服务响应后执行 | 响应头修改、指标统计 |
Error | 任意阶段发生异常时执行 | 统一异常处理、熔断降级 |
(3) 安全与容错
-
鉴权:在 Pre 过滤器中校验 Token 或权限。
-
熔断降级:集成 Hystrix,当后端服务不可用时触发降级逻辑,返回预设响应。
-
限流:通过过滤器控制请求速率,防止服务过载。
3. 工作原理
.
请求处理流程:
-
请求进入 Zuul Servlet。
-
依次执行 Pre 过滤器(如认证)。
-
Route 过滤器根据路由规则转发请求至后端服务。
-
后端服务返回响应后,执行 Post 过滤器(如日志记录)。
-
若过程中发生异常,跳转至 Error 过滤器处理。
关键组件协作
-
Ribbon:负责客户端负载均衡,动态选择服务实例。
-
Hystrix:包裹路由请求,提供熔断能力。
-
RequestContext:线程安全的上下文对象,过滤器间通过它传递数据(如请求参数、响应头)
4. 性能与瓶颈
.
Zuul 1 基于 Servlet 阻塞模型,高并发下吞吐量低于响应式网关(如 Spring Cloud Gateway);
Zuul 2 基于 Netty 实现非阻塞 I/O,提升了吞吐量。但仍存在兼容性挑战(如旧生态迁移成本)。
指标对比:
指标 | Zuul 2 | Spring Cloud Gateway |
---|---|---|
吞吐量(请求/秒) | 8000 | 15000 |
平均延迟 | 25 ms | 12 ms |