分布式服务的限流实现(基于redis)

安装redis

wget https://download.redis.io/releases/redis-6.2.6.tar.gz

tar xzf redis-6.2.6.tar.gz

cd redis-6.2.6

make

 分布式服务的限流实现(基于redis),大致有以下三种方案:

 

1. redis+module插件实现。

该方案性能最高,直接在redis添加插件实现,一般自建redis平台易实施此方案。

实施案例:基于漏斗算法的开源redis-cell实现。 

git clone https://github.com/onsigntv/redis-rate-limiter.git
cd redis-rate-limiter
make
cp ratelimit.so /path/to/modules/
vi redis.conf

在配置中添加如下:

loadmodule /path/to/modules/ratelimit.so

cd src
./redis-server ../redis.conf &

测试如下:

  

2. redis+lua原子操作。

 本方案强烈建议云平台服务使用。

将操作redis的限流算法在lua脚本内实现,灵活性极强。具体的限流算法可参加:常见的五种服务限流算法及其实现

若因流量导致瓶颈,可优化lua内容为sha1进行请求调用。

3. redis+分布式锁。

分布式锁本质还是lua实现,而且中间会多次调用redis服务,性能最低,不建议使用。

 

posted on 2022-07-11 18:00  仲达超  阅读(546)  评论(0编辑  收藏  举报

导航