Hystrix是什么东西?百度一下:

  没错,hystrix是豪猪的意思,作为SpringCloud微服务系统中保持服务稳定的重要组件,正如它的名字一样,它对整个系统起到了保护的作用。

  在许多文章当中把hystrix描述为熔断器,便于我们结合生活来理解。想象一下,你在家使用了很多的大功率的电器,导致电路的压力很大,当达到

一个临界值的时候,就会跳闸。而在一个庞大的微服务系统中,有几十上百个服务同时运行,如果因为一个服务故障导致整个系统崩溃,这是不可想象的,

所以有了hystrix,用于出现故障的时候提供服务降级,服务熔断,服务监控等手段来保护系统。

  下面我们就来简单的介绍一下hystrix如何使用。

  

  依赖引入

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

  基本在SpringCloud中使用任何一个功能都需要引入依赖,比如服务发现,统一配置,网关,服务追踪等等。

  

  基本使用

  启动类加注解

@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker

  加上注解后我们就可以使用hystrix,这里我提供一个场景:

  现有订单服务和商品服务两个服务,订单服务调用商品服务的商品列表接口,我们通过这个服务之间的调用来看两种hystrix的应用:服务降级和服务熔断。

  先说服务降级,服务降级是什么呢?

  我们去菜市买肉,一开始呢,我想吃牛肉,于是问老板有没有牛肉,老板说没有;然后我降低档次,选择猪肉,还是没有;最后买了鸡肉。这就是一个

降级的过程,老板对我提供服务,当不能满足我的请求的时候,他会告诉我没有。如果没有做服务降级,那么当我问老板的时候,老板直接不鸟我,这种就是

服务态度恶劣,很垃圾的服务。

  对应到微服务体系中,就是说当服务不可用或者出现故障的时候需要有应急措施来响应客户的请求。下面是具体应用,比较简单,先看未使用服务降级的场景:

  

  当两个服务都正常运行的时候,不用说,一点儿问题都没有。然后我们将product服务关闭掉:

  

  直接报500了,这样对普通用户很不友好,又不是每一个人都知道httpcode的含义,那怎么办呢?有人可能会想到根据httpcode定义不同错误提示页面,这也是

一个是思路,但是根据httpcode只能做到把错误抽出来形成几个公共的提示页面,而不能每一个接口都返回不同的提示,针对这个问题,我们就可以使用到hystrix的服务

降级功能了。具体步骤是在要做服务降级的接口上加@HystrixCommand注解,并定义服务降级的方法:

1 private String fallback(int id){
2 return "当前网络繁忙,请稍后再试哦!" + id;
3 }

  在@HystrixCommand注解中指定方法:

  这时候再来看order服务调用product服务:

  出现了我们想要的提示,这样对用户来说,至少比直接返回个错误码或者啥都不返回要强的多吧。。。

  接下来再看看服务熔断,服务熔断就如我们开篇所说的,就是一个开关,可以预防雪崩问题的出现,不会出现一个服务挂掉拖死N个服务的问题。

  我们现在假设订单服务需要频繁的调用商品服务,而商品服务由于某种原因出现了单点故障不能访问mysql,此时订单服务的请求还在不断的过来,

这些请求来到商品服务之后执行了商品这边一大堆的逻辑之后却发现不能入库,what fuck?这就很尴尬了对不对,于是乎,熔断器应运而生。

  我们可以在@HystrixCommand中定义请求商品服务是否开启熔断器、请求数量阈值,错误占比,超时时间等,具体的可以直接看源码里面有那些属性:

  circuitBreaker.enabled:开启熔断器

  circuitBreaker.requestVolumeThreshold:当请求达到这个数量之后,才进行错误占比的计算。

  circuitBreaker.errorThresholdPercentage:错误占比,当错误次数超过这个百分比,就会熔断。

  circuitBreaker.sleepWindowInMilliseconds:半打开休眠时间,熔断之后过了这段休眠时间,就会半打开,尝试接口是否恢复,如果恢复就完全打开熔断器。

  由于参数比较多,可以放到类上面或者配置文件里面全局配置:

