分布式容错框架
- 阻⽌故障的连锁反应,实现熔断
-
快速失败,实现优雅降级
-
提供实时的监控和告警
资源隔离:
线程隔离,信号量隔离
-
线程隔离 :Hystrix会给每⼀个Command分配⼀个单独的线程池,这样在进⾏单个服务调⽤的时候,就可以在独⽴的线程池⾥⾯进⾏,⽽不会对其他线程池造成影响
-
信号量隔离 :客户端需向依赖服务发起请求时,⾸先要获取⼀个信号量才能真正发起调⽤,由于信号量的数量有限,当并发请求量超过信号量个数时,后续的请求都会直接拒绝,进⼊ fallback 流程。信号量隔离主要是通过控制并发请求量, 防⽌请求线程⼤⾯积阻塞 ,从⽽达到限流和防⽌雪崩的⽬的。
熔断和降级:
调用服务失败后快速失败
- 熔断:是为了防⽌异常不扩散,保证系统的稳定性
-
降级 :编写好调⽤失败的补救逻辑,然后对服务直接停⽌运⾏,这样这些接⼝就⽆法正常调⽤,但⼜不⾄于直接报错,只是服务⽔平下降
其次:
-
通过 HystrixCommand 或者 HystrixObservableCommand 将所有的外部系统(或者称为依赖)包装起来,整个包装对象是单独运⾏在⼀个线程之中(这是典型的命令模式)。
-
当请求被拒绝、连接超时或者断路器打开,直接执⾏fallback逻辑。
-
近乎 实时监控指标和配置变化 。
-
超时请求应该超过你定义的阈值
-
为每个依赖关系维护⼀个⼩的线程池(或信号量); 如果它变满了,那么依赖关系的请求将⽴即被拒绝,⽽不是排队等待。
-
统计成功,失败(由客户端抛出的异常),超时和线程拒绝。
-
打开断路器可以在⼀段时间内停⽌对特定服务的所有请求,如果服务的错误百分⽐通过阈值,⼿动或⾃动的关闭断路器。