分布式服务的限流实现(基于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服务,性能最低,不建议使用。