我们使用Hystrix来实现服务的熔断和限流,在对应的接口上添加对应的 @HystrixCommand注解,注解内置了超时时间及断路器开关,以及降级后对应的回调处理方法,可以自定义返回信息;
Hystrix的主要原理是用了断路器模式和线程池隔离技术;
通过断路器的故障监控,向服务调用方返回一个符合预期的,可处理的备选响应;而不是长时间的等待或者抛出无法处理的异常,这样就避免了服务不可用造成服务调用方长时间不必要的等待,避免了故障在分布式系统的蔓延,以至于对整个系统造成影响;
通过线程池隔离技术,即所有使用了 @HystrixCommand的方法,都会开启一个线程来执行,避免了服务的执行不会影响到其他的服务;
Hystrix Ribbon OpenFeign三者的关系
Hystrix:保障系统稳定性的熔断降级工具。
Ribbon:提升服务调用可靠性的负载均衡组件。
OpenFeign:简化远程调用的声明式 HTTP 客户端,天然整合 Ribbon 和 Hystrix
Hystrix的限流有哪两种模式
线程池模式:线程池隔离,线程数达到最大值时,后续请求会被拒绝,并抛出异常;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public String getOrder() {
// 业务逻辑
}信号量模式:信号量隔离,当信号量达到最大值时,后续请求会被拒绝,并抛出异常;
1
2
3
4
5
6
7
8
9
10
public String process() {
// 业务逻辑
}
线程池与信号量隔离的对比
| 维度 | 线程池隔离 | 信号量隔离 |
|---|---|---|
| 资源消耗 | 较高(需维护线程池) | 较低(仅计数器) |
| 响应速度 | 存在线程切换开销 | 无额外开销,响应更快 |
| 突发流量处理 | 支持队列缓冲 | 直接拒绝超限请求 |
| 适用场景 | 依赖服务响应较慢或需异步处理 | 依赖服务响应快且需严格控制并发 |