美文网首页
程序员之限流

程序员之限流

作者: zhglance | 来源:发表于2023-08-02 20:53 被阅读0次

    一、限流的几种实现方式:
    1.固定窗口限流
    实现方式:通过使用redis的incrementAndGet的原子操作实现,例如要想实现100tps的限流。
    当系统第一次请求的时候,初始化key的值为1,并设置redis的Key的超时时间为1秒,每次请求使用incrementAndGet方式加1,时间过期之后会迭代到下一个窗口。
    优点:简单的实现分布式的限流,
    缺点:在窗口开始的0.00.1时间内,请求了100次访问也不会限流(实际这时候的tps已经达到了1000tps),而0.11.0这段时间的请求无论几次都会被限流。

    二、滑动窗口算法:
    类似于TCP中的流量控制算法,可以通过redis的ZSet实现,ZSet中保留窗口内的每次请求时间戳,
    Sentinel 基于滑动窗口的限流

    三、漏桶算法:
    类似线程池的实现。

    四、令牌桶算法:
    Redission的Lua脚本实现,比如Guava的RateLimiter使用了令牌桶

    相关文章

      网友评论

          本文标题:程序员之限流

          本文链接:https://www.haomeiwen.com/subject/hemppdtx.html