Hystrix概念文档理解及实践分析

Hystrix概念及文档理解

什么是Hystrix

Hystrix是一个库,它提供了服务与服务之间的容错功能,主要体现在延迟容错和容错,从而做到控制分布式系统中的联动故障。Hystrix通过隔离服务的访问点,阻止联动故障,并提供故障的解决方案,从而提高了这个分布式系统的弹性。

Hystrix作用

服务由于某种故障,比如机房的不可靠性、网络服务商的不可靠性等因素,导致某个服务不可用,如果系统不隔离该不可用的服务,可能会导致整个系统不可用。
在高并发的情况下,单个服务的延迟,可能导致所有的请求都处于延迟状态,可能在几秒钟就使服务处于负载饱和的状态。服务的单个点的请求故障,会导致整个服务出现故障,更为糟糕的是该故障服务,会导致其他的服务出现负载饱和,资源耗尽,直到不可用,从而导致这个分布式系统都不可用。这就是“雪崩”。
对于以上的情况,避免雪崩,我们就需要快速反应,网络连接失败或降级。 服务和服务器失败或变慢。 新的库或服务部署会改变行为或性能特征。 客户端库有错误。这些都代表需要隔离和管理的故障和延迟,以便单个故障依赖关系不能导致整个应用程序或系统的故障。这就是Hystrix需要处理的。

Hystrix的设计原则

  1. 防止单个服务的故障,耗尽整个系统服务的容器(比如tomcat)的线程资源。 减少负载并快速失败,而不是排队。
  2. 在可行的情况下提供回退以保护用户免受故障。 使用隔离技术(如隔板,泳道和断路器模式)来限制任何一个依赖的影响。
  3. 通过近乎实时的指标,监控和警报来优化发现故障的时间。
  4. 通过配置更改的低延迟传播优化恢复时间,并支持Hystrix大多数方面的动态属性更改,从而允许您使用低延迟反馈循环进行实时操作修改。
  5. 保护整个依赖客户端执行中的故障,而不仅仅是在网络流量上进行保护降级、限流。

Hystrix设计实现

  • 通过HystrixCommand 或者HystrixObservableCommand
    将所有的外部系统(或者称为依赖)包装起来,整个包装对象是单独运行在一个线程之中(这是典型的命令模式)。
  • 超时请求应该超过你定义的阈值
  • 为每个依赖关系维护一个小的线程池(或信号量); 如果它变满了,那么依赖关系的请求将立即被拒绝,而不是排队等待。
  • 统计成功,失败(由客户端抛出的异常),超时和线程拒绝。
  • 打开断路器可以在一段时间内停止对特定服务的所有请求,如果服务的错误百分比通过阈值,手动或自动的关闭断路器。
  • 当请求被拒绝、连接超时或者断路器打开,直接执行fallback逻辑。
  • 近乎实时监控指标和配置变化。

Hystrix工作原理

在这里插入图片描述
1、构建一个HystrixCommand或者HystrixObservableCommand 对象。
2、执行Command。
补充知识:
通过使用Hystrix命令对象的以下四种方法之一,可以执行该命令有四种方法(前两种方法仅适用于简单的HystrixCommand对象,并不适用于HystrixObservableCommand):

  • execute()–阻塞,,然后返回从依赖关系接收到的单个响应(或者在发生错误时抛出异常)。
  • queue()–返回一个可以从依赖关系获得单个响应的future 对象。
  • observe()–订阅Observable代表依赖关系的响应,并返回一个Observable,该Observable会复制该来源Observable。
  • toObservable() --返回一个Observable,当您订阅它时,将执行Hystrix命令并发出其响应。
    同步调用execute()调用queue().get(). queue()依次调用toObservable().toBlocking().toFuture()。 这就是说,最终每个HystrixCommand都由一个Observable实现支持,甚至是那些旨在返回单个简单值的命令。
    3、判断响应是否有缓存
    4、
    。。。待补充
    9、

Hystrix项目实践分析

构建项目hystrix-demo,待完善

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值