秋来冬风的博客

自己实现ip限流可以不用redis,内存哈希表就足够了

目录

这是我的高吞吐http2服务器优化经验分享系列 第四篇博客。

背景

在公网环境部署的web服务可能遭遇大流量的请求,哪怕是自己发动的压力测试,在未经限流的情况下,也可能也引发OOM,数据库使用率100%等情况。

为了保持高可用性,进行限流势在必行。

在各种限流方案中,基于ip的限流是一种常见的做法。

为什么自己实现不用ip限流可以不用redis

这是因为以下两个原因。

  1. ip限流的目的是保护服务不因明显不合理的大量请求而降低可用性。
    即使存了几百万ip字符串,也仅需几十mb内存,完全可以使用内存哈希表,
    实现纳秒级判断通过或阻止,避免redis的网络开销。

  2. 如果需要全局ip限流,比如要10秒限同一ip10次,
    即使服务部署在多个机器也严格执行,可以使用CDN,现代CDN普遍支持,
    无需自己重复实现此功能,更重要的是在遭遇CC攻击时,限流不用自己的计算资源。
Tags:
Categories: