自己实现ip限流可以不用redis,内存哈希表就足够了
目录
这是我的高吞吐http2服务器优化经验分享系列 第四篇博客。
背景
在公网环境部署的web服务可能遭遇大流量的请求,哪怕是自己发动的压力测试,在未经限流的情况下,也可能也引发OOM,数据库使用率100%等情况。
为了保持高可用性,进行限流势在必行。
在各种限流方案中,基于ip的限流是一种常见的做法。
为什么自己实现不用ip限流可以不用redis
这是因为以下两个原因。
- ip限流的目的是保护服务不因明显不合理的大量请求而降低可用性。
即使存了几百万ip字符串,也仅需几十mb内存,完全可以使用内存哈希表,
实现纳秒级判断通过或阻止,避免redis的网络开销。 - 如果需要全局ip限流,比如要10秒限同一ip10次,
即使服务部署在多个机器也严格执行,可以使用CDN,现代CDN普遍支持,
无需自己重复实现此功能,更重要的是在遭遇CC攻击时,限流不用自己的计算资源。