:::tips 流控效果是指请求达到流控阈值时应该采取的措施,包括三种:

  • 快速失败:QPS达到阈值后,新的请求会被立即拒绝并抛出FlowException异常。默认的流控效果就是快速失败
  • warm up:预热模式,对超出阈值的请求同样是拒绝并抛出异常。但这种模式阈值会动态变化,从一个较小值逐渐增加到最大阈值,QPS超过阈值时,拒绝新的请求;QPS阈值是逐渐提升的,可以避免冷启动时高并发导致服务宕机
  • 排队等待:请求会进入队列,按照阈值允许的时间间隔依次执行请求;如果请求预期等待时长大于超时时间,就会被直接拒绝并抛出异常 :::

    warm up

    :::tips 阈值一般是一个微服务能承担的最大QPS,但是一个服务刚刚启动时,一切资源尚未初始化(冷启动),如果直接将QPS跑到最大值,可能导致服务瞬间宕机

warm up也叫预热模式,是应对服务冷启动的一种方案。请求阈值初始值是 maxThreshold(最大阈值)/coldFactor(冷因子),持续指定时长后,逐渐提高到maxThreshold值,而coldFactor的默认值是3

例如设置QPS的maxThreshold为10,预热时间为5秒,那么初始阈值就是10/3,也就是3,然后在5秒后逐渐增长到10

配置warm up流控效果
image.png :::

排队等待

:::tips 当请求超过QPS阈值时,排队等待效果是让所有请求进入一个队列中,然后按照阈值允许的时间间隔依次执行,后来的请求必须等待前面执行完成,如果请求的预期等待时间超出最大时长,就会被拒绝并抛出异常

例如QPS=5,意味着每200ms处理一个队列中的请求;timeout = 2000,意味着预期等待时长超过2000ms的请求会被拒绝并抛出异常

配置排队等待流控效果
image.png :::