计算架构模式之接口高可用
接口高可用整体框架
接口高可用主要应对两类问题:雪崩效应和链式效应。
雪崩:当请求量超过系统处理能力之后,会导致系统性能螺旋快速下降,本来系统可以处理1000条,但是当请求量超过1200的时候,此时性能会下降,然后处理速度越来越慢,系统表现越来越差,问题越来越严重。
链式:一个故障会引起后续一连串的故障。防止链式效应就是出了故障之后不要让故障扩散,不要因为A系统出了故障,B系统也由于A系统出现故障导致出现故障,最后所有的系统全部都出现故障。
接口高可用架构本质上是“丢车保帅”策略,业务或者用户体验会部分有损!也就是说任何情况下都无法保证任何用户不受影响。
限流
请求端限流:比如摇一摇本身就是概率事件,可以直接在请求端进行限流。或者说秒杀也可以。
限流具体实现方式
限流算法
固定 & 滑动 时间窗
限流算法-漏桶
漏桶算法变种-写缓冲(Buffer)
因为读可以从发,写不可以。写还得从新输入,体验不好。
限流算法-令牌桶
突发流量的时候由于令牌桶的速度无法及时调整,那么就会导致请求丢失
Java 限流的漏桶算法简单示例
太短的话,队列就直接给拦掉了
这类框架可以通过钩子开发(拦截处理器)来实现自定义的限流
排队
排队的架构示意图
轮询排队结果,轮询到了就可以进行实际的业务请求了。
排队的具体实现方案示例
1号店双十一秒杀排队
降级
降级架构实现
降级模块下发指令,告诉模块,哪个接口进行降级
熔断
比如A服务一分钟内出现10次故障,那么就不在调用了