一、背景
在微服务架构中,网关是一个入口点,必须控制接收请求的速率,防止重复请求、频繁请求导致后台服务不可用。
二、具体实现
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)通过后台管理系统配置访问频率,加载到内存中,实现接口限流可配置化