【Hystrix】

124 阅读2分钟

这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战

Hystrix 是高可用性保障的一个框架

一、理念

容错理念:

  • 凡是依赖都可能会失败
  • 凡是资源都有限制 CPU/MEMORY/THREAD
  • 网络并不可靠
  • 延迟是应用稳定性杀手

弹性(Resilience)理念:

在被弯曲,压缩或者拉伸之后,能够恢复原状的能力。 从疾病,抑郁和困境等类似情况中恢复出来的能力。

二、Hystrix要解决的问题是什么?

避免一个服务不可用导致整个调用链路不可用。

三、Hystrix设计原则

  1. 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护
  2. 在复杂的分布式系统中,组织某一个依赖服务的故障在整个系统中蔓延
  3. 提供fail-fast(快速失败)和快速恢复的支持
  4. 提供 fallback 优雅降级的支持
  5. 支持近实时的监控 报警以及运维操作

更具体:

  1. 阻止任何一个依赖服务耗尽所有的资源,比如 Tomcat 中的所有线程资源
  2. 避免请求排队和积压,采用限流和 fail fast来控制故障
  3. 提供 fallback 降级机制来应对故障
  4. 使用资源隔离技术, 比如 bulkhead(舱壁隔离技术), swimlane(泳道技术), circuit breaker(短路技术), 来限制任何一个依赖服务的故障的影响
  5. 通过近实时的统计/监控/报警功能, 来提高故障处理和恢复的速度
  6. 通过近实时的属性和配置热修改功能, 来提高故障处理和恢复的速度
  7. 保护依赖服务调用的所有故障情况, 而不仅仅只是网络故障情况

Hystrix工作流程(自适应反馈机)

如图:

断路器内核

如图:

四、主要概念

(1)Hystrix Cmomand

如图:

(2)Fail Fast

(3)Fail Silent

(4)Static Fallback

(5)Fallback via Network

(6)Primary + Secondary with Fallback

(7)请求合并

(8)请求缓存

五、信号量和线程池隔离

(1)线程和信号量隔离

如图:

区别在于:

  • 线程:通过线程池调用
  • 信号量:信号量数减1,请求通过服务线程

(2)线程隔离案例

(3)对比

信号量隔离 线程池隔离 • 优点 • 优点 • 轻量,无额外开销 • 不足 • 不支持任务排队和主动超时 • 不支持异步调用 • 适用 • 受信客户 • 支持排队和超时 • 支持异步调用 • 不足 • 线程调用会产生额外的开销 • 适用 • 高扇出(网关) • 不受信客户 • 高频高速调用(cache) • 有限扇出