1、什么是网关?
API网关(API Gateway)是一种中间层服务器,用于集中管理,保护和路由对后端服务的访问。它充当了客户端与后端服务之间的入口点,提供了一组统一的接口管理和控制API的访问。
2、网关示意图
3、API网关的主要功能
通过使用API网关,可以简化前端与后端服务的交互,提供统一的接口和安全性保障,同时也方便了服务治理和监控。它是构建微服务架构和实现API管理的重要组件之一。
- 路由转发:API网关根据请求的URL路径或其他标识,将请求路由到相应的后端服务。通过配置路由规则,可以灵活地将请求分发给不同的后端服务
- 负载均衡:API网关可以在后端服务之间实现负载均衡,将请求平均分发到多个实例上,提高系统的吞吐量和可扩展性。
- 安全认证与授权:API网关可以集中处理身份验证和授权,确保只有经过身份验证的客户端才能访问后端服务。它可以与身份提供者(如OAuth、OpenlD Connect)集成,进行用户认证和授权操作。
- 缓存:API网关可以缓存后端服务的响应,减少对后端服务的请求次数,提高系统性能和响应速度。
- 监控与日志:API网关可以收集和记录请求的指标和日志,提供实时监控和分析,帮助开发人员和运维人员进行故障排查和性能优化。
- 数据转换与协议转换:API网关可以在客户端和后端服务之间进行数据格式转换和协议转换,如将请求从HTTP转换为WebSocket,或将请求的参数进行格式转换,以满足后端服务的需求。
- API版本管理:API网关可以管理不同版本的API,允许同时存在多个API版本,并通过路由规则将请求正确地路由到相应的API版本上。
4、SpringCloud可以选择哪些API网关?
4.1.Spring Cloud Gateway
Spring Cloud Gateway是什么?
Spring Cloud Gateway是Spring Coud官方推荐的API网关,取代了Netfix Zuy。它基于非阻塞的WebFlux框架,充分利用了响应式编程的优势,并提供了路由、过滤、断路器、限流等特性。SpringCloud Gateway还支持与Spring Cloud的其他组件集成,如服务发现、负载均衡等。
核心概念:
(1)Route(路由):路由是Spring Cloud Gateway的基本构建块,它定义了请求的匹配规则和转发目标。通过配置路由,可以将请求映射到后端的服务实例或URL上。路由规则可以根据请求的路径、方法、请求头等条件进行匹配,并指定转发的目标URI。
(2)Predicate(断言):断言用于匹配请求的条件,如果请求满足断言的条件,则会应用所配置的过滤器。SpringCloud Gateway提供了多种内置的断言,如Path(路径匹配)、Method(请求方法匹配)、Header(请求头匹配)等,同时也支持自定义断言。
(3)Filter (过滤器):过滤器用于对请求进行处理和转换,可以修改请求、响应以及执行其他自定义逻辑。SpringCloud Gateway提供了多个内置的过滤器,如请求转发、请求重试、请求限流等。同时也支持自定义过滤器,可以根据需求编写自己的过滤器逻辑。
具体工作流程:
(1)Gateway Handler(网关处理器):网关处理器是Spring Cloud Gateway的核心组件,负责将请求转发到匹配的路由上。它根据路由配置和断言条件进行路由四配,选择合适的路由进行请求转发。网关处理器还会依次应用配置的过滤器链,对请求进行处理和转换。
(2)Gateway Filter Chain(网关过滤器链):网关过滤器链由一系列过滤器组成,按照配置的顺序依次执行。每个过滤器可以在请求前、请求后或请求发生错误时进行处理。过滤器链的执行过程可以修改请求、响应以及执行其他自定义逻辑。
4.2.Netflix Zuul(已停止更新)
Netfix Zuul是Spring Cloud早期版本中提供的默认API网关。它基于Servlet技术栈可以进行路由、过滤、负载均衡等功能。然而,自2020年12月起,Netfix宣布停止对Zuul1的维护,转而支持新的API网关项目。
4.3.Kong
Kong是一个独立的、云原生的API网关和服务管理平台,可以与Spring Cloud集成。Kong基于Nginx,提供了强大的路由、认证、授权、监控和扩展能力。它支持多种插件和扩展,可满足不同的API管理需求。
4.4.APISIX
APISIX基于Nginx和Lua开发,它具有强大的路由、流量控制、插件扩展等功能。APISIX支持灵活的配置方式,可以根据需求进行动态路由、负载均衡和限流等操作。
5、再微服务架构中,网关的作用是什么?
(1)统一入口:网关为所有的微服务提供一个唯一的入口点,从而简化了客户端与服务的交互,同时保障了后台服务的安全性。
(2)鉴权校验:网关能够识别每个进来的请求,并根据其权限进行校验,阻止不符合要求的请求通过。
(3)动态路由:根据需要,网关可以动态地将请求路由到不同的后端集群中,实现服务的灵活调度。
(4)降低耦合度:通过在网关层做映射,可以将客户端与服务解耦,使服务可以独立发展,减少两者之间的依赖。
(5)提供附加功能:网关不仅可以保护微服务,还可以为服务提供和沉淀更多附加功能,如熔断、限流等
6、什么是限流算法?网关如何实现限流?
限流算法是指用于限制单位时间内服务的请求数量的算法,目的是防止服务被过高的请求压力所击垮。
网关如何实现限流:
(1)利用限流算法插件/模块:网关可以集成限流算法插件/模块,通过配置相关参数(如令牌桶大小、令牌生成速率等)来实现限流。例如,spring cloud Gateway可以使用Redis的RateLimmiter限流算法插件来实现限流
(2)自定义眼流逻辑:网关可以诵讨编程方式自定义实现呢流逻辑、例如、在微服务架构中、可以在每个服务的网关层 (如Nacos、Eureka等)实现眼流逻辑,或者便出限流SDK(如Sentinel)对请求进行限流。
(3)利用云平合提供的眼流功能:一些云平台提供了自动化的限流功能、例AWs CioudWatch,Azure Appication jnsights等,网关可以利用这些示平台的功能来实现限流。
7.思维导图截图
8.关联文章
如此等等的资料我都已经整理到了思维导图中,本篇属于SpringCloud篇,有需要的可以去看一下,喜欢的就留个三连再走吧~
SpringCloud:https://blog.csdn.net/TLOVEYOUTOO/article/details/145532603?spm=1001.2014.3001.5502
Spring全家桶:
https://blog.csdn.net/TLOVEYOUTOO/article/details/145532922?spm=1001.2014.3001.5502