Hystrix的原理及使用
- 首页
- 博客
- 专栏课程
- 下载
- 问答
- 社区
- 插件
- 认证
会员中心
收藏
动态
消息
创作中心
Hystrix的原理及使用
Weichenghenxing 2020-11-02 21:25:40 9725
收藏 64
分类专栏: Hystrix 文章标签: 分布式 spring
版权
Hystrix专栏收录该内容
1 篇文章0 订阅
订阅专栏
在真正学习Hystrix之前,让我们愉悦的谈谈Hystrix产生的背景
一、背景介绍
1、服务雪崩
So,简单地讲。一个服务失败,导致整条链路的服务都失败的情形,我们称之为服务雪崩。
2、引起雪崩的原因和服务雪崩的三个阶段
原因大致有四:
1、硬件故障;
2、程序Bug;
3、缓存击穿(用户大量访问缓存中没有的键值,导致大量请求查询数据库,使数据库压力过大);
4、用户大量请求;
服务雪崩的第一阶段: 服务不可用;
第二阶段:调用端重试加大流量(用户重试/代码逻辑重试);
第三阶段:服务调用者不可用(同步等待造成的资源耗尽);
3、解决方案
2)流量控制(超出限定流量,返回类似重试页面让用户稍后再试)
将用户可能访问的数据大量的放入缓存中,减少访问数据库的请求。
如果对服务降级和服务熔断的概念模糊点此了解 关于服务熔断和服务降级的详解
二、Hystrix入门
Hystrix简介
Hystrix [hɪst’rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。
以项目案例开始,快速入门(使用IDEA)
场景假设1( 服务提供方报错) : 在服务提供端中因为访问不到数据库中的数据(比如数据不存在,或是数据库压力过大,查询请求队列中),在这种情况下,服务提供方这边如何实现服务降级,以防止服务雪崩.
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {}
@RequestMapping("/get/{id}")@HystrixCommand(fallbackMethod="errorCallBack") //模仿没有这个数据时,服务降级public Object get(@PathVariable("id") long id){Product p=this.productService.findById(id);if( p==null){throw new RuntimeException("查无此产品");}return p;}//指定一个降级的方法public Object errorCallBack( @PathVariable("id") long id ){return id+"不存在,error";}
feign:hystrix:enabled: true
我们的服务消费方的feign操作接口位于 microservice-interface中,所以要在这里配置
package com.yc.springcloud2.fallback;import com.yc.springcloud2.bean.Product;
import com.yc.springcloud2.service.IProductClientService;
import feign.hystrix.FallbackFactory;import java.util.List;
@Component //必须被spring 托管
public class IProductClientServiceFallbackFactory implements FallbackFactory<IProductClientService> {@Overridepublic IProductClientService create(Throwable throwable) {//这里提供请求方法出问题时回退处理机制return new IProductClientService(){@Overridepublic Product getProduct(long id) {Product p=new Product();p.setProductId(999999999L);p.setProductDesc("error");return p;}@Overridepublic List<Product> listProduct() {return null;}@Overridepublic boolean addPorduct(Product product) {return false;}};}
}
@FeignClient(name="MICROSERVICE-PROVIDER-PRODUCT",configuration = FeignClientConfig.class,fallbackFactory = IProductClientServiceFallbackFactory.class) // 配置要按自定义的类FeignClientConfig
public interface IProductClientService {
三、Hystrix技术点
1. 对来自依赖的延迟和故障进行防护和控制——这些依赖通常都是通过网络访问的
2. 阻止故障的连锁反应
3. 快速失败并迅速恢复
4. 回退并优雅降级
5. 提供近实时的监控与告警
1. 防止任何单独的依赖耗尽资源(线程)
2. 过载立即切断并快速失败,防止排队
3. 尽可能提供回退以保护用户免受故障
4. 使用隔离技术(例如隔板,泳道和断路器模式)来限制任何一个依赖的影响
5. 通过近实时的指标,监控和告警,确保故障被及时发现
6. 通过动态修改配置属性,确保故障及时恢复
7. 防止整个依赖客户端执行失败,而不仅仅是网络通信
- 使用命令模式将所有对外部服务(或依赖关系)的调用包装在HystrixCommand或HystrixObservableCommand对象中,并将该对象放在单独的线程中执行;
- 每个依赖都维护着一个线程池(或信号量),线程池被耗尽则拒绝请求(而不是让请求排队)。
- 记录请求成功,失败,超时和线程拒绝。
- 服务错误百分比超过了阈值,熔断器开关自动打开,一段时间内停止对该服务的所有请求。
- 请求失败,被拒绝,超时或熔断时执行降级逻辑。
- 近实时地监控指标和配置的修改。
四、服务监控HystrixDashboard的使用
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId></dependency>
server:port: 9001
package com.yc.springcloud2;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApp {public static void main(String[] args) {SpringApplication.run( HystrixDashboardApp.class,args);}
}
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
management:endpoints:web:exposure:include: '*'
@SpringBootApplication
@EnableEurekaClient //启动eureka客户端
@EnableDiscoveryClient //启用服务发现客户端,以获取当前provider的注册信息
@EnableCircuitBreaker //启用断路器
@SpringCloudApplication
public class ProductApp_hystrix {public static void main(String[] args) {SpringApplication.run( ProductApp_hystrix.class,args);}
}
浏览器访问http://localhost:8888/actuator/hystrix.stream会看到如下页面,因为监控的实例( 即 【microservice-provider-hystrix]本身还没有调用任何服务,所以监控端点也没记录任何信息
新开一个浏览器tab页,访问下 http://localhost:8888/product/get/1,重新刷新下刚才的页面可以看到已经有数据返回了,说明我们的埋点生效了
从浏览器中的信息可以看出这些信息是刚刚请求微服务时所记录的监控信息,但是直接去看这些信息肯定是不友好的(根本看不懂),所以Hystrix Dashboard就派上用场了在Hystrix Dashboard中间这个输入框中,填入=服务的监控地址,也就是http://admin:a@localhost:8888/actuator/hystrix.stream,点击Monitor Stream按钮,就会跳转到具体的监控页面
多次请求http://localhost:8888/product/get/1,会发现监控页面的数据也在实时的更新
小结:
以上我们可以使用dashboard对单个实例做信息监控,但在分布式系统中,有很多实例要运维和监控,这样要开启多个窗口来监控,所以可以利用turbine和dashboard结合来对集群监控.
Weichenghenxing
关注
12
3
64
专栏目录
打赏
文章很值,打赏犒劳作者一下
SpringCloud中Eureka,Histrix等组件详解
02-11
<p> <img src="https://img-bss.csdn.net/202002111407356294.jpg" alt="" /></p> <p> <span style="font-size:24px;">- 了解系统架构的演变</span><br /><span style="font-size:24px;">- 了解RPC与Http的区别</span><br /><span style="font-size:24px;">- 掌握HttpClient的简单使用</span><br /><span style="font-size:24px;">- 知道什么是SpringCloud</span><br /><span style="font-size:24px;">- 独立搭建Eureka注册中心</span><br /><span style="font-size:24px;">- 独立配置Robbin负载均衡</span> </p>
Hystrix原理与实战(文章略长)
weixin_34067980的博客
2392
2019独角兽企业重金招聘Python工程师标准>>> ...
瘦肉汤面:服务端不用Hystrix的依赖吗 直接用OpenFeign自带的豪猪也可以吗3 月前回复
楊同学εε回复:要导Hystrix依赖3 月前回复
清风许我意:受益匪浅4 月前回复
相关推荐
Hystrix原理与实战_漏水亦凡的专栏_hystrix
6-23
因此,为了构建稳定、可靠的分布式系统,我们的服务应当具有自我保护能力,当依赖服务不可用时,当前服务启动自我保护功能,从而避免发生雪崩效应。本文将重点介绍使用Hystrix解决同步等待的雪崩问题。
Hystrix(一)_旭出东方
6-19
时至今日,Netflix中每天都有数十亿次的服务间调用,通过Hystrix框架在进行,而Hystrix也帮助Netflix网站提升了整体的可用性和稳定性 Hystrix的设计原则 hystrix为了实现高可用性的架构,设计hystrix的时候,一些设计原则是什么???
Hystrix
彩色天的博客
3851
是什么 做什么? 使用方法 服务降级(客户端): 服务熔断和服务降级: Fegin使用Hystrirx Fegin是以接口形式工作的,它没有方法体,那么@HystrixCommand 针对于上述的方法是不适用于Fegin 的。官网文章如下: If Hystrix is on the classpath and feign.hystrix.e...
hystrix详解
韩金群的博客
4395
hystrix详解 大家好,我是酷酷的韩~ 一.什么是hystrix? hystrix是Netlifx开源的一款容错框架,防雪崩利器,具备服务降级,服务熔断,依赖隔离,监控(Hystrix Dashboard)等功能。 二.功能点详解 1.服务降级 使用场景: 比如双十一买东西出现,哎哟喂,被挤爆了。app秒杀某个商品提示网络开小差,请稍后再试。 使用方法: (1)添加pom文件 ...
【SpringCloud】【Hoxton】Hystrix全面解析_你携秋月揽...
6-27
除了隔离依赖服务的週用以外, Hystrix还提供了往实时的调用监控( Hystrix Dashboard), Hystrix:会持续地记录所有通过 Hystrix发起的请求的执行信息,并以统计报表和图形的形式展示给用户,包括每秒执行多少请求多少成功,多少失败等。 Netflix...
1.hystrix简单介绍
kang123488的博客
190
1、Hystrix是什么? 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很正常的。 Hystrix可以让我们在分布式系统中对服务间的调用进行控制,加入一些调用延迟或者依赖故障的容错机制。 Hystrix通过将依赖服务进行资源隔离,进而组织某个依赖服务出现故障的时候,这种故障在整个系统所有的依赖服务调用
服务熔断与降级(Hystrix)
pengjunlee的博客
8万+
目录 服务熔断 服务降级 熔断VS降级 Hystrix简介 使用Hystrix 引入Hystrix依赖 修改启动类 修改Controller Feign结合Hystrix 修改Feign客户端 创建Fallback处理类 修改配置 监控Hystrix 启用健康监控 启用Hystrix-Dashboard 引入Hystrix-Dashboard依赖 修改启动类 ...
Hystrix熔断器
xiaoyixiao_的博客
99
目录Hystrix简介Hystrix工作流程服务降级fallback服务熔断break@HystrixProperty的全部配置服务监控HystrixDashboard Hystrix简介 Hystrix是什么 Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 Hystrix断路器 "断路器”本身是一种开关装置,当某个
Hystrix中文开发手册-Hystrix简介(Home)
qq_26462567的博客
1255
Hystrix 是什么 ? 为什么要使用Hystrix? Hystrix 可以解决什么问题? Hystrix 的设置原则是什么? Hystrix 如何实现这些设计目标? Hystrix 是什么? 在分布式的环境中, 一些分布式服务会不可避免的出现的依赖项目发生错误的情况。 Hystrix 就是一个可以通过使用 延时策略 和 故障容错逻辑 帮助您管理控制这些__分布式服务之间交互__的一个库...
Hystrix介绍和使用指南
liang0000zai的专栏
675
一、Hystrix Hystrix是Netflix开源的一款容错系统,能帮助使用者码出具备强大的容错能力和鲁棒性的程序。提供降级,熔断等功能,并且熔断开关打开之后,会在服务可用之后,自动关闭。spring cloud中有用到。 如果你的服务依赖于多个服务,并且不想因为某个服务挂掉,而影响你服务。比如hbase挂掉了,你可以通过降级策略返回默认值,或者直接熔断。 Hystrix提供了服务隔离,每个服...
Spring Cloud熔断器Hystrix的使用及原理解析
turbo_zone的博客
2万+
什么是Hystrix Hystrix是Spring Cloud提供的一种带有熔断机制的框架,由于在微服务系统中同一个操作会由多个不同的微服务来共同完成,所以微服务与微服务之间会由很多相互的调用,由于在分布式环境中经常会出现某个微服务节点故障的情况,所以会由调用失败发生,而熔断器的作用就是当出现远程调用失败的时候提供一种机制来保证程序的正常运行而不会卡死在某一次调用,类似Java程序中的try-ca...
IEC104服务端测试工具
09-03
IEC104服务端测试软件,适合于IEC104规约开发人员使用
Hystrix工作原理
波波的博客
1万+
概述 本来是抱着一颗认真学习的态度去学习Hystrix,结果看完书之后是这样的: 然后像我这么优秀的人,就回去百度啊 ,终于找到了一篇大佬的文章,原文的地址是:[防雪崩利器:熔断器 Hystrixx] (https://segmentfault.com/a/1190000005988895)。其实我就是把别人的文章拿过来用。天下文章一大抄,主要是自己学会 就行了 什么是服务器雪崩 服务雪崩...
hystrix原理
lldouble的博客
3272
一、hystrix 产生背景 微服务是解决复杂服务的一个方案,在功能不变的情况下,对一个复杂的单体服务分解为多个可管理的分支。每个服务作为轻量的子服务,通过RPC实现服务间的关联,将服务简单化。每个服务根据自己的需要选择技术栈,互不影响,方便开发、维护。例如S划分为a,b,c。微服务的好处是有效的拆分应用,实现敏捷开发和部署。 微服务一系列优势下,也给微服务的管理和稳定性带来挑战,比如一个服务依...
hystrix学习笔记
chengcheng233的博客
149
Hystrix学习Hystrix概述分布式系统面临的问题hystrix是什么服务降级服务熔断服务限流服务监控DashBoard Hystrix概述 分布式系统面临的问题 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”。如果扇出的链路上某个微服务的调用响应时间过长或不可用,对微服务A的调用就会占用越来越多的系统资源,进行引起系统崩溃,所谓的“服务雪崩”。对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几秒钟内饱和
微服务之Openfeign,Hystrix
qq_45595142的博客
1770
Openfeign 算是 Ribbon(负载均衡)和RestTemplate(服务和服务之间调用)的结合体。 客户端使用restTemplate的 getForObject方法去调用服务端的方法 @GetMapping("/consumer/payment/get/{id}") public CommonResult<Payment> getPayment(@PathVariable("id") Long id) { return restTemplate.g
hystrix是什么?
Leon_Jinhai_Sun的博客
43
Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。 “断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避.
hystrix和断路器的概念
chuixue24的博客
10
©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
- 关于我们
- 招贤纳士
- 广告服务
- 开发助手
400-660-0108
kefu@csdn.net
在线客服
- 工作时间 8:30-22:00
- 公安备案号11010502030143
- 京ICP备19004658号
- 京网文〔2020〕1039-165号
- 经营性网站备案信息
- 北京互联网违法和不良信息举报中心
- 网络110报警服务
- 中国互联网举报中心
- 家长监护
- Chrome商店下载
- ©1999-2021北京创新乐知网络技术有限公司
- 版权与免责声明
- 版权申诉
- 出版物许可证
- 营业执照
Weichenghenxing
码龄4年 高校学生
20
原创
9万+
周排名
28万+
总排名
1万+
访问
等级
312
积分
22
粉丝
27
获赞
16
评论
92
收藏
私信
关注
热门文章
- Hystrix的原理及使用
9689
- 服务熔断与服务降级详解
1631
- 使用辗转相除法和递归思想求两数最大公约数
1121
- “only whitespace content allowed before start tag and not -“ 报错解决方案
1024
- 函数的递归调用-斐波那契数列(I)
828
分类专栏
Feign4篇
数据库3篇
我
springcloud7篇
java基础4篇
Hystrix1篇
spring1篇
调错
工具
算法3篇
最新评论
- Hystrix的原理及使用
楊同学εε: 要导Hystrix依赖
- Hystrix的原理及使用
瘦肉汤面: 服务端不用Hystrix的依赖吗 直接用OpenFeign自带的豪猪也可以吗
- SpringIOC容器工作流程及源码详解
洛阳泰山: 这写的什么啊你这样的人我不想多说什么, 直接一键三连等我水平够了再回来看,留下“牛X”二字
- SpringIOC容器工作流程及源码详解
juleft: 总结的挺好的,咋没人赞呢?
- Hystrix的原理及使用
清风许我意: 受益匪浅
最新文章
- Feign工作原理详解(二)
- redis系列之redis的入门和安装
- redis系列之Nosql(二)
2021年4篇
2020年17篇
目录
- 一、背景介绍
- 1、服务雪崩
- 2、引起雪崩的原因和服务雪崩的三个阶段
- 3、解决方案
- 二、Hystrix入门
- Hystrix简介
- 以项目案例开始,快速入门(使用IDEA)
- 三、Hystrix技术点
- 四、服务监控HystrixDashboard的使用
举报
Hystrix的原理及使用相关推荐
- Hystrix断路器原理及实现(服务降级、熔断、限流)
Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...
- Hystrix核心原理和断路器源码解析
Hystrix运行原理 构造一个HystrixCommand或HystrixObservableCommand对象 执行命令. 检查是否已命中缓存,如果命中直接返回. 检查断路器开关是否打开,如果打开 ...
- java断路器原理_Netflix Hystrix断路器原理分析
断路器原理 断路器在HystrixCommand和HystrixObservableCommand执行过程中起到至关重要的作用.查看一下核心组件HystrixCircuitBreaker packag ...
- 熔断器 java_防雪崩利器:熔断器 Hystrix 的原理与使用
我们知道大量请求会阻塞在Tomcat服务器上,影响其它整个服务.在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败.高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险 ...
- Hystrix断路器原理
断路器 作用 断路器的作用在于当一个请求无法进行或者需要暂时屏蔽时,我们可以在请求执行前将这个请求打断,从而达到暂时屏蔽请求的目的.在我们的工作过程中,这样的场景通常表现为一个请求的提供端由于某种原因 ...
- (转)什么是Hystrix?原理是什么?
Hystrix是一个延迟的容错库,旨在隔离对远程系统.服务和第三方库的访问点,停止级联故障,并在不可避免发生故障的复杂分布式系统中实现快速恢复.主要用Spring大的AOP实现. 实现原理: 正常情 ...
- 防雪崩利器:熔断器 Hystrix 的原理与使用
1.概述 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. 为了应对服务雪崩, 一种常见的做法是手动服务降级. 而Hystrix的出现,给我们提供了另一 ...
- 防雪崩利器:熔断器 Hystrix 的原理与使用--转
原文地址:https://segmentfault.com/a/1190000005988895 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不可用的情况, 这种现象被称为服务雪崩效应. ...
- hystrix 单独使用_Spring cloud微服务架构-Hystrix工作原理(微服务故障熔断)
流程图 下图显示了通过Hystrix向服务依赖项请求时发生的情况: 以下各节将更详细地说明此流程: 1.构造一个HystrixCommand或HystrixObservableCommand对象 第一 ...
最新文章
- android post请求_Vue 网络请求框架 axios 使用教程
- meetup_我在2017年举办Meetup中学到的知识以及为何对2018年充满期待。
- 为了成长,我所做的一些努力!
- [转]JavaScript ES6 class指南
- C#中base64编码与解码
- 产品设计 | 价格理论与用户体验
- 【机器学习】降维代码练习
- 不再迷惑,无值和 NULL 值
- HDU - 5381 The sum of gcd(莫队/线段树区间合并)
- .NET 排序 Array.SortT 实现分析
- OC语法8——@class关键字
- 制作自启动的MSDN简体中文版和英文版win98ISO镜像
- 复杂网络研究及其前沿概述
- Web前端工程师需要什么学历
- MeasureSpec的简单说明
- JavaScript使用drag事件
- Java 45:Spring
- 人人都在推销(销售永不为“奴”)
- 进制转换之2进制与16进制之间的相互转换
- C#飞机大战案例详细教程