自动降级的实现:Hystrix
有时,我们需要根据服务的超时时间等对服务进行自动降级。这种场景下,Hystrix就可以发挥它的作用了。
Hystrix概述
Hystrix是什么
Hystrix是Netflix开源的一个容灾框架,解决当外部依赖故障时拖垮业务系统、甚至引起雪崩的问题。在分布式环境中,许多服务依赖关系中的一些不可避免地会失败。 通过Hystrix为应用/服务添加延迟容限和容错逻辑,则控制这些分布式服务之间的交互。 Hystrix通过隔离服务之间的访问、停止它们之间的级联故障、提供备用选项来实现这一点,所有这些都可以提高系统的整体弹性。
Hystrix可以做什么
Hystrix是为如下功能而设计的:
在依赖方延迟或失败情况下(通常是网络原因),为应用提供处理这些问题的能力
避免在复杂的分布式系统中出现雪崩效应(级联故障)
失败回退(Fallback)和优雅的服务降级机制
监控、报警和其他一些运营操作
更多详见:Hystrix 官方介绍
使用Hystrix实现自动降级
假如我们有EchoService,其中有个接口为echoTime,它会返回当前时间。
public class EchoService {
public String echoTime(){
//模拟抛出异常:(1/5的概率抛出异常)
if(new Random().nextInt(10) > 7){
System.out.println("exception:::failure processing echo time");
throw new RuntimeException();
}
//模拟网络耗时(1/2的概率100,1/2的概率1200)
try {
long elapsed = new long[]{100, 1200}[new Random().nextInt(2)];
System.out.println("elapsed:::" + elapsed);
Thread.sleep(elapsed);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "[normal]time:::" + System.currentTimeMillis();
}
}