本文主要介绍Hystrix的基本功能,原理。Hystrix协调分布式系统中各个服务高可用的框架,SpringCloud体系重要的一员。Hystrix主要解决了服务雪崩问题、服务监控问题等。web
Hystrix将对外部服务的调用和一系列处理封装为一个Commond对象,具体分为HystrixCommand(直接调用命令),HystrixObservableCommand(观察者订阅命令),后者能够注册回调事件。二者均可以以异步或同步的方式调用(异步返回Future,后续能够调用get阻塞获取结果)。缓存
Commond对象对资源隔离进行隔离有两种方式,一种是使用线程池(经常使用),第二种是使用信号量。二者都是对Commond被调用的线程并发数量进行限制,区别在于信号量只是对command被调用并发许可的一个线程,不能记录超时信息等等。架构
在一个web调用主线程中,为该主线程调用服务的command创建缓存,使得调用依赖服务相同参数的状况下直接从内存中获取结果,因为本人认为其做用不是很大,因此就很少介绍了,主要是在拦截器中初始化HytrixRequestContext(这个缓存数据目测应该是在线程本地变量里面),而后Command中实现getCacheKey方法返回cache的key,当key同样时,直接尝试获取以前调用后返回相同key的结果。并发
经过Command实现getFallBack方法(HystrixCommand)或resumeWithFallback方法(HystrixObservableCommand),实现降级逻辑,本地返回降级以后的结果。框架
必定时间以后会切换到半开状态,让1个请求经过,看是否可以正常返回异步
若是半开状态容许经过的请求成功了,就关闭断路器分布式
在实践中,一般用了hystrix,通常的架构体系都是SpringCloud那一套,由于feign组件封装了hystrix能够实现熔断、服务隔离。本文是在学习原生Hystrix所总结的,涉及到的使用和配置方法可能会与当前实践相偏离,可是看官着重hystrix的功能原理就好,具体应用时能够再查阅相关资料。学习