如何降低QPS(错峰、限流、削峰)

 如何降低QPS(错峰、限流、削峰)

目录

一、错峰策略

二、限流策略

三、削峰策略


服务端每秒流量处理能力是通过QPS衡量的,最大QPS(峰值)就是对服务端抗压能力的衡量指标,如果来自客户端的流量超过了服务端最大QPS,要么服务端发生宕机,要么将超过能力范围内的请求忽略掉,返回限流错误给客户端,两者都造成用户体验的崩塌和品牌受损。

策略概括起来就三点:错峰限流、削峰,本质上都是为了降低QPS。
 

一、错峰策略

"错峰",顾名思义就是将请求峰值错开,服务端的QPS峰值可以看做是一系列的小QPS峰值请求的叠加,因此通过一些技术手段来错开这些小峰值,有效降低最大QPS。我们可以从服务端和客户端两个维度来错峰。

1.1 服务端错峰策略

如果触发客户端的请求动作是通过服务端主动下发实现的,比如PowerMsg支持服务端主动下发,那么服务端可以分批下发给客户端(假设所有服务端到客户端的时延RT是一样的)。
 

 

1.2 客户端错峰策略

常用的客户端错峰策略采用的是随机算法,假设所有客户端接收要触发请求动作的时间是一样的,给定一个时间T,客户端采用随机延迟,t时刻再去触发请求动作,其中t在[0,T]时间段内随机。

 

从大量数据来看,这个公式可以保证 t 在区间 [0, T] 之间均匀分布。那么理论上新的最大QPS等于老的最大QPS除以T。
 

 

二、限流策略

服务端基本都会做限流,比如Mtop限流之后返回对应的限流错误码。下面主要介绍客户端限流。客户端限流主要目标是消除频繁或不必要的请求。

  • 用户已经到达最大请求次数,就不去请求;

  • 用户已经被限流,则延迟再去第二次请求;

  • 用户已经拿到所要的返回结果,则不再去请求。

 

三、削峰策略

削峰,也就是消除峰值的最大QPS,有几种削峰策略。

3.1 设置两次请求最小有效时间间隔

设置两次请求最小有效时间间隔,假设最小时间间隔是t,那么在小于t的时间的请求都视为无效请求,忽略掉。像红包雨这类频繁请求的活动,该策略非常有效。

 

例如上图,红色是有效请求,灰色是无效请求,灰色也就不会向服务端发送请求。假设t秒内只有一次有效请求,那么1秒内,有1/t次有效请求,用户量是Q,那么最大QPS如下(假设所有的用户都是同时开始请求,间隔时间一致):
 

3.2 概率请求策略

如果不想每次都让用户去请求,给用户请求的动作加一个概率P,那么每次发送请求的概率就是P,这个时候需要结合3.1的策略去控制用户的每秒请求次数。最大QPS公式如下:


通过控制t和P的值,就可以灵活控制最大QPS范围。这里有一个问题,就是根据概率容易产生极端请求,比如:
 

大量数据就容易产生大量的极端请求,违反公平性原则,就需要用到公平性策略。

 

3.3 公平性策略

这里提供一种公平性策略的方式,随机算法+插值算法,生成有效请求序列。

每个用户一次活动周期内有效请求概率是P,比如概率0.2,也就是5次中1次请求机会,或者10次中2次请求机会。根据随机算法+插值算法生成请求序列:


 

根据上述方式就可以得到公平性策略,粒度可以自由把控。

通过上述错峰、限流、削峰方式,达到降低QPS的目的。通常,一场大促需要上述几种方案的结合。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值