这是我参与8月更文挑战的第21天,活动详情查看:8月更文挑战
Hystrix
是高可用性保障的一个框架
一、理念
容错理念:
- 凡是依赖都可能会失败
- 凡是资源都有限制
CPU/MEMORY/THREAD
- 网络并不可靠
- 延迟是应用稳定性杀手
弹性(Resilience)理念:
在被弯曲,压缩或者拉伸之后,能够恢复原状的能力。 从疾病,抑郁和困境等类似情况中恢复出来的能力。
二、Hystrix
要解决的问题是什么?
避免一个服务不可用导致整个调用链路不可用。
三、Hystrix
设计原则
- 对依赖服务调用时出现的调用延迟和调用失败进行控制和容错保护
- 在复杂的分布式系统中,组织某一个依赖服务的故障在整个系统中蔓延
- 提供
fail-fast
(快速失败)和快速恢复的支持 - 提供
fallback
优雅降级的支持 - 支持近实时的监控 报警以及运维操作
更具体:
- 阻止任何一个依赖服务耗尽所有的资源,比如
Tomcat
中的所有线程资源 - 避免请求排队和积压,采用限流和
fail fast
来控制故障 - 提供
fallback
降级机制来应对故障 - 使用资源隔离技术, 比如
bulkhead
(舱壁隔离技术),swimlane
(泳道技术),circuit breaker
(短路技术), 来限制任何一个依赖服务的故障的影响 - 通过近实时的统计/监控/报警功能, 来提高故障处理和恢复的速度
- 通过近实时的属性和配置热修改功能, 来提高故障处理和恢复的速度
- 保护依赖服务调用的所有故障情况, 而不仅仅只是网络故障情况
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) • 有限扇出