限流

作者: notatent | 来源:发表于2019-05-05 13:33 被阅读0次

为了保证服务在高峰时期,业务系统能稳定执行,并有一定的弹性。需要提供降级及熔错功能。

1. 限流

通过对并发访问/请求进行限速或一个时间窗口内的请求进行限速,从而达到保护系统的目的。

一般系统可以通过压测来预估能处理的峰值,一旦达到设定的峰值阀值,则可以拒绝服务(定向错误页或告知资源没有了)、排队或等待(例如:秒杀、评论、下单)、降级(返回默认数据)。

常用限流算法:

Leaky bucket
Token bucket
Fixed window counter
Sliding window log
Sliding window counter

Leaky bucket:

漏桶算法,强行限定请求速率,当请求过大会直接溢出,不能应对突发流量。


leakyBucket.png

Token bucket:

令牌桶算法,允许突发请求,有一定的弹性。


leakyBucket.png

Fixed window counter:

固定时间窗口,单个间段都符合限制频率,但连续的时间段超过限制频率


fixedWindowCounter.png

Sliding window:

滑动时间窗口


slidingWindow.png

针对单应用,Google guava 类库里已经提供了漏桶及令牌桶算法
分布式的情况下,用滑动窗口是最合理的。
用 redis + lua来实现。

local key = KEYS[1]
local now = tonumber(ARGV[1])
local windowInSecond = 1
local limit = 50
local clearBefore = now - windowInSecond * 1000
redis.call("ZREMRANGEBYSCORE", key, 0, clearBefore)
local amount = redis.call("ZCARD", key)
if amount < limit then
    redis.call("ZADD", key, now, now)
end
redis.call("EXPIRE", key, windowInSecond)
local remaining = math.max(0, limit - amount)
return remaining

相关文章

  • 高并发环境下的限流策略

    本文将从以下几个方面分析限流策略: 什么是限流限流算法限流算法的应用 什么是限流 在开发高并发系统时,有很多手段来...

  • 聊聊高并发系统之限流特技-2

    摘要:上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流;本篇将介绍接入层限流实现。 接入层...

  • 限流框架系列之常见限流算法

    四种常见的限流算法 固定时间窗口限流算法 滑动时间窗口限流算法 令牌桶限流算法 漏桶限流算法 算法比较 算法确定参...

  • Semaphore CountDownLatch CyclicB

    限流可分为并发限流和速率限流。 Semaphore就属于并发限流的实现。 插句话:速率限流一般限的是QPS,即一秒...

  • 聊聊高并发系统限流特技-2

    转载来自开涛的聊聊高并发系统限流特技-2 上一篇《聊聊高并发系统限流特技-1》讲了限流算法、应用级限流、分布式限流...

  • 图解+代码|常见限流算法以及限流在单机分布式场景下的思考

    大家好,我是 yes。 今天来说说限流的相关内容,包括常见的限流算法、单机限流场景、分布式限流场景以及一些常见限流...

  • 限流降级方案

    限流算法 并发数限流 计数器并发数限流:使用共享变量实现 信号量:使用java中的Semaphore QPS限流 ...

  • 高并发下的Nginx实用配置 - 限流和黑白名单

    1. 限流算法 漏桶算法 令牌桶算法 更多限流算法相关知识,请查看【单机限流 - 限流算法及隔离策略】[https...

  • 服务限流

    保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流可是Nginx接入层面的限流,也可以是服务层面的限流。 ...

  • 限流算法

    前言 保障服务稳定的三大利器:熔断降级、服务限流和故障模拟。限流包括Nginx层面的限流以及业务代码逻辑上的限流。...

网友评论

      本文标题:限流

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