详解Hystrix

这篇具有很好参考价值的文章主要介绍了详解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。

详解Hystrix

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

详解Hystrix

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为例:

详解Hystrix

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

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

2.2.项目结构及依赖

项目结构:

详解Hystrix

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

依赖:

详解Hystrix

<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.注册中心

依赖:

详解Hystrix

 配置:

详解Hystrix

启动:

详解Hystrix

2.3.2.服务调用者

依赖:

详解Hystrix

配置:

详解Hystrix

用ribbon来做RPC:

详解Hystrix

详解Hystrix

2.3.3.服务提供者

依赖:

详解Hystrix

配置:

详解Hystrix

启动:

详解Hystrix

服务:

详解Hystrix

开启容错和降级:

详解Hystrix

2.4.服务降级

2.4.1.单点响应

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

详解Hystrix

效果:

 详解Hystrix

2.4.2.默认响应

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

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

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

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

详解Hystrix

2.4.3.前置响应

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

依赖:

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

配置:

详解Hystrix

响应类:

详解Hystrix

映射:

详解Hystrix

2.5.服务熔断

2.5.1.概述

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

详解Hystrix

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

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

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

  • 详解Hystrix

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.

 文章来源地址https://www.toymoban.com/news/detail-487566.html

到了这里,关于详解Hystrix的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【2.1】Java微服务:详解Hystrix

     ✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: Java微服务 ✨特色专栏: 知识分享 🥭本文内容:【2.1】Java微服务:详解Hystrix 📚 ** ps **  : 阅读这篇文章如果有问题或者疑

    2024年02月13日
    浏览(25)
  • 【2.2】Java微服务:Hystrix的详解与使用

    目录 分布式系统面临问题 Hystrix概念 Hystrix作用 降级 什么是降级 order服务导入Hystrix依赖(简单判断原则:谁调用远程谁加) 启动类添加注解 业务方法添加注解(冒号里填回调方法名,回调方法返回兜底数据) 添加回调方法(原则:回调方法与原方法的返回值和参数要一致

    2024年02月13日
    浏览(33)
  • 容错技术在云计算中的挑战与解决方案

    云计算是一种基于互联网的计算资源分配和共享模式,它允许用户在需要时从任何地方访问计算能力、存储和应用程序。随着云计算的普及和发展,其规模和复杂性不断增加,这使得云计算系统面临着许多挑战,其中容错技术在云计算中的应用是非常重要的。容错技术是一种

    2024年02月22日
    浏览(39)
  • Redis中的缓存雪崩、击穿、穿透的原因以及解决办法

    缓存雪崩、击穿、穿透一旦发生,会导致大量的请求积压到数据库层。如果请求的并发量很大,就会导致数据库宕机或是故障,这就是很严重的生产事故了。 俗话说,知己知彼,百战不殆。了解了问题的成因,我们就能够在应用Redis缓存时,进行合理的缓存设置,以及相应的

    2024年02月12日
    浏览(50)
  • Redis中的缓存穿透、雪崩、击穿的原因以及解决方案

    是指用户查询数据,在数据库没有,自然在缓存中也不会有。这样就导致用户查询的时候,在缓存中找不到,每次都要去数据库再查询一遍,然后返回空(相当于进行了两次无用的查询)。这样请求就绕过缓存直接查数据库,这也是经常提的缓存命中率问题。 我们可以简单的

    2024年02月12日
    浏览(46)
  • SpringCloud:微服务保护之雪崩问题及解决方案

    微服务中,服务间调用关系错综复杂,一个微服务往往依赖于多个其它微服务。 如图,如果服务提供者 I 发生了故障,当前的应用的部分业务因为依赖于服务 I ,因此也会被阻塞。此时,其它不依赖于服务 I 的业务似乎不受影响。 但是,依赖服务 I 的业务请求被阻塞,用户

    2024年02月02日
    浏览(30)
  • 探讨Redis缓存问题及解决方案:缓存穿透、缓存击穿、缓存雪崩与缓存预热(如何解决Redis缓存中的常见问题并提高应用性能)

    Redis是一种非常流行的开源缓存系统,用于缓存数据以提高应用程序性能。但是,如果我们不注意一些缓存问题,Redis也可能会导致一些性能问题。在本文中,我们将探讨Redis中的一些常见缓存问题,并提供解决方案。 缓存穿透指的是当一个请求尝试访问一个不存在于缓存中的

    2024年02月03日
    浏览(99)
  • 如何保护 LDAP 目录服务中的用户安全?

    轻量级目录访问协议(LDAP)是目前主流的身份验证协议之一,由密歇根大学的 Tim Howes、Steve Kille 和 Wengyik Yeong 于1993年创建,又经过了 Internet 工程任务组(IETF)的标准化,通过网络分发目录信息,扮演了身份源(IdP)的角色。 LDAP 在现代网络中的重要性在于该协议参与共享

    2024年01月17日
    浏览(60)
  • Flink中的容错机制

    在Flink中,有一套完整的容错机制来保证故障后的恢复,其中最重要的就是检查点。 在流处理中,我们可以用存档读档的思路,将之前某个时间点的所有状态保存下来,这份存档就被称为“检查点(CkeckPoint)”。 当Flink程序异常重启时,我们就可以在检查点中“ 读档 ”,恢

    2024年01月23日
    浏览(44)
  • 微服务容错 Resilience4j 接口服务-容错原理

    微服务容错 Resilience4j 容错原理 4.1 微服务容错简介 在⾼并发访问下,⽐如天猫双11,流量持续不断的涌⼊,服务之间的相互调⽤频率突然增加,引发系统负载过⾼,这时系统所依赖的服务的稳定性对系统的影响⾮常⼤,⽽且还有很多不确定因素引起雪崩,如⽹络连接中断,服

    2024年02月10日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包