Hystrix:Spring Cloud服务熔断与降级组件

问题总结

  1. 熔断器?

  2. Spring Cloud Hystrix?

  3. Hystrix服务降级?

  4. 全局降级方法?

  5. 解耦降级逻辑?

  6. Hystrix服务熔断?

  7. Hystrix故障监控?

问题答案

  1. 熔断器

  • 当微服务系统的一个服务出现故障时,故障会沿着服务的调用链路在系统中疯狂蔓延,最终导致整个微服务系统的瘫痪,这就是“雪崩效率”。
  • 微服务架构引入“熔断器”的一系列服务容错和保护机制。
  • 熔断器在某个服务发生故障后,向服务调用方返回一个符合预期的、可处理的降级响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常。

  1. Spring Cloud Hystrix
  • Spring Cloud Hystrix具有服务降级、服务熔断、线程隔离、请求缓存、请求合并以及实时故障监控等功能。

    • 保护线程资源:防止单个服务的故障耗尽系统中所有线程资源。
    • 快速失败机制:当某个服务发生了故障,不让服务调用方一直等待,而是直接返回失败。
    • 提供降级(FallBack)方案:在请求失败后,提供一个设计好的降级方案。
    • 防止故障扩散:使用熔断机制,防止故障扩散到其他服务。
    • 监控功能:提供熔断器故障监控组件Hystrix Dashboard,随时监控熔断器状态。

  1. Hystrix服务降级
  • 保证当前服务不受其他服务故障的影响,提高服务的健壮性。

    • 在服务器压力剧增时,根据实际业务情况及流量,对一些不重要、不紧急的服务进行有策略地不处理或简单处理,从而释放服务器以保证核心服务正常运作。
    • 当某些服务不可用时,为了避免长时间等待造成服务卡顿或雪崩效应,主动执行备用的降级逻辑立即返回一个友好的提示,以保证主体业务不受影响。
  • 服务降级处理的场景:

    • 程序运行异常

    • 服务超时

    • 熔断器处于打开状态

    • 线程池资源耗尽


  1. 全局降级方法
  • 只有业务方法没有指定其降级方法时,服务降级时才会出发全局回退方法。若业务方法指定了自己的回退方法,那么在服务降级时,就只会直接触发它自己的回退方法,而非全局回退方法。

  1. 解耦降级逻辑
  • 业务方法指定的降级方法和全局降级方法,都必须在同一个类中才能生效,业务逻辑和降级逻辑耦合度高。
  1. 通过重写服务类方法,实现解耦回退逻辑。

  1. Hystrix服务熔断
  • 熔断状态

    • 熔断关闭状态:服务访问正常,熔断器处于关闭状态,客户端正常对服务进行调用。
    • 熔断开启状态:默认情况下,在固定时间内接口调用出错比率达到一个阈值(50%),熔断器会进入熔断开启状态。进入熔断状态后,后续对该服务的调用都会被切断,熔断器会执行本地的降级(FallBack)方法。

  • Hystrix实现熔断机制

    1. 当服务调用出错率达到或超过Hystrix规定的比率(默认50%)后,熔断器进入熔断开启状态。
    2. 进入熔断开启状态后,Hystrix会启动一个休眠时间窗,在这个时间窗内,该服务的降级逻辑会临时充当业务主逻辑,原来的逻辑不可用。
    3. 当有请求再次调用该服务时,会直接调用降级逻辑快速地返回失败响应,以避免系统雪崩。
    4. 当休眠时间窗到期后,Hystrix会进入半熔断状态,允许部分请求对服务原来的主业务逻辑进行调用,并监控其调用成功率。
    5. 如果调用成功率达到预期,则说明服务已经恢复,Hystrix进入熔断关闭状态,服务原来的主业务逻辑恢复;否则Hystrix重新进入熔断开启状态,休眠时间重新来开始进行。

  1. Hystrix故障监控
  • Hystrix 会持续地记录所有通过 Hystrix 发起的请求的执行信息,并以统计报表的形式展示给用户,包括每秒执行请求的数量、成功请求的数量和失败请求的数量等。

