详解Hystrix

目录

1.微服务中的容错

1.1.服务雪崩

1.2.解决办法

2.hystrix

2.1.概述

2.2.项目结构及依赖

2.3.代码示例

2.3.1.注册中心

2.3.2.服务调用者

2.3.3.服务提供者

2.4.服务降级

2.4.1.单点响应

2.4.2.默认响应

2.4.3.前置响应

2.5.服务熔断

2.5.1.概述

2.5.2.使用

2.6.hystrix的文档地址


1.微服务中的容错

1.1.服务雪崩

要说容错的话,肯定是有多种维度的。横向维度上来说,分布式架构,天然就带有分区容错性,多节点部署相同的服务就是为了容错,保证其中某些节点挂掉后,其它节点任然能提供该类服务。微服务种更需要考虑的是纵向维度上的容错机制,防止服务雪崩。

所谓的服务雪崩,指的是服务间存在着纵向的链路式的调用关系:

服务A调用服务B,服务B调用服务C。

当链路上有节点出现错误,无法正常提供服务,无法立即响应请求时,请求会逐步积压在上层服务,逐步打挂整个链路上的服务,就像异常雪崩一样,从一点开始引起全局的一场大崩溃。

1.2.解决办法

预防、解决服务雪崩有三种方法:

  • 服务降级
  • 服务熔断
  • 服务限流

服务降级:

当服务提供方向服务调用方返回一个响应(fallback),而不是长时间等待或者直接抛出无法处理的异常。例如:“服务器忙,请稍后再试!”

服务降级的触发条件可以人为规定,乐意的话想定成什么都可以,一般常见的触发条件如下

  • 报异常
  • 超时
  • 通信线程池被打满

服务熔断:

直接拒绝访问,快速返回一个开发者自定义的“异常信息”。

服务限流:

限制一个时间段内能够通行的请求数量。

降级和熔断的区别:

熔断:

熔断后请求不会再进调用服务的方法体,直接将链路断开,此后的每次请求都会直接被抛给fallback。 

降级:

降级后请求依然会进调用服务的方法体,每次请求都会先试图去调用服务,只是服务自己察觉到自己可能出问题了从而拒绝服务,然后再将请求转给fallback。直接转发到即当服务的调用出现超时、异常等情况时,返回一个响应(fallback)。降级可以用在服务调用的全链路上的任意位置,既可以用在服务提供方,也可以用在服务提供方,不过为了使用规范,一般建议用在提供方(让服务自己管好自己)。

2.hystrix

  • 2.1.概述

hystrix归属于Netflix版本的spring cloud中,是开源的一款微服务容错组件,提供了开箱即用的服务降级、熔断、监控等能力。由于Netflix将自己版本的spring cloud捐给apache后,后续apache维护的版本只维护了eureka,也就是说交给apache后,更新的spring cloud Netflix中只包含eureka,而不包含其它组件了,所以要用hystrix时,版本一定要选还在Netflix时的版本号,本文选择H版本以及其对应的spring boot 2.2.X为例:

如果对spring cloud版本问题还不是很清楚的同学,推荐去看博主另一篇文章,其中详细清晰快速的理清楚了整个spring cloud杂乱的版本关系:

详解Spring Cloud版本问题__BugMan的博客-CSDN博客

2.2.项目结构及依赖

项目结构:

maven项目,consumer,服务调用者;userService,服务提供者;eureka,注册中心。

依赖:

<properties><spring-cloud.version>Hoxton.SR12</spring-cloud.version><spring-boot.version>2.2.10.RELEASE</spring-boot.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

2.3.代码示例

2.3.1.注册中心

依赖:

 配置:

启动:

2.3.2.服务调用者

依赖:

配置:

用ribbon来做RPC:

2.3.3.服务提供者

依赖:

配置:

启动:

服务:

开启容错和降级:

2.4.服务降级

2.4.1.单点响应

即每个服务接口单独定义异常响应。

效果:

 

2.4.2.默认响应

单点响应,每个服务单独对应一个fallback,会造成代码膨胀,高耦合的问题。

可以定义一个默认的全局响应,来统一处理服务降级。

单点响应优先,有单点响应的服务会优先匹配单点响应,没有单点响应的服务匹配全局响应。一般很重要的核心业务的熔断才单独写响应,一般业务用默认响应足以

这里给一个博主之前写的默认响应的代码示例:

2.4.3.前置响应

无论是单点响应还是默认响应,响应代码和业务代码都耦合在一起,前置响应将响应放在OpenFeign调用侧,使得业务代码和响应代码解耦。

依赖:

OpenFeign的依赖中包含了hystrix,导入OpenFeign后不用单独导入hystrix。

配置:

响应类:

映射:

2.5.服务熔断

2.5.1.概述

hystrix实现了熔断机制,会监控服务间的调用情况,当失败的次数达到一定阈值时(默认是5秒内20次调用失败),就会启动熔断机制。

“断路器”总共有三种状态:

  • 1.close,闭合状态,正常工作。
  • 2.Open,开启状态,熔断。
  • 3.Half Open,半开状态,“我觉得我又行了,我先放过一波请求试试实际行不行?”
  • 2.5.2.使用

  • 用@HystrixCommand来定制断路器的触发规则。

2.6.hystrix的文档地址

