Ch00 Pressure

4/9/2022 TestTest

#

# ..

# 压测架构

image-20231022133412952

# 熔断image-20231022133543574

  • 调别人的服务,别人的服务RT响应过高,会导致整个链路的雪崩
  • 就直接不去调用这个服务了

# 限流

  • 队列 + 漏斗:漏桶算法的实现往往依赖于队列,请求到达如果队列未满则直接放入队列,然后有一个处理器按照固定频率从队列头取出请求进行处理。如果请求量大,则会导致队列满,那么新来的请求就会被抛弃。

  • 令牌桶:令牌桶算法则是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,超出之后就被丢弃或者拒绝。当流量或者网络请求到达时,每个请求都要获取一个令牌,如果能够获取到,则直接处理,并且令牌桶删除一个令牌。如果获取不同,该请求就要被限流,要么直接丢弃,要么在缓冲区等待。

  • Guavahttps://zhuanlan.zhihu.com/p/60979444image-20231022221215336

    • # 平滑突发限流

      使用 RateLimiter的静态方法创建一个限流器,设置每秒放置的令牌数为5个。返回的RateLimiter对象可以保证1秒内不会给超过5个令牌,并且以固定速率进行放置,达到平滑输出的效果。RateLimiter由于会累积令牌,所以可以应对突发流量。

    • # 平滑预热限流

      RateLimiterSmoothWarmingUp是带有预热期的平滑限流,它启动后会有一段预热期,逐步将分发频率提升到配置的速率。 比如下面代码中的例子,创建一个平均分发令牌速率为2,预热期为3分钟。由于设置了预热时间是3秒,令牌桶一开始并不会0.5秒发一个令牌,而是形成一个平滑线性下降的坡度,频率越来越高,在3秒钟之内达到原本设置的频率,以后就以固定的频率输出。这种功能适合系统刚启动需要一点时间来“热身”的场景。

  • GuavaRateLimiter只能用于单机的限流,如果想要集群限流,则需要引入 redis或者阿里开源的 sentinel中间件

# 降级

  • 对非核心模块降级,就是在业务的高峰期,把非核心功能隔离开,或者直接下线(比如在大促的时候,商品评价不能改变)
Last Updated: 11/19/2024, 1:54:38 PM