1 @DefaultProperties(defaultFallback = "fallbackForGlobal", commandProperties = {
2 @HystrixProperty(name = "circuitBreaker.enabled", value = "true"),
3 @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
4 @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "10000"),
5 @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50")})

  配置好了尝试调用接口,当请求10次,如果其中五次都失败了,那么该接口就会被熔断,直接返回服务降级方法锁返回的。

  最后,说下服务监控,就是hystrix提供的web仪表盘(hystrix dashboard),还是老套路,加依赖:

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

  加注解

  把SpringBoot的endpoints开启:

  启动之后访问http://localhost:8100/hystrix

  根据提示输入地址和title,title就是服务名,我这里是order

  就可以进入这个页面了

  然后我们来几次错误请求:

  就会在仪表盘上看到错误率这些,具体使用还请各位看官自行根据实践。

  好啦,本文就到此结束了,感谢阅读本文。

 

小白使用Hystrix的更多相关文章

  1. spring cloud 2.x版本 Ribbon服务发现教程(内含集成Hystrix熔断机制)

    本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 前言 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...

  2. spring cloud 2.x版本 Feign服务发现教程(内含集成Hystrix熔断机制)

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server和eureka-client的实现. 参考 ...

  3. spring cloud 2.x版本 Hystrix Dashboard断路器教程

    前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...

  4. 小白也能看懂的Redis教学基础篇——做一个时间窗限流就是这么简单

    不知道ZSet(有序集合)的看官们,可以翻阅我的上一篇文章: 小白也能看懂的REDIS教学基础篇--朋友面试被SKIPLIST跳跃表拦住了 书接上回,话说我朋友小A童鞋,终于面世通过加入了一家公司.这 ...

  5. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  6. 搭建个人wordpress博客(小白教程)

    新浪sae平台现在是有个免费个人空间使用,现在,教您如何使用该平台搭建属于自己的个人网站,本教程以wordpress程序安装包搭建个人网站. 申请新浪云账号 如果我们使用SAE新浪云计算平台作为服务器 ...

  7. 使用Hystrix提高系统可用性

    今天稍微复杂点的互联网应用,服务端基本都是分布式的,大量的服务支撑起整个系统,服务之间也难免有大量的依赖关系,依赖都是通过网络连接起来. (图片来源:https://github.com/Netfli ...

  8. Python 小白的新手教程(一)

    本文是 python 入门级别的基础知识,包括数据类型和变量.输入输出.字符串和编码.list tuple dict set .条件判断.循环.函数.切片 迭代 列表生成器 生成器 迭代器等. 参考课 ...

  9. Python爬虫小白入门(一)写在前面

    一.前言 你是不是在为想收集数据而不知道如何收集而着急? 你是不是在为想学习爬虫而找不到一个专门为小白写的教程而烦恼? Bingo! 你没有看错,这就是专门面向小白学习爬虫而写的!我会采用实例的方式, ...

随机推荐

  1. Linux 操作系统 基础

    root: 管理员 /: 根目录[windows : 计算机] ~: 家目录: 管理员:/root/.. 非管理员:/home/... 命令提示符: [root@localhost abc]#: ro ...

  2. [BUUOJ记录] [BJDCTF2020]EasySearch

    前面的突破点考察swp泄露以及md5截断认证,最后一步考察ssi注入 进入题目是一个登陆页面什么提示都没有,工具扫了一下发现swp泄露,得到登录验证页面的源码: <?php ob_start() ...

  3. Ajxax技术-1

    1.什么是Ajax Ajax: Asynchronous javascript and xml (异步javascript和xml). ==Ajax并不是一种新技术,而是已有技术的集合.JavaScr ...

  4. RabbitMQ安装和运行

    RabbitMQ在Windows下安装和运行 1.下载Erlang: http://www.erlang.org/downloads/19.2 2.下载Windows版RabbitMq: http:/ ...

  5. Charles 抓包(Charles二)

    前面安装了Charles,并初步配置了一下:https://blog.csdn.net/qq_38175040/article/details/105411407 今天开始正式抓包了 但过程却不是很顺 ...

  6. SDL开发笔记(二):音频基础介绍、使用SDL播放音频

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  7. HA切换失败原因分析

    1. 问题描述 redhat在进行HA切换时,需要先停止service,并释放调当前主机占有的资源,比如说IP Address和Filesystem,但今天我在验证HA切换时,发现service一直停 ...

  8. Vue Render自定义tabled单元格内容

    解决问题 只举一个例子(我正好需要用到的) 在写中后台时, 如果对 表格组件 再度封装了, 比如这样的 以element-ui 为例: <template> <el-table :d ...

  9. Redis安装即python使用

    一:简介 redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorted ...

  10. 9.Lock-锁