分布式限流

所谓的分布式限流,其实道理很简单,一句话就可以解释清楚。分布式区别于单机限流的场景,它把整个分布式环境中所有服务器当做一个整体来考量。比如说针对IP的限流,我们限制了1个IP每秒最多10个访问,不管来自这个IP的请求落在了哪台机器上,只要是访问了集群中的服务节点,那么都会受到限流规则的制约。

从上面的例子不难看出,我们必须将限流信息保存在一个“中心化”的组件上,这样它就可以获取到集群中所有机器的访问状态,目前有两个比较主流的限流方案:

1.网关层限流 将限流规则应用在所有流量的入口处。

2.中间件限流 将限流信息存储在分布式环境中某个中间件里(比如Redis缓存),每个组件都可以从这里获取到当前时刻的流量统计,从而决定是拒绝服务还是放行流量。

 

 

谷歌ratelimiter限流,适用于单机。

 

 

 

 

 

 

 

 

 

 

基于nginx的ip限流。适用于分布式

nginx.config配置     ================2-8

 

 

 

 

redis预加载lua脚本实现限流。

 

用面向切面的思路,用注解实现在业务层面限流,相比网关层限流更加灵活。

posted @ 2021-12-03 16:57  萧长风  阅读(326)  评论(0编辑  收藏  举报