由于交给apache后最新版本的Netflix的spring cloud只包含了eureka,相应的也只包含了eureka的文档,其它组件的文档都不太好找,这里给出hystrix在github上的文档地址:

GitHub - Netflix/Hystrix: Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/17866.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据分析 - 基础入门之pandas篇②】- pandas数据结构——Series

文章目录 前言一、Series的创建1.1 列表创建1.2 NumPy数组创建1.3 字典创建 二、Series索引2.1 显式索引2.2 隐式索引 三、Series切片2.1 显式切片2.2 隐式切片 四、Series基本属性和方法4.1 属性4.2 方法4.3 案例——使用 bool 值去除空值 五、Series运算六、Series多层行索引…

ChatGPT潮落 资金逃离AI概念股

ChatGPT访问量首次出现负增长&#xff0c;寒气传导到证券市场。 上半年经历暴涨的一众AI概念股偃旗息鼓&#xff0c;蓝色光标、三六零、昆仑万维等知名个股均较高点跌超30%。微软、英伟达也未能幸免&#xff0c;同样有不同程度回调。 回顾这波过山车般的市场表现&#xff0c;…

LVS+Keepalived负载均衡高可用群集

目录 一、Keepalived高可用详解 1.应用场景 2.介绍和原理简介 3.主要模块和作用 二、LVSkeepalived配置实例&#xff08;抢占模式&#xff09; 1.配置NFS共享存储器 2.配置节点web服务&#xff08;两台的配置相同&#xff09; 3.配置主备LVSkeepalived负载调度器 三、非…

相机- yolo训练集 环境搭建

一、环境准备 运行cmd执行python --version 检查是否安装成功 安装pip&#xff0c;打开运行指令 python -m ensurepip --upgrade 打开官网&#xff0c;下载get_pip.py 运行cmd 运行指令python get-pip.py 运行cmd 运行指令 pip --version 显示pip版本即安装成功 根据上面获…

111、基于51单片机的电磁感应无线充电系统 手机无线充电器设计(程序+原理图+Proteus仿真+程序流程图+论文参考资料等)

方案选择 单片机的选择 方案一&#xff1a;AT89C52是美国ATMEL公司生产的低电压&#xff0c;高性能CMOS型8位单片机&#xff0c;器件采用ATMEL公司的高密度、非易失性存储技术生产&#xff0c;兼容标准MCS-51指令系统&#xff0c;片内置通用8位中央处理器(CPU)和Flash存储单元…

【LeetCode热题100】打卡第32天:最长连续序列只出现一次的数字单词拆分环形链表

文章目录 【LeetCode热题100】打卡第32天&#xff1a;最长连续序列&只出现一次的数字&单词拆分&环形链表⛅前言 最长连续序列&#x1f512;题目&#x1f511;题解 只出现一次的数字&#x1f512;题目&#x1f511;题解 单词拆分&#x1f512;题目&#x1f511;题解…

mysql管理

目录 一、数据库的组成 1.数据 (Data) 2. 表 3. 数据库 二、数据库系统 1.数据库管理系统(DBMS) 2. 数据库系统&#xff08;DBS&#xff09; 3. DBMS的工作模式 三、数据库系统发展史 1.第一代数据库&#xff08;人工管理&#xff09; 2. 第二代数据库&#xff08…

C++线性表、单链表

概述 在先说链表前&#xff0c;我们先来理清几个概念。 什么是线性表、顺序表和链表&#xff1f;三者有什么关系&#xff1f; 线性表&#xff1a;元素线性排列&#xff0c;在逻辑上具有次序的存储结构。 顺序表&#xff1a;线性表的顺序存储称为线性表。它是用一组地址连续(逻…

Windows server 2012服务器远程桌面登录时出现错误提示:“由于没有远程桌面授权服务器可以提供许可证,远程会话被中断

简单粗暴&#xff1a; Windows server 2012服务器远程桌面登录时出现错误提示&#xff1a;“由于没有远程桌面授权服务器可以提供许可证&#xff0c;远程会话被中断。请跟服务器管理员联系 使用 mstsc /admin /v:目标ip 来强制登录服务器&#xff0c;但只能是管理员身份…

【C++修炼之路】31.异常

每一个不曾起舞的日子都是对生命的辜负 异常 一.C语言传统的处理错误的方式二.C异常概念三.异常的使用3.1 异常的抛出和捕获3.2 异常的重新抛出3.3 异常安全3.4 异常规范 四.自定义异常体系五.C标准库的异常体系六.异常的优缺点 一.C语言传统的处理错误的方式 传统的错误处理机…

Appium+python自动化(一)- 环境搭建—上(超详解)

最近整理了一下自动化的东西&#xff0c;先前整理的python接口自动化已经接近尾声。即将要开启新的征程和篇章&#xff08;Appium&python&#xff09;。那么首相的问题就是搭建环境了。好久没搭建环境又踩了不少坑&#xff0c;appium的环境搭建比较繁琐&#xff0c;好多同行…

picard安装时报错“Exception in thread “main“ java.lang.UnsupportedClassVersionError”

最近在通过GATK所介绍的best practice流程来call SNP流程 1.流程 1.1 BWA比对&#xff0c;获得sam文件 1.2 准备用picard来压缩排序sam文件为bam文件&#xff0c;并对bam文件进行去重复&#xff08;duplicates marking&#xff09; 这是就需要用到picard软件 按照教程网页上…