Ch00 Pressure
Yang Haoran 4/9/2022 TestTest
#
# ..
# 压测架构

# 熔断
- 调别人的服务,别人的服务RT响应过高,会导致整个链路的雪崩
- 就直接不去调用这个服务了
# 限流
队列 + 漏斗:漏桶算法的实现往往依赖于队列,请求到达如果队列未满则直接放入队列,然后有一个处理器按照固定频率从队列头取出请求进行处理。如果请求量大,则会导致队列满,那么新来的请求就会被抛弃。
令牌桶:令牌桶算法则是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。桶中存放的令牌数有最大上限,超出之后就被丢弃或者拒绝。当流量或者网络请求到达时,每个请求都要获取一个令牌,如果能够获取到,则直接处理,并且令牌桶删除一个令牌。如果获取不同,该请求就要被限流,要么直接丢弃,要么在缓冲区等待。
Guavahttps://zhuanlan.zhihu.com/p/60979444

# 平滑突发限流
使用
RateLimiter的静态方法创建一个限流器,设置每秒放置的令牌数为5个。返回的RateLimiter对象可以保证1秒内不会给超过5个令牌,并且以固定速率进行放置,达到平滑输出的效果。RateLimiter由于会累积令牌,所以可以应对突发流量。# 平滑预热限流
RateLimiter的SmoothWarmingUp是带有预热期的平滑限流,它启动后会有一段预热期,逐步将分发频率提升到配置的速率。 比如下面代码中的例子,创建一个平均分发令牌速率为2,预热期为3分钟。由于设置了预热时间是3秒,令牌桶一开始并不会0.5秒发一个令牌,而是形成一个平滑线性下降的坡度,频率越来越高,在3秒钟之内达到原本设置的频率,以后就以固定的频率输出。这种功能适合系统刚启动需要一点时间来“热身”的场景。
Guava
RateLimiter只能用于单机的限流,如果想要集群限流,则需要引入redis或者阿里开源的sentinel中间件
# 降级
- 对非核心模块降级,就是在业务的高峰期,把非核心功能隔离开,或者直接下线(比如在大促的时候,商品评价不能改变)