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. BS系统的登录鉴权流程演变

    1 基础知识 用户登录是使用指定用户名和密码登录到系统,以对用户的私密数据进行访问和操作.在一个有登录鉴权的BS系统中,通常用户访问数据时,后端拦截请求,对用户进行鉴权,以验证用户身份和权限.用户名. ...

  2. 其它-Supervisor的使用

    文章目录 Supervisor 的使用 一 Supervisor介绍 二 安装 2.1 安装方式 2.2 验证 2.3 配置 2.4 配置详情(了解) 2.5 启动.停止.重启 三 program 配 ...

  3. Go语言精进之路目录

    目录 一.介绍 01.Go 语言的前生今世 二.开发环境搭建 01.Go 语言开发环境搭建 三.初识GO语言 01.Go 多版本管理工具 02.第一个 Go 程序"hello,world&q ...

  4. PostgreSQL学习笔记-3.基础知识:CROSS、INNER、LEFT OUTER、RIGHT OUTER、FULL OUTER、UNION

    PostgreSQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段. 在 PostgreSQL 中,JOIN 有五种连接类型: CROSS JOIN :交叉连接INNER ...

  5. Quartus 入门

    转载请标明出处:https://www.cnblogs.com/leedsgarden/p/17790320.html 本文介绍的是Quartus的免费版,可以满足基本的教学需要 如果你用的是Xili ...

  6. C# -WebAPIOperator.cs

    说明:一个用C#编写的WebAPI操作类,只写了Get Post 部分. using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System ...

  7. shell脚本之语句(条件、循环)

    条件语句 1.测试 使用[]时要使用空格,注意格式  格式1:test 条件表达式  格式2:[ 条件表达式 ]#注意空格  注意[]空格,否则会失败  测试 是否成功使用 $?返回值来判断  [ 操 ...

  8. Eclipse设置GC日志输出

    今天看了关于垃圾回收的书籍,然后自己就想自己试试,自己就在eclipse里面配置了日志输出.方法如下: 1 右键项目,选择properties 2 选择run/debug setting  新建一个a ...

  9. 线上JAVA应用平稳运行一段时间后出现JVM崩溃问题

    一.问题是怎么发现的 系统是一个定时任务系统,需要定时执行业务代码,业务代码主要是访问MYSQL数据库和缓存进行操作,该开始启动,系统日志一切正常,但是运行一段时间到凌晨后,系统就自动崩溃了,java ...

  10. 【pwn】ez_pz_hackover_2016 --pwngdb和pwntools的结合,动态调试

    首先checksec 没开nx,说明堆栈可执行,初步考虑需要shellcode,然后拖进ida看主函数逻辑 看chall函数   printf("Yippie, lets crash: %p ...