7网关

本文介绍了Spring Cloud Gateway作为微服务网关的角色,它提供服务入口,转发请求,进行权限认证和限流控制。讨论了其优点如性能强劲、功能丰富,但同时指出依赖于WebFlux和Netty,学习成本较高。文章深入分析了执行流程,包括负载均衡的实现,关键对象和服务映射。核心知识点涵盖了API网关的背景、实现保护和转发的方法,以及Sentinel限流的实践。最后,解答了关于为什么使用API网关、网关实践步骤、负载均衡实现和过滤器类型等常见问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网关简介
背景分析


我们知道,一个大型系统在设计时,经常会被拆分为很多个微服务。那么作为客户端要如何去调用 这么多的微服务呢?客户端可以直接向微服务发送请求,每个微服务都有一个公开的URL,该URL可以直接映射到具体的微服务,如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的架构,会存在着诸多的问题,例如,客户端请求不同的微服务可能会增加客户端代码或配置的复杂性。还有就是每个服务,在调用时都需要独立认证。并且存在跨域请求,也在一定程度上提高了代码的复杂度。基于微服务架构中的设计及实现上的问题,为了在项目中简化前端的调用逻辑,同时也简化内部服务之间互相调用的复杂度,更好保护内部服务,提出了网关的概念。

网关概述


网关本质上要提供一个各种服务访问的入口,并提供服务接收并转发所有内外部的客户端调用,还有就是权限认证,限流控制等等。Spring Cloud Gateway是Spring公司基于Spring 5.0,Spring Boot 2.0 和 等技术开发的一个网关组件,它旨在为微服务架构提供一种简单有效的统一的 API入口,负责服务请求路由、组合及协议转换,并且基于 Filter 链的方式提供了权限认证,监控、限流等功能。
 

优点:

        1.性能强劲:是第一代网关Zuul的1.6倍

        2.功能强大:内置了很多实用的功能,例如转发 监控 限流等

        3.设计优雅 容易扩展

缺点

  1. 依赖Netty(NIO并发处理强只不过要自己写)与WebFlux(Spring5.0),不是传统的Servlet编程模型(Spring MVC就是基于此模型实现),学习成本高。
  2. 需要Spring Boot 2.0及以上的版本,才支持

执行流程分析(重要)

根据官方的说明,其Gateway具体工作流程,如图所示:

小节面试分析?


网关层面是如何实现负载均衡的?(通过服务名去查找具体的服务实例)
网关层面是如何通过服务名查找服务实例的?(Ribbon)
你了解Ribbon中的哪些负载均衡算法?(轮询,权重,hash,……可通过IRule接口进行查看分析)
网关进行请求转发的流程是怎样,有哪些关键对象?(XxxHandlerMapping,Handler,。。。)
网关层面服务的映射方式怎样的?(谓词-path,…,服务名/服务实例)
网关层如何记录服务的映射?(通过map,并要考虑读写锁的应用)


核心知识点


API 网关(Gateway)诞生背景
市场主流微服务网关(Spring Cloud Gateway,zuul,…)
API Gateway实现服务的保护和转发(重点)
API Gateway层面的负载均衡实现(重点,lb://sca-provider)
API Gateway请求处理原理分析(重点:官方图,了解关键代码,执行过程)
API Gateway中常用谓词(predicate)对象及实践。
API Gateway中过滤器(Filter)的类型及实践。
API Gateway中基于sentinel实现服务限流(API,路由id)。
API Gateway中基于自定义限流结果的处理(GatewayCallbackManager)。
 

常见问题分析


为什么要使用api网关?(服务保护,统一url访问,统一身份认证,统一跨域设计,。。。)
网关入门实践的步骤? (依赖,配置,启动,服务访问)
网关项目中的负载均衡是如何实现?(底层基于Ribbon实现,可以在RibbonLoadBalancerClient中加断点分析)
说说SpringCloud gateway处理请求的基本流程?(官方,断点)
网关中的谓词对象类型?(GatewayPredicate)
网关中的谓词对象是如何创建的?(谓词工厂)
你在网关中配置过哪些常用谓词?(Path,Method,Before,Query,Header,…)
网关中的过滤器是如何分类的?(GlobalFilter,GatewayFilter:需要手动配置)
我们是否可以自定义谓词,过滤器对象?(可以,参考官方默认的定义)
网关层面如何基于sentinel实现限流?(有关sentinel的两个依赖,配置,JVM参数)
网关层面的限流类型有哪些?(路由id,API分组)
我们是否可以对限流结果进行自定义处理?(可以,了解)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值