Spring Cloud Gateway面试题

Spring Cloud Gateway简介

​ 这个项目为在 Spring WebFlux 或 Spring WebMVC 之上构建 API 网关提供了库。Spring Cloud Gateway 旨在提供一种简单但有效的方式来路由到 API,并为它们提供诸如安全性、监控/指标和弹性等方面的横切关注点。
Spring Cloud Gateway 的特性:

  • 基于 Spring 框架和 Spring Boot
  • 能够根据任何请求属性匹配路由。
  • 断言和过滤器特定于路由。
  • 断路器集成。
  • Spring Cloud DiscoveryClient 集成
  • 易于编写断言和过滤器
  • 请求速率限制
  • 路径重写
1. 网关里面写了哪些代码?
  • 跨域,路由(动态路由,负载均衡)ip 黑名单拦截,Token 的校验,对请求进行过滤(请求参数校验) 对响应做处理(状态码,响应头) 熔断 限流

  • 微服务的网关,可以很好地将具体的服务和浏览器隔离开,只暴露网关的地址给到浏览器

  • 在微服务网关中,可以很好的实现校验认证,负载均衡(lb),黑名单拦截,限流等。

    GlobalCorsFilter全局的跨域配置

    AuthFilter权限认证

    BlackListUrlFilter黑名单过滤器

    ForwardAuthFilter转发认证过滤器(内部服务外网隔离)

    网关限流配置、自定义限流异常处理

    路由配置信息

2. 有哪些常见的网关?
  1. 以下是几个常见的网关系统:

Spring Cloud Gateway:Spring Cloud Gateway 是基于 Spring Framework 5、Spring Boot 2 和 Project Reactor 等技术构建的网关系统。它提供了路由、过滤、负载均衡、熔断、限流等功能,可以作为微服务架构中的统一入口,实现请求的转发和管理。Spring Cloud Gateway 是一个轻量级的网关解决方案,易于集成和扩展。

Netflix Zuul:Zuul 是由 Netflix 开发的网关系统,属于 Netflix OSS(Open Source Software)家族的一员。它提供了路由、过滤、负载均衡等功能,可以与 Eureka、Ribbon、Hystrix 等 Netflix 开源组件集成使用。Zuul 1.x 版本基于 Servlet 技术栈实现,而 Zuul 2.x 版本采用了 Netty 作为底层实现。

Kong:Kong 是一个快速、可扩展和分布式的开源 API 网关,它基于 Nginx 构建,并提供了管理界面和插件系统。Kong 支持动态路由、认证授权、限流、监控等功能,可以与多种后端服务(如微服务、数据库等)进行集成,使用方便简单。

Traefik是一个现代HTTP反向代理和负载均衡器,它提供了强大的路由、负载均衡、健康检查等功能。Traefik支持多种后端服务(如Docker、Swarm、Kubernetes等),并且可以自动动态配置。此外,Traefik还提供了丰富的中间件插件,可以方便地实现各种功能,如限流、熔断、认证等。Traefik适用于容器化部署的微服务架构,特别是需要与Kubernetes等容器编排工具集成的场景。

  1. 以上是一些常见的网关系统,它们都提供了类似的基本功能,包括路由转发、负载均衡、认证授权、限流、监控等。选择适合自身需求的网关系统时,可以根据具体的技术栈、性能要求、可扩展性和社区支持等因素进行评估和选择。
3. 开发过程中经常使用的路由断言有哪些
  • Path 断言:根据请求的路径进行匹配。例如:Path=/api/user 表示只有当请求路径是 /api/user 时才匹配。
  • Method 断言:基于 HTTP 请求方法(如 GET、POST、PUT 等)进行匹配。比如:Method=GET 仅匹配 GET 请求。
  • Header 断言:通过请求头的键值对进行匹配。比如:Header=X-Requested-With, XMLHttpRequest ,当请求头中有 X-Requested-With 且值为 XMLHttpRequest 时匹配。
  • Query 断言:依据请求参数进行匹配。例如:Query=param1, value1 ,当请求中包含参数 param1 且值为 value1 时匹配。
  • Cookie 断言:根据 Cookie 的键值对来匹配。比如:Cookie=sessionId, 123456 ,当 Cookie 中有名为 sessionId 且值为 123456 时匹配。
  • Host 断言:基于请求的主机名进行匹配。例如:Host=example.com ,只有请求的主机是 example.com 时才匹配。
