简介
- 文章背景:当前国内Spring Cloud 微服务框架各个组件,使用已经比较普遍,但是市面上的技术文档比较零碎,有的文章很深入的讲一个问题,却没有形成体系,对初学者不太友好,更有很多是复制粘贴,浪费阅读精力,为了缩短寻找文档或者书籍的时间,决定整理出一系列成体系文章,并定时检查官方更新,维持文章相关技术的时效性。
- 项目实例:用一个微服务商城作为基础,结合对应的技术去实现。
目录
Part1:微服务网关与Spring Cloud Gateway简介
Part2:按照步骤来创建网关服务模块
Part3:与Nacos的整合
Part4:断言
Part5:过滤器
Part6:与Sentinel的整合
Part8:超时、跨域等相关配置
Part9:如何建立网关集群
Part1:微服务网关与Spring Cloud Gateway简介
1.1 微服务网关的基本概念和模型
微服务网关是对外服务的一个入口,其隐藏了内部架构的实现,充当着前端与后端微服务之间的中间层级,是微服务架构中必不可少的一个组件。其可以为我们管理大量的API接口,还可以对接客户端、适配协议、进行安全认证、转发路由、限制流量、监控日志、防止爬虫、进行灰度发布等。(请文章读完后,去查下一下这些作用怎么去实现)
1.1.1 微服务网关是什么及其作用
微服务网关是一种服务端应用,是系统访问的唯一入口,从设计模式上讲,其可看作外观模式(Facade)的一种表现形式。外观模式作用是
- 降低客户端与复杂子系统之间的耦合度。
- 简化客户端对复杂系统的操作,隐藏内部实现细节。模式设计如下图
微服务网关使客户端和服务端在调用关系进行解耦,向客户端隐藏了各个服务的细节。通过微服务网关,客户端可以通过一个统一的入口点访问多个微服务,而无须直接与每个微服务通信。(请思考下这样的好处。)
微服务网关的核心是所有的客户端和消费端都通过统一的网关接入微服务,它封装了微服务系统的内部架构,在微服务网关统一处理所有的非业务功能,如身份验证、监控、负载均衡、缓存、协议转换、限流熔断、静态响应处理等。通常,网关提供REST/HTTP的访问API。
1.1.2 微服务网关解决那些问题
在微服务架构下应用被拆分成多个微服务,如果将所有的微服务直接对外暴露接口,就会出现接口安全、负载均衡等方面的问题,也会严重影响服务的可扩展和伸缩性。另外,每一个微服务都面临鉴权认证、Session处理、安全检查、日志处理等问题。如果让各个微服务都实现一遍,势必会造成代码冗余。
比如在微服务架构下,要实现统一的权限验证,有三种不同的实现方案:
(1)每个服务都实现权限校验的功能。
(2)将权限校验的代码抽取出来并作为公共服务,然后其他所有服务都依赖这个服务。
(3)创建统一入口服务,在此服务中增加过滤器,所有请求进行权限校验。
显然第三种实现方案就是微服务网关,如图
1.1.3 微服务网关有哪些核心功能
主要功能如图
1.1.4 当前常用的微服务网关
- Spring Cloud Gateway: Spring Cloud Gateway是Spring Cloud生态系统中的一个组件,当前稳定版本4.3.0基于Spring 6、Spring Boot 3和Project Reactor等技术实现。它提供了路由、负载均衡、安全认证、限流、重试等功能。
- Zuul: Zuul是Netflix开源的微服务网关实现,提供了路由、负载均衡、安全认证、限流等功能。不过,由于Netflix已经停止维护Zuul 1.x版本,因此推荐使用Zuul 2.x版本(即Zuul2)。
- Kong: Kong是一个开源的微服务网关和API管理平台,提供了路由、负载均衡、安全认证、限流、缓存等功能。Kong基于Nginx实现,可以通过插件扩展其功能
微服务网关与传统API网关的区别
• 粒度:微服务网关是基于微服务架构设计的,它的粒度更细,可以对每个微服务进行独立的路由和管理。而传统的API网关通常对整个应用程序的API进行管理。
• 功能定位:微服务网关不仅提供路由转发和负载均衡等功能,还承担了微服务架构中的其他职责,如安全认证、请求过滤、转换和聚合等。传统的API网关主要关注请求的路由和转发。
• 解耦性:微服务网关通过隐藏后端微服务的实现细节,实现了客户端与微服务之间的解耦,每个微服务可以独立演化和部署。而传统的API网关通常对整个应用程序进行管理,各个模块之间的耦合性较高。
• 灵活性:微服务网关提供了更高的灵活性,可以根据不同的路由规则将请求路由到不同的微服务实例上,实现动态的负载均衡和容错处理。传统的API网关通常是将请求转发到固定的后端服务。
• 性能:微服务网关的粒度更细,可以更精确地控制请求的路由和处理,从而提高系统的性能。传统的API网关可能需要处理更大规模的请求,性能可能相对较低
1.2 Spring Cloud Gateway
目前Gateway是运用广泛的网关软件,官方网站截止目前2025年7月份截图(相关内容改变文档会同步更新),当前GA版本是 4.3.0,相关的文档点击Reference Doc查阅,对应文档的描述这里不再做复述。
如下图Gateway是整个微服务系统的门户入口,具有路由转发、监控、限流、权限检查等功能。
Gateway按照响应式编程的模式开发,运用了Spring的WebFlux响应式框架,以高性能的Netty作为服务器。
Gateway包括以下三大核心技术。
- 路由(Router)转发:按照既定的路由,把请求转发给相应的微服务。
- 断言(Predicate):判断请求是否符合特定条件。
- 过滤(Filter):在请求到达微服务之前,以及微服务返回响应结果之后,进行的一些通用处理