一、背景

在微服务架构中,网关是一个入口点,必须控制接收请求的速率,防止重复请求、频繁请求导致后台服务不可用。

二、具体实现

2.1 实现效果

(1)对全局进行限流控制,针对网关整个入口统一配置,相同ip控制访问整个后台服务频率,此作为一个默认配置对所有接口有效

(2)对服务进行限流控制,针对不同服务,相同ip、用户控制访问服务的次数限制

(3)对接口进行限流控制,对不同的接口配置访问频率控制,接口访问频率可在后台管理系统进行界面配置

2.2 技术点

使用Guava提供的限流工具类RateLimiter,该类基于令牌桶算法实现流量限制,使用十分方便,而且十分高效。

先对guava框架限流的概念进行讲解下:

它的大致意思就是每一个请求进来先到桶里去拿令牌,拿到令牌的请求放行,假设你设置了1000个令牌,如果拿完了,那么后面来调接口的请求就需要排队等有新的令牌才能调用该接口。

2.3具体实现细节

(1)网关服务引入相关jar包

(2)增加配置文件默认限流策略

(3)自定义RateLimitConfig配置类,为了针对地址+用户进行限流,可自定义key值

(4)通过指定服务进行限流配置,不同服务可以配置不同的限流策略

(5)通过重写ZuulFilter进行特定接口限流配置

(6)通过后台管理系统配置访问频率,加载到内存中,实现接口限流可配置化

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注