gateway面试题
简介
Gateway是springCloud中提供网关功能的框架,主要作为系统统一入口并路由转发到具体服务;可以配置各种过滤器来丰富网关的功能如:认证与鉴权、熔断与降级、限流、重试等功能,并且可以与服务发现配合使用。
什么是网关
网关一般作为系统的统一入口,主要提供内部服务的路由中转功能,一般也提供认证、鉴权、流量控制等功能。
网关位于微服务的前方
流量网关与微服务网关
流量网关(如Nignx)是指提供全局性的、与后端业务应用无关的策略,例如 HTTPS证书卸载、Web防火墙、全局流量监控等。
微服务网关(如Spring Cloud Gateway)是指与业务紧耦合的、提供单个业务域级别的策略,如服务治理、身份认证等。
Gateway的优缺点是什么
优点:
1. 统一入口:提供了统一的API入口,对外隐藏了微服务的细节实现。
2. 动态路由:能够根据请求的路径、类型等条件动态地将请求路由到不同的后端服务。
3. 过滤器:可以通过过滤器对请求进行修改、验证、日志记录等操作。
4. 集成服务发现和负载均衡:能够与服务发现组件和负载均衡组件集成,实现动态的服务发现和负载均衡。
5. 安全性:支持安全相关的功能,如认证、授权等。
6. 监控和指标:提供了监控和指标的功能,可以对网关的性能进行监控和分析。
缺点:
1. 单点故障:网关成为了系统的单点故障,一旦网关出现问题,整个系统的访问都会受到影响。(可以将多个网关实例部署在不同的服务器上,通过负载均衡器来分发流量,从而避免单点故障的问题)
2. 性能开销:网关需要处理大量的请求转发和过滤操作,可能会带来一定的性能开销。
3. 复杂性:配置和管理网关可能会增加系统的复杂性,特别是在处理大规模微服务的情况下。
4. 学习成本:使用和定制网关可能需要一定的学习成本,特别是对于初学者来说。
提供的功能
Spring Cloud Gateway提供以下功能:
1. 动态路由:能够根据请求的路径、类型(get,post)等条件动态地将请求路由到不同的后端服务。
2. 过滤器:可以通过过滤器对请求或响应进行处理(认证授权过滤器,断路器过滤器,限流过滤器,重试限流器,负载均衡过滤器等)。
3. 统一的API管理:能够提供统一的API入口,对外隐藏微服务的细节实现。
4. 监控功能:使用 Actuator 端点可以对网关中的信息激进型监控。
监控:
- 运行状况监控:监控网关的运行状态,包括CPU、内存、磁盘、网络等方面的指标。可以使用Spring Boot Actuator提供的/actuator/health接口进行健康检查。
- 请求统计监控:监控网关的请求情况,包括请求数、响应时间、错误率、吞吐量等指标。可以使用Spring Boot Actuator提供的/actuator/metrics/gateway.requests.*接口进行监控。
- 路由配置监控:监控网关的路由配置情况,包括路由规则、转发目标、过滤器等配置信息。可以使用Spring Boot Actuator提供的/actuator/gateway/routes接口进行监控。
- 日志监控:监控网关的日志输出情况,包括访问日志、错误日志、警告日志等。可以使用Logback等日志框架进行监控。
gateway的工作流程
- 接收用户请求
- 根据配置中的断言(判断请求路径、请求方式、请求头、请求参数等)来判断转发到那个服务
- 对请求进行过滤器的处理(认证授权过滤器、熔断过滤器等)
- 进行请求转发到后台服务,并接收服务端响应
- 过滤器对请求结果进行处理
- 返回用户请求结果
核心思想:路由转发+执行过滤器链
gateway的核心概念
路由(route):路由是构建网关的基本模块,它由ID,目标URI,断言集合和过滤器集合组成,如果断言为true,则匹配该路由。
断言(Predicate):用来匹配HTTP请求中的所有内容,例如请求头或请求参数,如果请求与断言匹配结果返回一个布尔值。
过滤(filter):Spring框架中GatewayFilter的实例,使用过滤器,可以载请求被路由前或者后对请求进行处理。
Gateway如何使用 Actuator 端点提供监控功能
默认在Spring Cloud Gateway中已经集成了actuator的功能,要获取gateway相关的监控信息,需要在gateway项目的配置文件中开启一些端点即可
-
gateway/routes
:
这个端点提供了当前配置的所有路由的详细信息。通过访问这个端点,你可以查看每个路由的ID、URI、顺序、断言、过滤器等信息。 -
gateway/globalfilters
:
这个端点列出了所有全局过滤器的详细信息。全局过滤器应用于所有路由,它们提供了跨多个路由的通用功能,如日志记录、认证等。 -
gateway/routefilters
:
这个端点允许你查看特定路由的过滤器列表。通过指定路由ID,你可以获取该路由上应用的所有过滤器的详细信息。
management:
endpoints:
web:
exposure:
include: gateway,routes,globalfilters,routefilters
配置文件中的lb是什么意思
lb
通常指的是负载均衡(LoadBalancer)。当你在配置文件的路由规则中看到lb://
前缀时,它表示该路由的目标是一个使用负载均衡的服务。
gateway服务器说明
部署在Netty上,这是因为Spring Cloud Gateway是基于WebFlux框架开发的,而WebFlux框架底层则使用高性能的Reactor模式通信框架Netty。
gateway负载均衡
老版本默认使用ribbon提供负载均衡功能,新版本使用的Spring Cloud LoadBalancer提供的负载均衡功能。
使用负载均衡功能不需要配置过滤器
默认的负载均衡策略:轮询
还有哪些负载均衡策略:轮询、随机、最少活跃调用数、
老版本用的ribbon,新版本使用的负载均衡功能由Spring Cloud LoadBalancer实现