读书笔记000000002--亿级流量网站架构核心技术--限流术

限流

what-->why-->how

1.什么是限流

在开发高并发系统时,有很多手段来保护系统,如缓存、降级和限流等。缓存目的是提升系统访问速度和增大系统处理能力,可谓是抗高并发流量的银弹。而降级是当服务出问题或者影响到核心流程的性能,需要暂时屏蔽掉,待高峰过去或者问题解决后再打开的场景。而有些场景并不能用缓存和降级来解决,比如稀缺资源(秒杀、抢购)、写服务(如评论、下单)、频繁的复杂查询(评论的最后几页)等。因此,需有一种手段来限制这些场景下的并发/请求量,这种手段就是限流。

2.目的

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务(定向到错误页或告知资源没有了)、排队或等待(比如秒杀、评论、下单)、降级(返回兜底数据或默认数据,如商品详情页库存默认有货)。在压测时我们能找出每个系统的处理峰值,然后通过设定峰值阈值,来防止当系统过载时,通过拒绝处理过载的请求来保障系统可用。另外,也应根据系统的吞吐量、响应时间、可用率来动态调整限流阈值。先有缓存这个银弹,后有限流来应对618、双11高并发流量,在处理高并发问题上可以说是如虎添翼,不用担心瞬间流量导致系统挂掉或雪崩,最终做到有损服务而不是不服务。

3.常见限流手段

一般开发高并发系统常见的限流有:限制总并发数(比如数据库连接池、线程池)、限制瞬时并发数(如 Nginx 的limit_conn模块,用来限制瞬时并发连接数)、限制时间窗口内的平均速率(如Guava的RateLimiter、Nginx 的 limit_req模块,用来限制每秒的平均速率),以及限制远程接口调用速率、限制MQ的消费速率等。另外,还可以根据网络连接数、网络流量、CPU或内存负载等来限流。

4.注意事项

限流需要做好评估,不可卵用,否则正常流量会出现一些问题。

5.限流算法

5.1令牌桶

一个存放固定容量的桶,按照固定速率往桶里添加令牌。

特点

允许突发
固定速率添加

5.2漏桶

一个存放固定容量的桶,按照固定速率流出水滴。

特点

平滑突发流量
常量流出

6.应用级限流

6.1限制总并发数/连接数/请求数

6.2限流总资源数

数据库连接,线程池等稀缺资源,可以考虑池化(连接池、线程池)

6.3限流某个接口总的并发数、请求数

特殊业务,如秒杀、抢购。可以限制核心接口的总并发或者总请求数。

6.4限流某个接口的时间窗请求数

接口限速,避免挂掉

6.5平滑限流某个接口的请求数

7.接入层限流

nginx限流

8.节流

在特定时间窗口内对重复的相同时间最多只处理一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值