springcloud组件之hystrix服务熔断,降级,限流
hystrix 简介
Hystrix是什么
在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。
Hystrix为了什么
Hystrix被设计的目标是:
- 对通过第三方客户端库访问的依赖项(通常是通过网络)的延迟和故障进行保护和控制。
- 在复杂的分布式系统中阻止级联故障。
- 快速失败,快速恢复。
- 回退,尽可能优雅地降级。
- 启用近实时监控、警报和操作控制。
Hystrix解决了什么问题
复杂分布式体系结构中的应用程序有许多依赖项,每个依赖项在某些时候都不可避免地会失败。如果主机应用程序没有与这些外部故障隔离,那么它有可能被他们拖垮
接下来开打:整合springcloud
在工程中引用jar包:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
服务的降级使用:
启动类上加入 @EnableHystrix注解 开启hystrix功能
在controller的方法上加入注解:
@HystrixCommand
fallbackMethod 属性 代表降级要调用的方法:比如
@GetMapping("/getHystrix/{id}")
@HystrixCommand(fallbackMethod = "demotionMethod",
commandProperties = {@HystrixProperty(name = "circuitBreaker.enabled",value = "true"), // 开启熔断
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"), // 在规定时间的请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "6000"), // 规定的时间
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),}) // 规定的时间失败率
public String getHystrix(@PathVariable(name = "id") Integer id) throws InterruptedException {
if (id <= 0)
throw new RuntimeException();
String hystrix = consumerFeign.getHystrix(234);
return hystrix;
}
public String demotionMethod(Integer id) throws InterruptedException {
return "哦豁 服务遇到点小麻烦。。。"+Thread.currentThread().getName();
}
demotionMethod 方法就是服务降级时候调用的方法
调用接口超时时间设置 在yml中:
#此项内容也可以通过注解去设置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 3000 #服务降级时间2秒
这样服务的降级功能就完成了 当发生异常 响应超时,和一些错误信息的时候 就会自动调用降级的方法返回给调用方
hystrix的服务熔断限流
@HystrixCommand(fallbackMethod = "demotionMethod",
commandProperties = {@HystrixProperty(name = "circuitBreaker.enabled",value = "true"), // 开启熔断
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"), // 在规定时间的请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "6000"), // 规定的时间
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "50"),}) // 规定的时间失败率
这些就是配置服务的熔断的参数也是在
@HystrixCommand 中配置
commandProperties 的属性:
注意:熔断功能要在yml中开启:
feign:
client:
config:
default:
connectTimeout: 5000 #连接超时时间
readTimeout: 5000 #请求与响应的时间间隔阈值
hystrix:
enabled: true # 开启服务的熔断机制
这些配置的参数记不住没关系的 你只需要记住一个类就可以了:
HystrixCommandProperties类中定义了需要配置的所有属性,以及默认的属性值:
熔断机制默认是10秒发送20次请求,有百分之50的请求失败就会进入到断开的状态
熔断器原理
熔断器模式定义了熔断器开关相互转换的逻辑:

