SpringCloud 面试题, Spring Cloud Gateway 与 Zuul 有什么区别?
SpringCloud 面试题, Spring Cloud Gateway 与 Zuul 有什么区别?
QA
Step 1
Q:: Spring Cloud Gateway 与 Zuul 有什么区别?
A:: Spring Cloud Gateway 和 Zuul 都是用于API网关服务的开源框架,但它们之间有几个关键区别:
1. **架构与性能**:Spring Cloud Gateway 是基于 Netty 实现的,具有非阻塞的异步处理能力,适用于高并发的场景;而 Zuul 1.x 基于 Servlet API,是阻塞式的,性能相对较低。Zuul 2.
x 虽然解决了部分性能问题,但其复杂性较高,且社区支持不如 Spring Cloud Gateway 活跃。
2. **功能特性**:Spring Cloud Gateway 提供了更为丰富的路由功能,支持 Path、Host、Header 等多种路由策略,并且易于扩展和定制。相比之下,Zuul 1.
x 的路由功能较为有限。
3.
集成性:Spring Cloud Gateway 是 Spring 生态系统的一部分,与 Spring Boot、Spring Cloud 等工具高度集成,使用起来非常方便。而 Zuul 则是 Netflix 的开源项目,虽然也能与 Spring Cloud 集成,但需要额外的配置。
4.
开发体验:Spring Cloud Gateway 使用的是 Java 编写的 DSL(领域特定语言)进行路由配置,语法简洁易读;Zuul 的配置则相对繁琐。
Step 2
Q:: Spring Cloud Gateway 的核心概念是什么?
A:: Spring Cloud Gateway 的核心概念包括:
1.
Route(路由):表示客户端请求到实际服务的路径匹配,定义了匹配的路径和转发规则。
2.
Predicate(谓词):用于判断请求是否符合某个条件,例如基于路径、请求头、查询参数等进行判断。
3.
Filter(过滤器):用于对请求和响应进行加工处理,可以用来进行权限校验、日志记录、限流等操作。
Step 3
Q:: Spring Cloud Gateway 的工作原理是什么?
A:: Spring Cloud Gateway 通过定义路由(Route)
,将外部请求根据规则转发到相应的服务实例。它通过 Predicate(谓词)来匹配请求的属性,比如路径、请求方法等,一旦匹配成功,就会将请求通过 Filter 处理后转发到实际的微服务。每一个 Filter 可以对请求进行预处理,比如添加请求头、鉴权、限流等,或者对响应进行后处理。
Step 4
Q:: 如何在 Spring Cloud Gateway 中实现限流?
A:: 在 Spring Cloud Gateway 中,可以使用 RequestRateLimiter
过滤器来实现限流。它基于 Redis 实现,通过配置限流键(通常是用户 IP 或者用户 ID)、令牌桶的容量(burst capacity)和每秒产生的令牌数(replenish rate)来实现对请求的限流。