博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【微服务架构】SpringCloud之Hystrix断路器(六)
阅读量:4581 次
发布时间:2019-06-09

本文共 3924 字,大约阅读时间需要 13 分钟。

一:什么是Hystrix

 

在分布式环境中,许多服务依赖项中的一些将不可避免地失败。Hystrix是一个库,通过添加延迟容差和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点,停止其间的级联故障以及提供回退选项,从而提高系统的整体弹性。

Hystrix旨在执行以下操作

1:对通过第三方客户端库访问(通常通过网络)的依赖关系提供保护并控制延迟和故障。

2:隔离复杂分布式系统中的级联故障。

3:快速发现故障,尽快恢复。

4:回退,尽可能优雅地降级。

5:启用近实时监控,警报和操作控制。

 

二:为什么需要Hystrix?

 

大型分布式系统中,一个客户端或者服务依赖外部服务,如果一个服务宕了,那么由于我们设置了服务调用系统超时时间,势必会影响相应时间,在高并发的情况下大多数服务器的线程池就出现阻塞(BLOCK),影响整个线上服务的稳定性。

(图片官方图片)

当一切都健康时,请求可以看起来像这样

 

当许多后端服务系统中的一个宕掉时,整个用户请求:

 

 

如果多个客户端调用同一个异常服务的时候,出现的情况是:

 

三:Hystrix解决什么问题?

 

分布式架构中的应用程序具有几十个依赖关系,每个依赖关系在某个时刻将不可避免的出现异常。如果应用程序不与这些外部故障隔离,则可能出现线程池阻塞,引起系统雪崩。

 

例如,对于依赖30个服务的应用程序,每个服务的正常运行时间为99.99%,您可以:99.99%的30次方 = 99.7%正常运行时间0.3%的10亿次请求= 3,000,000次故障2+小时宕机/月,即使所有依赖关系正常运行时间。

 

 

当使用Hystrix进行熔断后,每个依赖关系彼此隔离了,限制了当发生延迟时的阻塞。

 

 

四:Hystrix结合Feign使用

 

创建一个工程eureka_feign_hystrix_client

 

pom.xml文件内容

org.springframework.cloud
spring-cloud-starter-feign
org.springframework.cloud
spring-cloud-starter-eureka
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-actuator
org.springframework.boot
spring-boot-starter-test
test
org.springframework.cloud
spring-cloud-dependencies
Brixton.SR5
pom
import

创建启动文件

FeignHystrixApplication

@SpringBootApplication@EnableDiscoveryClient@EnableFeignClientspublic class FeignHystrixApplication {    public static void main(String[] args) {        SpringApplication.run(FeignHystrixApplication.class, args);    }}

 

UserClient类

@FeignClient(value = "biz-service-0",fallback = UserClientHystrix.class)public interface UserClient {    @RequestMapping(method = RequestMethod.GET, value = "/getuser")    public User getuserinfo();        @RequestMapping(method = RequestMethod.GET, value = "/getuser")    public String getuserinfostr();        @RequestMapping(method = RequestMethod.GET, value = "/info")    public  String  info();}

 

 

创建熔断类UserClientHystrix

@Servicepublic class UserClientHystrix implements UserClient {    @Override    public User getuserinfo() {        throw new NullPointerException(" User getuserinfo() 服务不可用。。");    }    @Override    public String getuserinfostr() {        return " UserClientHystrix getuserinfostr() is fallback 服务不可用。。";    }    @Override    public String info() {        return " UserClientHystrix info() is fallback 服务不可用。。";    }}

当网络出现异常的时候或直接跳转到这里实现类里面

 

 

 

创建action类

UserController

 

@Autowired    UserClient userClient;    @RequestMapping(value = "/getuserinfo", method = RequestMethod.GET)    public User getuserinfo() {        return userClient.getuserinfo();    }        @RequestMapping(value = "/getuserinfostr", method = RequestMethod.GET)    public String getuserinfostr() {        return userClient.getuserinfostr();    }        @RequestMapping(value = "/info", method = RequestMethod.GET)    public String info() {        return userClient.info();    }

 

 

 

 

先启动:eureka_register_service(注册中心)工程

然后运行我们写好的FeignHystrixApplication

这个时候我们明显发现没有运行biz-service-0 服务,那么我们 打开 http://127.0.0.1:8005/getuserinfostr

出现

UserClientHystrix getuserinfostr() is fallback 服务不可用。。

 

 

这个就是我们自定义的熔断返回结果

 

 

如果不用熔断 页面会出现这个

Whitelabel Error PageThis application has no explicit mapping for /error, so you are seeing this as a fallback.Wed Mar 22 14:32:21 CST 2017There was an unexpected error (type=Internal Server Error, status=500).getuserinfo failed and fallback failed.

本人也看了一些Hystrix相关原理,由于没有全部看完所以暂时没有写上去,本文是结合Feign使用和学习。

有兴起的可以看下官方的Hystrix很详细,就是看起来有点费劲,

 

Dubbo结合Hystrix使用:

转载于:https://www.cnblogs.com/xiaojunbo/p/7094438.html

你可能感兴趣的文章
leetcode 32. Longest Valid Parentheses
查看>>
OpenSSL创建私有CA
查看>>
CSS3画腾讯QQ图标 无图片和js参考
查看>>
C#使用Emit生成构造函数和属性
查看>>
python pip源配置,pip配置文件存放位置
查看>>
[数据库]关于MAX()函数的一个坑
查看>>
实现前后滚动效果-axure设计实例
查看>>
c# DateTime 类
查看>>
Linux--awk命令
查看>>
windows下mysql忘记root密码--吐血测试,都是泪
查看>>
lnmp集成开发环境安装pdo_dblib扩展
查看>>
linux web.py spawn-fcgi web.py 配置
查看>>
HDU 4930 Fighting the Landlords(扯淡模拟题)
查看>>
Numeric Only TextBox
查看>>
HTML/JSP中一些单书名号标签的用途<%-- --%><!-- --><%@ %><%! %><% %><%= %>
查看>>
Swap Nodes in Pairs
查看>>
可汗学院金融学笔记系列
查看>>
遇见JMS[1] —— activeMQ的简单使用
查看>>
打开Win7便笺的删除提示
查看>>
软件工程概论—第一次作业
查看>>