如何利用 redis 来进行分布式集群系统的限流设计

在很多高并发请求的情况下,我们经常需要对系统进行限流,而且需要对应用集群进行全局的限流,那么我们如何类实现呢。

我们可以利用 redis 的缓存来进行实现,并且结合 mysql 数据库一起,先来看一个流程图。

这个就是一个典型的对 http 请求进行全局限流的流程图。

入口通过请求拦截器进行拦截 (filter)。

来看代码片段,这个代码片段就是一个标准的 filter(我们这里基于 springboot 来定义 filter)

我们需要做全局限流时,就需要用到 redis 了。在 redis 中,可以将限流配置定义为

redis key: 接口名称 (或者 url)_limit

value:map,key:appid(业务 id),value:限流大小

就做到配置的快速读取。

限流的配置定义完后,那么就需要定义限流的计数了。可以定义为

redis key: 接口名称 (或者 url)_count

value:map,key:appid(业务 id),value:计数值

一个好的限流设计,还需要能做到对限流配置的实时进行更改和动态的配置。那我们就来看如何实现呢

下面就是一个限流配置的新增流程。我们可以将改新增配置定义成一个接口或者页面上的一个功能。就能做到配置的实时增加。

最后我们再来看下配置的修改和限流配置的删除

总结:

我们充分利用 redis 的缓存配置以及做了限流时,尽量不要影响到系统的整体性能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180625B1EWXD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券