4. Gateway的优缺点是什么?
  1. 统一入口:提供了统一的API入口,对外隐藏了微服务的细节实现。
  2. 动态路由:能够根据请求的路径、类型等条件动态地将请求路由到不同的后端服务。
  3. 过滤器:可以通过过滤器对请求进行修改、验证、日志记录等操作。
  4. 集成服务发现和负载均衡:能够与服务发现组件和负载均衡组件集成,实现动态的服务发现和负载均衡。
  5. 安全性:支持安全相关的功能,如认证、授权等。
  6. 监控和指标:提供了监控和指标的功能,可以对网关的性能进行监控和分析。

缺点:

  1. 单点故障:网关成为了系统的单点故障,一旦网关出现问题,整个系统的访问都会受到影响。(可以将多个网关实例部署在不同的服务器上,通过负载均衡器来分发流量,从而避免单点故障的问题)
  2. 性能开销:网关需要处理大量的请求转发和过滤操作,可能会带来一定的性能开销。
  3. 复杂性:配置和管理网关可能会增加系统的复杂性,特别是在处理大规模微服务的情况下。
  4. 学习成本:使用和定制网关可能需要一定的学习成本,特别是对于初学者来说。
5. Spring Cloud Gateway支持限流吗?

Spring Cloud Gateway 自带了限流过滤器,对应的接口是 RateLimiterRateLimiter 接口只有一个实现类 RedisRateLimiter (基于 Redis + Lua 实现的限流),提供的限流功能比较简易且不易使用。

Spring Cloud Gateway 可以结合 Sentinel 来实现限流。

从 Sentinel 1.6.0 版本开始,Sentinel 引入了 Spring Cloud Gateway 的适配模块,可以提供两种资源维度的限流:route 维度和自定义 API 维度。也就是说,Spring Cloud Gateway 可以结合 Sentinel 实现更强大的网关流量控制。

Sentinel 是一个强大的流量控制组件,能够为 Spring Cloud Gateway 提供更精细和灵活的限流策略。

在实现过程中,需要进行相关的配置和整合。首先,引入 Sentinel 和 Spring Cloud Gateway 相关的依赖。然后,配置 Sentinel 的规则,例如针对特定的路由设置每秒允许的请求数、并发数等。

6. Spring Cloud Gateway 路由断言是什么?

断言就是对一个表达式进行 if 判断,结果为真或假,如果为真则做这件事,否则做那件事。

在 Gateway 中,如果客户端发送的请求满足了断言的条件,则映射到指定的路由器,就能转发到指定的服务上进行处理。

断言配置的示例如下,配置了两个路由规则,有一个 predicates 断言配置

spring:
  cloud:
    # 网关配置
    gateway:
      # 打印请求日志(自定义)
      requestLog: true
      discovery:
        locator:
          lowerCaseServiceId: true
          enabled: true
      routes:
        # 认证中心
        - id: yuan-auth
          uri: lb://yuan-auth
          # 断言
          predicates:
            - Path=/auth/**
          filters:
            # 验证码处理
            - ValidateCodeFilter
            - StripPrefix=1
        # 系统模块
        - id: yuan-system
          uri: lb://yuan-system
         # 断言
          predicates:
            - Path=/system/**
          filters:
            - StripPrefix=1
        # 资源服务
        - id: yuan-resource
          uri: lb://yuan-resource
          # 断言
          predicates:
            - Path=/resource/**
          filters:
            - StripPrefix=1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

救救孩子把

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值