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. C++模板函数只能全特化不能偏特化

    C++模板函数只能全特化不能偏特化

  2. 故障:fork failed:Resource Temporarily Unavailable解决方案

    故障:fork failed:Resource Temporarily Unavailable解决方案 AIX在一次crontab bkapp.txt导入N多定时任务时候,该用户无法执行任何命令,再s ...

  3. 【IDEA】【SpringBoot】基于idea对springboot程序远程调试

    一.开启远程调试前提:本地代码与服务器代码一致(实测:不关键的代码稍微有点不一样好像也不会有多大问题). 二.开启远程调试步骤 1.开发工具配置 idea端打开Edit configurations, ...

  4. Activiti7 学习总结

    什么是工作流? 就是通过计算机对业务流程进行自动化处理,实现多个参与者按照预定义的流程去自动执行业务流程 什么是Activiti? Activiti是一个工作流引擎,开源的架构,基于BPMN2.0标准 ...

  5. selenium常用webdriver api汇总

    1.driver.current_url:用于获得当前页面的URL 2.driver.title:用于获取当前页面的标题 3.driver.page_source:用于获取页面html源代码 4.dr ...

  6. 【NOIP2015模拟】终章-剑之魂

    背景介绍 古堡,暗鸦,斜阳,和深渊-- 等了三年,我独自一人,终于来到了这里-- "终焉的试炼吗?就在这里吗?"我自言自语道. "终焉的试炼啊!就在这里啊!"我 ...

  7. 用ajax获取后端数据,显示在前端,实现了基本计算器功能

    下午在看视频的时候,遇到一个问题:如何把后端 print_r或echo的数据显示在前端.百度了一下,说是用ajax,想着前一阵子学习了ajax,并且最近也想做一个计算器,于是就自己钻起来了. 计算器的 ...

  8. Python爬虫实战练习:爬取美团旅游景点评论数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 今年的国庆节还有半个月就要来了,相信很多的小伙伴还是非常期待这个小长假的.国庆节是一年中的小 ...

  9. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(6)

    前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx–技术流ken>,<Git+Gitlab+An ...

  10. 云计算openstack——高可以负载均衡(14)

    一.云平台概要 1.本openstack云平台使用开源软件Openstack Ocata版…… 2.OpenStack 部署环境中,各节点可以分为几类: Cloud Controller Node ( ...