熔断降级
根源
-
高并发架构下,各种微服务存在依赖关系
- 如果某项服务出现延迟或响应过慢,依赖它的其他服务也会一直等待,出现请求堆积和资源占用,从而扩散到所有微服务,引发雪崩效应
-
基本的处理手段
- 给http请求设置超时时间,避免请求堆积
- 用限流算法限制并发数
- 熔断——错误率过高时就先不调用,同时按间隔试探,成功则恢复正常
- 降级——在流量过大时,主动放弃一些次要服务,让其返回统一的不可用结果,从而缓解系统压力
熔断
-
概念
- 当某个服务出问题时,暂时断开这个服务一段时间,防止整个服务被拖垮
-
熔断例子
- Spring Cloud组件 Hystrix
- 熔断触发条件
- 检测到10秒内,服务请求的失败率超过50%
- 之后每隔5秒重新尝试,如果服务可达则恢复正常
降级
-
概念
- 暂时关闭部分服务,优先保障核心服务可用
-
降级方式
- 延迟服务
- 把一些写操作先缓存起来,等服务平稳后再执行
- 关闭功能
- 对某个子模块禁止访问
- 延迟服务
-
降级例子
- Spring Cloud组件 Hystrix
- 降级触发条件
- 方法抛出 HystrixBadRequestException
- 方法调用超时
- 熔断器开启拦截调用
- 线程池或队列或信号量已满