网关简介
大家都都知道在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?
如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去用。
这样的架构,会存在着诸多的问题:
- 每个业务都会需要鉴权、限流、权限校验、跨域等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会
很蛋疼,完全可以抽出来,放到一个统一的地方去做。 - 如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一
个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维
护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个APP,通过抓包发现涉及到了数百个远程 调用,这在移动端下会显得非常低效。 - 后期如果需要对微服务进行重构的话,也会变的非常麻烦,需要客户端配合你一起进行改造,比如商品服务,
随着业务变的越来越复杂,后期需要进行拆分成多个微服务,这个时候对外提供的服务也需要拆分成多个,同时需 要客户端配合你进行改造,非常蛋疼
整体架构如下:
1.什么是SpringBoot Cloud Gateway
网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。
Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul1.0。相比 Zuul 来说,Spring Cloud
Gateway 提供更优秀的性能,更强大的有功能。
Spring Cloud Gateway 是由 WebFlux + Netty + Reactor 实现的响应式的 API 网关。它不能在传统的 servlet 容器中工作,也不能构
建成 war 包。
Spring Cloud Gateway 旨在为微服务架构提供一种简单且有效的 API 路由的管理方式,并基于 Filter 的方式提供网关的基本功能,例如
说安全认证、监控、限流等等。
Spring Cloud Gateway 功能特征
- 基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建;
- 动态路由:能够匹配任何请求属性;
- 支持路径重写;
- 集成 Spring Cloud 服务发现功能(Nacos、Eruka);
- 可集成流控降级功能(Sentinel、Hystrix);
- 可以对路由指定易于编写的 Predicate(断言)和 Filter(过滤器);
思考:
1.为什么前端不能从nacos中获取服务列表直接访问服务,而是需要通过网关完成访问
前端无法直接通过nacos获取服务列表的原因通常是处于安全和架构的考虑。Nacos是一个服务发现和配置管理平台,用于再分布式系统中注册、发现和配置微服务。然而,将Nacos直接暴露给前端可能存在一些安全风险,因为前端通常是在客户端执行的,直接暴露Nacos可能会暴露微服务的部分信息或者可能导致不必要的访问压力。
通常,前端与服务器之间需要一个中间件,比如API网关(gateway),用于处理前端的请求并将其转发给后端的微服务。API网关充当了前端与微服务之间的"门面",它可以隐藏后端微服务的细节,提供安全性、性能优化、负载均衡等功能。通过API网关,前端可以从一个统一的入口点访问后端微服务,而不需要知道每个微服务的具体位置和细节。
因此,通过API网关作为前端与后端微服务之间的中间层可以更好地管理和控制流量,确保安全性和可靠性,并且使得整个系统更易于扩展和维护。
注意:部分内容转载于图灵课堂徐庶老师