Hystrix:Spring Cloud服务熔断与降级组件的更多相关文章

  1. springcloud(十七):服务网关 Spring Cloud GateWay 熔断、限流、重试

    上篇文章介绍了 Gataway 和注册中心的使用,以及 Gataway 中 Filter 的基本使用,这篇文章我们将继续介绍 Filter 的一些常用功能. 修改请求路径的过滤器 StripPrefi ...

  2. Spring-cloud微服务实战【七】:服务熔断与降级hystrix

      在之前的文章中,我们先后介绍了eureka,ribbon,feign,使用eureka集群的方式来保证注册中心的高可用,在eureka中使用ribbon进行负载均衡,使用feign接口替换手动编码 ...

  3. 服务容错保护断路器Hystrix之六:服务熔断和服务降级

    伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前(管你接受不接受),其实大多数概念以前就有,但很少被提的这么频繁(现在好像不提及都不好意思交流了).想起有人总结的一句话,微服务架构的特点就 ...

  4. spring cloud要点简介及常用组件

    spring cloud基于spring boot spring cloud是通过包装其他技术框架实现的,例如OSS组件,实现了一套通过基于注解.java配置和基于模板开发的微服务框架. spring ...

  5. Spring Cloud 功能使用的层面组件(一)

    来源:赤峰seo 实际上,Spring Cloud 是一个全家桶式的技术栈,它包含了很多组件.本文先从最核心的几个组件,也就是 Eureka.Ribbon.Feign.Hystrix.Zuul 入手 ...

  6. (万字好文)Dubbo服务熔断与降级的深入讲解&代码实战

    原文链接:(万字好文)Dubbo服务熔断与降级的深入讲解&代码实战 一.Dubbo服务降级实战 1 mock 机制 谈到服务降级,Dubbo 本身就提供了服务降级的机制:而 Dubbo 的服务 ...

  7. Spring Cloud 服务端注册与客户端调用

    Spring Cloud 服务端注册与客户端调用 上一篇中,我们已经把Spring Cloud的服务注册中心Eureka搭建起来了,这一章,我们讲解如何将服务注册到Eureka,以及客户端如何调用服务 ...

  8. Spring Cloud 服务网关Zuul

    Spring Cloud 服务网关Zuul 服务网关是分布式架构中不可缺少的组成部分,是外部网络和内部服务之间的屏障,例如权限控制之类的逻辑应该在这里实现,而不是放在每个服务单元. Spring Cl ...

  9. 【Hystrix】实现服务隔离和降级

    一.背景 1.1 服务熔断 1.2 服务降级 1.3 服务隔离 1.4 总结 二.使用Hystrix实现服务隔离和降级 2.1 Hytrix 简介 2.2 线程池方式 2.3 信号量 三.项目搭建 3 ...

  10. spring cloud服务间调用feign

    参考文章:Spring Cloud Feign设计原理 1.feign是spring cloud服务间相互调用的组件,声明式.模板化的HTTP客户端.类似的HttpURLConnection.Apac ...

随机推荐

  1. 深入理解RocketMQ 广播消费

    这篇文章我们聊聊广播消费,因为广播消费在某些场景下真的有奇效.笔者会从基础概念.实现机制.实战案例.注意事项四个方面一一展开,希望能帮助到大家. 1 基础概念 RocketMQ 支持两种消息模式:集群 ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (100)-- 算法导论9.3 6题

    六.用go语言,对一个包含n个元素的集合来说,k分位数是指能把有序集合分成k个等大小集合的第k-1个顺序统计量.给出一个能找出某一集合的k分位数的 O(nlgk)时间的算法. 文心一言: 要找到一个集 ...

  3. 使用 Sealos 构建低成本、高效能的私有云

    这个时候谈论私有云似乎有点反直觉?大部分人认知不是上云是大趋势嘛?我也比较认可上云,不过私有云也是云,今天给大家带来一个新的选择 -- 用云,只需一个 Sealos 就够了. 看看我们怎么做到更低的成 ...

  4. ECS搭建FTP服务

    实验云账号,创建资源后生成收起 子用户名称: u-7ngohee5@1111971854401817 子用户密码: Jp1Ho5Aj5Ek5Yx1P AK ID: LTAI5tGc6fVMJj44H4 ...

  5. np.random.beta

    numpy.random.beta(a,b,size=None) 从β分布中提取样本.β分布是狄里克莱分布的一个特例,与伽马分布有关. 在这里我们将参数(3个参数)设置为32 32 3 参数1:32次 ...

  6. 再学Blazor——扩展方法

    上篇提到 Blazor 组件的高级写法,是采用扩展方法对 HTML 元素和组件进行扩展,以便于书写组件结构和代码阅读.本篇主要介绍扩展方法实现的思路. 什么是扩展方法 要扩展哪个类 扩展方法的实现 1 ...

  7. 山东大学&安恒校赛CTF

    1.babyshell 这段代码是一个函数seccom,它使用seccomp机制来限制进程的系统调用权限.seccomp是一种Linux内核的安全模块,可以用于过滤或限制进程可以执行的系统调用. 具体 ...

  8. 【PHP正则表达式】

    [PHP正则表达式] 最近写题总是遇到php正则表达式的匹配函数,于是进行一个总结. 1.什么是正则表达式 是php在进行搜索时用于匹配的模式字符串.一般用于php对特定字符序列的替换和搜索. 2.正 ...

  9. Welcome to YARP - 4.限流 (Rate Limiting)

    目录 Welcome to YARP - 1.认识YARP并搭建反向代理服务 Welcome to YARP - 2.配置功能 2.1 - 配置文件(Configuration Files) 2.2 ...

  10. (Good topic)哈希表:拼写单词 (3.17 leetcode每日打卡)

    给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars. 假如你可以用 chars 中的『字母』(字符)拼写出 words 中的某个『单词』(字符串),那么我们就认为你掌 ...