主题
Hystrix
是什么
Hystrix实现了服务熔断器的功能,就是通过监控远程接口调用的状态,统计分析远程接口调用的数据,一旦出现某个服务出现宕机或故障过多的情况,就自动通过fallback进行服务降级,不再调用远程接口服务,而是直接返回错误状态,避免集群雪崩效应
,这样既有效保障了集群的安全性,也为恢复服务争取了时间。
特性
有服务熔断、服务降级、依赖隔离、请求缓存、请求合并。
实现服务熔断的方法
在需要进行服务降级的类中定义一个fallback方法,当请求的远程服务出现异常时,可以直接使用fallback方法返回异常信息,而不调用远程服务,返回值可以是默认的错误信息,也可以来自缓存。
如何实现服务降级
通过HystrixCommand实现服务降级,熔断器的状态有闭路、半开路和开路。
当请求的失败数量超过一定比例,熔断器会切换到开路状态;
熔断器保持开路状态一段时间后,会自动切换到半开路状态;
熔断器半段下一次请求的返回情况,如果成功,切换回闭路状态,否则切换到并保持开路状态。
实现服务之间的依赖隔离的方式
通过线程池和信号量两种方式
线程池的依赖隔离
是为每个依赖的服务分配一个线程池,每个线程池处理特定的服务,互不影响。
信号量的依赖隔离策略
是为每个依赖的服务都分配一个信号量,当接收到用户请求时,先判断请求依赖的服务所在的信号量值是否超过最大线程设置,如果超过就丢弃该类型的请求;否则在处理请求前执行”信号量+1”的操作,在请求返回后执行”信号量-1“的操作。
请求缓存的含义
Hystrix会按照请求参数把请求结果缓存起来,当之后有相同的请求时不会再走完整的调用链流程,而是把上次缓存的结果直接返回;
缓存也可以作为服务降级的数据源,当服务不可用,直接返回缓存数据,对消费者来说,只是可能获取了过期的数据,但可以优雅的处理系统异常。
实现请求合并的方法
采用异步消息订阅的方式,当应用程序需要请求多个接口时,采用异步调用的方式提交请求,然后订阅返回值,这时应用程序的业务可以接着执行其他任务而不用阻塞等待,当所有请求都返回时,应用程序会得到一个通知,然后取出返回值进行合并。
使用方法
主要分为3个方面,服务熔断、服务降级和服务监控。
1.pom文件添加依赖,服务熔断需要spring-cloud-starter-netflix-hystrix和hystrix-javanica;服务监控需要spring-cloud-netflix-hystrix-dashboard;
2.通过@EnableHystrix注解开启对服务熔断的支持,通过@EnableHystrixDashboard注解开启对服务监控的支持,@EnableEurekaClient开启对服务发现客户端的支持;
3.配置application.properties;4.服务熔断和降级。
为非阻塞I/O提供了哪两种实现方式
表示将来式的Future和表示回调式的Callable。
Future方式是指以多线程的形式异步实现服务调用,主线程不必阻塞等待,在结果返回后再通过Future.get方法获取Future的返回结果;
Callable方式是指预定义一个回调任务,Callable在发出请求后,主线程继续执行,在请求被执行完成并返回结果后,callable会自动调用回调任务。
Hystrix Dashboard的作用
主要用来实时监控Hystrix的各项运行指标。
使用方法:
1.pom文件添加spring-cloud-netflix-hystrix-dashboard;
2.使用@EnableHystrixDashboard注解开启Dashboard功能。