背景:
分布式环境下,系统间的依赖可能会十分庞大,复杂,一个请求可能会经过多个依赖服务,最后完成相应。
hystrix可帮助隔离每个服务,使单个服务的响应失败,不影响整个请求的响应。甚至,可预定义单个服务失败
后的响应。有了hystrix的容错,熔断机制,可极大提升整个服务的可靠,可用性。
如何解决:
1,hystrix作用在客户端,客户端程序依赖hystrix相关的第三方包,使得客户端与所依赖的服务,形成线程隔离。依赖服务的延迟与失败变的可控。保护调用者线程的执行。
2,避免了分布式系统中,单个组件的失败导致的级联影响。
3,快速失败,迅速恢复。 hystrix有这快速失败机制,单个组件服务失败率到一定程度后,再请求,会直接响应失败。再这之后,会有重试机制。
减少系统在错误服务调用上的开销。
4,降级应用
5,实时的监控
hystrix的设计原则:
1,防止任何单个依赖服务耗尽所有用户线程,
2,直接响应失败,而不是一直等待。
3,提供错误返回接口,而不是让用户线程直接处理依赖服务抛出的异常。
4,使用隔离或熔断技术来降低并限制单个依赖对整个系统造成的影响。
hystrix如何解决上述问题:
1,将对外部系统的请求,使用HystrixCommand包装,并使用单独的线程执行。
2,可对服务请求设置timeout,超时后,直接返回,可根据平时监控,查看该服务95%的请求的rt为多少进行设置
3,维护一个小的线程池在客户端,专门处里对指定服务的请求,当线程使用量超过线程池容量时,直接返回响应,
而不是排队等待处里。
4,触发熔断来停止所有对指定服务的请求在一定时间范围内,可手动,可自动,针对该服务请求的错误数百分比。
5,对超时,失败,或者熔断,做特殊错误返回处理fallback.
使用:
引入maven依赖
![](https://img.haomeiwen.com/i2145947/b54b3fb46c9d05d5.png)
![](https://img.haomeiwen.com/i2145947/d3e01bc705388cc9.png)
上例展示了如何基本的使用hystrix,使用时,定义commandGroup,设置线程池,定义超时时间,以及错误返回
超时时间也可以在调用处定义。
网友评论