为什么需要容错限流
服务依赖 :服务扇出
单个服务延迟:所有请求都阻塞在某个服务上
容错限流的原理
超时:主动超时
限流:限制最大流量
熔断:当错误达到阀值时类似于保险丝的熔断
隔离:隔离不同的依赖调用
服务降级
断路器模式
舱壁隔离模式
1 凡是依赖都有可能失败
2 凡是资源都有限制
3 网络并不可靠
4 延迟是应用稳定性的杀手,延迟会占用大量的资源,比如内存等
Hystrix原理
Hystrix自适应工作流程
断路器
基于以秒为单位的滚筒,如果处于断路状态,或者睡眠时间未到达则拒绝请求,否则放入一个请求,并通过滚筒计算失败率,如果失败率超过阀值则关闭电路
Hystrix的主要概念
Hystrix command 自己的业务逻辑继承 Hystrix command
快速失败
安静失败 失败的时候返回空值
static fallback 返回默认值
Fallback via Network 调用辅助服务
Primary secondary with fallback 先尝试老功能,新功能没问题再尝试新功能
请求合并 把一段时间内的请求合并发送
请求缓存 对请求进行缓存
Hystrix 信号量和线程池隔离
线程池隔离:为每一个依赖的服务单独建立一个线程池
支持排队,主动超时,支持异步调用
适用于不授信客户,适用于非高扇出场景
信号量隔离:为每一个依赖的服务建立信号量
适合 授信服务,高扇出场景
Hystrix 的主要配置项
隔离策略
间隔窗口
最小流量阀值
最小错误阀值
补充:服务熔断和服务降级
服务熔断
向调用方返回一个符合预期的,可处理的备选响应,而不是长时间的等待或者抛出调用方无法处理的异常。当某个异常条件被触发,直接熔断整个服务,而不是一直等到此服务超时。
缺点:方法膨胀;处理异常的方法跟业务方法耦合在了一起
服务降级
服务降级是在客户端完成的,与服务端没有关系。一般是从整体负荷考虑,当某个服务熔断以后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值,这样做虽然服务水平下降,但是还是能保证可用性的。
拿下SpringCloud之Hystrix容错限流
最新推荐文章于 2024-04-11 18:16:07 发布