服务的健康状况 = 请求失败数 / 请求总数.
熔断器开关由关闭到打开的状态转换是通过当前服务健康状况和设定阈值比较决定的.
1、当熔断器开关关闭时, 请求被允许通过熔断器. 如果当前健康状况高于设定阈值, 开关继续保持关闭. 如果当前健康状况低于设定阈值, 开关则切换为打开状态.
2、当熔断器开关打开时, 请求被禁止通过.
3、当熔断器开关处于打开状态, 经过一段时间后, 熔断器会自动进入半开状态, 这时熔断器只允许一个请求通过. 当该请求调用成功时, 熔断器恢复到关闭状态. 若该请求失败, 熔断器继续保持打开状态, 接下来的请求被禁止通过.熔断器的开关能保证服务调用者在调用异常服务时, 快速返回结果, 避免大量的同步等待.并且熔断器能在一段时间后继续侦测请求执行结果, 提供恢复服务调用的可能.
打完收工
springcloud组件之hystrix服务熔断,降级,限流的更多相关文章
- Hystrix介绍以及服务的降级限流熔断
(dubbo熔断,Hystrix问的少) 无论是缓存层还是存储层都会有出错的概率,可以将它们视同为资源.作为并发量较大的系统,假如有一个资源不可用,可能会造成线程全部 hang (挂起)在这个资源上, ...
- SpringCloud Netflix (五) : Hystrix 服务熔断和服务降级
什么是Hystrix 在分布式环境中,许多服务依赖项中的一些服务依赖不可避免地会失败.Hystrix是一个库,通过添加延迟容忍和容错逻辑,帮助您控制这些分布式服务之间的交互.Hystrix通过隔离服务 ...
- dubbo学习实践(4)之Springboot整合Dubbo及Hystrix服务熔断降级
1. springboot整合dubbo 在provider端,添加maven引入,修改pom.xml文件 引入springboot,版本:2.3.2.RELEASE,dubbo(org.apache ...
- java框架之SpringCloud(5)-Hystrix服务熔断、降级与监控
前言 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败.不做任何处理的情况下,很容易导致服务雪崩. 服务雪崩:多个微服务之间调用的时候,假设 ...
- 聊聊微服务熔断降级Hystrix
在现在的微服务使用的过程中,经常会遇到依赖的服务不可用,那么如果依赖的服务不可用的话,会导致把自己的服务也会拖死,那么就产生了熔断,熔断顾名思义就是当服务处于不可用的时候采取半开关的状态,达到一定数量 ...
- springBoot整合Sentinel实现降级限流熔断
由于hystrix的停止更新,以及阿里Sentinel在历年双十一的贡献.项目中使用了Sentinel,今天我们来讲讲Sentinel的入门教程,本文使用1.6.3版本进行讲解 本文通过Sentine ...
- Spring Cloud微服务Sentinel+Apollo限流、熔断实战总结
在Spring Cloud微服务体系中,由于限流熔断组件Hystrix开源版本不在维护,因此国内不少有类似需求的公司已经将眼光转向阿里开源的Sentinel框架.而以下要介绍的正是作者最近两个月的真实 ...
- 降级、熔断、限流[z]
[z]https://juejin.im/post/5cced96e6fb9a032514bbf94当我们的系统的访问量突然剧增,大量的请求涌入过来,最典型的就是秒杀业务了,我们可能会知道会有一波高峰 ...
- 【5】JMicro微服务-熔断降级
如非授权,禁止用于商业用途,转载请注明出处作者:mynewworldyyl 1. 使用服务熔断降级特性,必须先启动Pubsub服务,服务监听服务,熔断器服务3个服务 先启动Pubsub及服务监听两 ...
随机推荐
- ArrayPool 源码解读之 byte[] 也能池化?
一:背景 1. 讲故事 最近在分析一个 dump 的过程中发现其在 gen2 和 LOH 上有不少size较大的free,仔细看了下,这些free生前大多都是模板引擎生成的html片段的byte[]数 ...
- 微信公众号授权回调用户信息,获取openid
1.--------------------用户授权登录并获取code 授权登录方式有两个,一种为静默授权登录(scope=snsapi_base),一种为非静默授权登录(scope=snsapi_u ...
- Redis cluster的部署
Redis 集群是一个提供在多个Redis间节点间共享数据的程序集. Redis集群并不支持处理多个keys的命令,因为这需要在不同的节点间移动数据,从而达不到像Redis那样的性能,在高负载的情况下 ...
- 从零开始实现简单 RPC 框架 9:网络通信之心跳与重连机制
一.心跳 什么是心跳 在 TPC 中,客户端和服务端建立连接之后,需要定期发送数据包,来通知对方自己还在线,以确保 TPC 连接的有效性.如果一个连接长时间没有心跳,需要及时断开,否则服务端会维护很多 ...
- java 多线程Thread和Runnable的区别
如果一个类继承Thread,则不适合资源共享.但是如果实现了Runable接口的话,则很容易的实现资源共享 实现Runnable接口比继承Thread类所具有的优势:1. 适合多个相同的程序代码的线程 ...
- Python入门学习之:10分钟1500访问量
看效果: 不扯没用的,直接上代码: # author : sunzd # date : 2019/9/01 # position : beijing from fake_useragent impor ...
- AI异构通信:重压下的突围,华为P50系列的卓越体验
撰文 |懂懂 编辑 | 秦言 来源:懂懂笔记 "华为不会让消费者失望."华为消费者业务CEO余承东在P50系列发布会上如是说. 今年4月美国对华为第四轮制裁以来,华为终端产品无缘5 ...
- weblogic漏洞分析之CVE-2016-0638
weblogic漏洞分析之CVE-2016-0638 一.环境搭建: 这里使用前一篇文章的环境,然后打上补丁 上一篇文章:https://www.cnblogs.com/yyhuni/p/151370 ...
- XXE从0到1
XXE从0到1 1. XXE概述 XXE(XML External Entity Injection)即XML外部实体注入.漏洞是在对不安全的外部实体数据进行处理时引发的安全问题. 下面我们主要介绍P ...
- javassist 使用笔记
javassist Javassist 是一个开源的分析.编辑和创建Java字节码的类库.其主要的优点,在于简单,而且快速.直接使用 java 编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构 ...