SpringCloud 面试题, Spring Cloud 可以选择哪些 API 网关?
SpringCloud 面试题, Spring Cloud 可以选择哪些 API 网关?
QA
Step 1
Q:: Spring Cloud 可以选择哪些 API 网关?
A:: Spring Cloud 主要支持以下几种 API 网关:
1. **Spring Cloud Gateway**: 这是 Spring 官方推荐的网关,它基于 Spring 5、Spring Boot 2
和 Project Reactor,支持响应式编程模型。具备动态路由、路径重写、负载均衡、断路器、限流、熔断等功能。
2. **Netflix Zuul**: 这是早期 Spring Cloud 推荐的网关解决方案,Zuul 1.x 基于阻塞式 I/O,并且已经停止维护。Zuul 2.x 版本支持非阻塞 I/
O,但 Spring Cloud 官方更推荐使用 Spring Cloud Gateway。
3. **Nginx**:
虽然 Nginx 不是专门的 Spring Cloud 网关,但是它可以作为一个高性能的反向代理服务器,广泛用于处理静态资源和作为 API 网关。
4. **Kong**:
这是一个基于 Nginx 的 API 网关解决方案,支持负载均衡、认证、API 分析、流量控制等。
5. **Traefik**:
这是一个开源的边缘路由器,用于服务与 API 的动态负载均衡,也常用于 Kubernetes 环境。
Step 2
Q:: Spring Cloud Gateway 和 Netflix Zuul 有什么区别?
A:: Spring Cloud Gateway 和 Netflix Zuul 主要有以下区别:
1. **架构**:Spring Cloud Gateway 基于 Spring 5 的响应式编程模型和 Project Reactor,支持异步和非阻塞,而 Zuul 1.x 是基于阻塞式 I/O,Zuul 2.x 虽然支持非阻塞 I/
O,但实现较复杂。
2. **性能**:由于 Spring Cloud Gateway 使用了 Netty 和响应式编程,理论上性能要优于 Zuul 1.
x。
3. **社区支持**:Spring Cloud Gateway 由 Spring 官方支持,更新更及时,集成更加紧密,而 Zuul 由于 Netflix 已经停止 Zuul 1.
x 的支持,因此在社区活跃度上不如 Spring Cloud Gateway。
4.
功能:Spring Cloud Gateway 内置了限流、熔断、路径重写等功能,更加灵活和易于扩展,而 Zuul 则需要依赖大量的定制和插件。
Step 3
Q:: 为什么推荐在 Spring Cloud 项目中使用 Spring Cloud Gateway 而不是 Zuul?
A:: 推荐使用 Spring Cloud Gateway 而不是 Zuul 的主要原因包括:
1. **响应式架构**:Spring Cloud Gateway 基于 Spring 5
和 Project Reactor,提供异步非阻塞架构,能更好地处理高并发请求。
2. **维护性**:Spring Cloud Gateway 由 Spring 官方维护,更新速度快,与 Spring 生态集成更紧密,而 Zuul 1.x 已经停止维护,Zuul 2.
x 也没有广泛应用。
3.
功能丰富:Spring Cloud Gateway 内置了丰富的功能,比如限流、熔断、负载均衡、路径重写等,而 Zuul 需要较多的自定义实现。
Step 4
Q:: 如何在 Spring Cloud Gateway 中实现自定义过滤器?
A:: 在 Spring Cloud Gateway 中,实现自定义过滤器的步骤如下:
1.
创建过滤器类:实现 org.springframework.cloud.gateway.filter.GatewayFilter
或者继承 AbstractGatewayFilterFactory
类。
2.
编写过滤逻辑:在过滤器中可以通过 exchange.getRequest()
来获取请求对象,并对请求进行处理;通过 exchange.getResponse()
来获取响应对象,并对响应进行处理。
3.
配置过滤器:在 application.yml
或者 Java 配置类中,将自定义的过滤器配置到特定的路由中。