合作机构:阿里云 / 腾讯云 / 亚马逊云 / DreamHost / NameSilo / INWX / GODADDY / 百度统计
网关(Gateway)是微服务中不可缺少的一部分,它是微服务中提供了统一访问地址的组件,充当了客户端和内部微服务之间的中介。网关主要负责流量路由和转发,将外部请求引导到相应的微服务实例上,同时提供一些功能,如身份认证、授权、限流、监控、日志记录等。
网关的主要作用有以下几个:
为了保护后端微服务免受突发高流量请求的影响,确保系统的稳定和可靠性,所以在网关层必须“限流”操作。
限流是一种流量控制的策略,用于限制系统处理请求的速率或数量,以保护系统免受过载或攻击的影响。通过限制请求的数量或速率,可以平衡系统和资源之间的压力,确保系统在可接受的范围内运行。
限流的常见策略通常有以下几种:
当然,我们也可以在程序中使用多种策略混合限流,以保证内部微服务的稳定性。
了解了网关和限流的相关内容之后,我们以目前主流的网关组件 Spring Cloud Gateway 为例,来实现一下限流功能。
Spring Cloud Gateway 实现限流的方式有两种:
那既然 Spring Cloud Gateway 中已经内置了限流功能,那我们接下来就来看 Spring Cloud Gateway 内置限流是如何实现的?
Spring Cloud Gateway 内置的限流器为 RequestRateLimiter GatewayFilter Factory,官网说明文档:https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#the-requestratelimiter-gatewayfilter-factory
Spring Cloud Gateway 支持和 Redis 一起来实现限流功能,它的实现步骤如下:
具体实现如下。
在项目的 pom.xml 中,添加以下配置信息(添加 Redis 框架依赖支持):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis-reactive</artifactId>
</dependency>
TOP