什么是Hystrix
是一个提供了容错机制的类库。可以处理超时容错和容错。可以防止服务出现联动故障。
功能点:
- 超时容错
- 断路器
- 线程隔离
- 限流(信号量、线程池满负载)
设计原则
防止单个服务的故障,耗尽整个系统服务的容器(比如tomcat)的线程资源。
减少负载并快速失败,而不是排队。
在可行的情况下提供回退以保护用户免受故障。 使用隔离技术(如隔板,泳道和断路器模式)来限制任何一个依赖的影响。
通过近乎实时的指标,监控和警报来优化发现故障的时间。
通过配置更改的低延迟传播优化恢复时间,并支持Hystrix大多数方面的动态属性更改,从而允许您使用低延迟反馈循环进行实时操作修改。
保护整个依赖客户端执行中的故障,而不仅仅是在网络流量上进行保护降级、限流。
Hystrix 是怎么实现它的设计目标的?
通过HystrixCommand 或者HystrixObservableCommand 将所有的外部系统(或者称为依赖)包装起来,整个包装对象是单独运行在一个线程之中(这是典型的命令模式)。
超时请求应该超过你定义的阈值 为每个依赖关系维护一个小的线程池(或信号量); 如果它变满了,那么依赖关系的请求将立即被拒绝,而不是排队等待。 统计成功,失败(由客户端抛出的异常),超时和线程拒绝。 打开断路器可以在一段时间内停止对特定服务的所有请求,如果服务的错误百分比通过阈值,手动或自动的关闭断路器。 当请求被拒绝、连接超时或者断路器打开,直接执行fallback逻辑。 近乎实时监控指标和配置变化。