目录

服务雪崩

一、什么是Hystrix

二、服务熔断

案例

三、服务降级

什么是服务降级

降级工厂类

设置fallbackFactory

开启feign.hystrix

四、服务熔断和降级的区别

五、DashBoard流监控

添加依赖


分布式系统面临的问题:

复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免失败!

服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。

对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几十秒内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障,这些都表示需要对故障和延迟进行隔离和管理,以达到单个依赖关系的失败而不影响整个应用程序或系统运行

我们需要,弃车保帅

一、什么是Hystrix

Hystrix是一个应用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时,异常等,Hystrix 能够保证在一个依赖出问题的情况下,不会导致整个体系服务失败,避免级联故障,以提高分布式系统的弹性。

断路器”本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控 (类似熔断保险丝) ,向调用方返回一个服务预期的,可处理的备选响应 (FallBack) ,而不是长时间的等待或者抛出调用方法无法处理的异常,这样就可以保证了服务调用方的线程不会被长时间,不必要的占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

当一切正常时,请求流可以如下所示:

当许多后端系统中有一个潜在阻塞服务时,它可以阻止整个用户请求:

随着大容量通信量的增加,单个后端依赖项的潜在性会导致所有服务器上的所有资源在几秒钟内饱和。

应用程序中通过网络或客户端库可能导致网络请求的每个点都是潜在故障的来源。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,从而备份队列、线程和其他系统资源,从而导致更多跨系统的级联故障。

当使用Hystrix包装每个基础依赖项时,上面的图表中所示的体系结构会发生类似于以下关系图的变化。每个依赖项是相互隔离的,限制在延迟发生时它可以填充的资源中,并包含在回退逻辑中,该逻辑决定在依赖项中发生任何类型的故障时要做出什么样的响应:

官网资料:Home · Netflix/Hystrix Wiki · GitHub

二、服务熔断

服务熔断解决如下问题:

  • 当所依赖的对象不稳定时,能够起到快速失败的目的;
  • 快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复。

案例

新建springcloud-provider-dept-hystrix-8001模块并拷贝springcloud-provider-dept–8001内的pom.xml、resource和Java代码进行初始化并调整。

导入hystrix依赖

 yml配置文件

server:port: 8001
# mybatis配置
mybatis:# springcloud-api 模块下的pojo包type-aliases-package: com.haust.springcloud.pojo# 本模块下的mybatis-config.xml核心配置文件类路径config-location: classpath:mybatis/mybatis-config.xml# 本模块下的mapper配置文件类路径mapper-locations: classpath:mybatis/mapper/*.xml
# spring配置
spring:application:#项目名name: springcloud-provider-deptdatasource:# 德鲁伊数据源type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/db01?useUnicode=true&characterEncoding=utf-8username: rootpassword: root
# Eureka配置:配置服务注册中心地址
eureka:client:service-url:# 注册中心地址7001-7003defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/instance:instance-id: springcloud-provider-dept-hystrix-8001 #修改Eureka上的默认描述信息prefer-ip-address: true #改为true后默认显示的是ip地址而不再是localhost
#info配置
info:app.name: haust-springcloud #项目的名称company.name: com.haust #公司的名称

 控制器

 启动类中添加对熔断的支持

如果没有熔断机制则会:

so,为了避免因某个微服务后台出现异常或错误而导致整个应用或网页报错,使用熔断是必要的

三、服务降级

什么是服务降级

服务降级是指 当服务器压力剧增的情况下,根据实际业务情况及流量,对一些服务和页面有策略的不处理,或换种简单的方式处理,从而释放服务器资源以保证核心业务正常运作或高效运作。说白了,就是尽可能的把系统资源让给优先级高的服务

资源有限,而请求是无限的。如果在并发高峰期,不做服务降级处理,一方面肯定会影响整体服务的性能,严重的话可能会导致宕机某些重要的服务不可用。所以,一般在高峰期,为了保证核心功能服务的可用性,都要对某些服务降级处理。比如当双11活动时,把交易无关的服务统统降级,如查看蚂蚁深林,查看历史订单等等。

服务降级主要用于什么场景呢?当整个微服务架构整体的负载超出了预设的上限阈值或即将到来的流量预计将会超过预设的阈值时,为了保证重要或基本的服务能正常运行,可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。

降级的方式可以根据业务来,可以延迟服务,比如延迟给用户增加积分,只是放到一个缓存中,等服务平稳之后再执行 ;或者在粒度范围内关闭服务,比如关闭相关文章的推荐。

由上图可得,当某一时间内服务A的访问量暴增,而B和C的访问量较少,为了缓解A服务的压力,这时候需要B和C暂时关闭一些服务功能,去承担A的部分服务,从而为A分担压力,叫做服务降级

降级工厂类

设置fallbackFactory

开启feign.hystrix

四、服务熔断和降级的区别

  • 服务熔断—>服务端:某个服务超时或异常,引起熔断~,类似于保险丝(自我熔断)
  • 服务降级—>客户端:从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个 FallBackFactory ,返回一个默认的值(缺省值)。会导致整体的服务下降,但是好歹能用,比直接挂掉强。
  • 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是从整体负荷考虑;管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)
  • 实现方式不太一样,服务降级具有代码侵入性(由控制器完成/或自动降级),熔断一般称为自我熔断

熔断,降级,限流

限流:限制并发的请求访问量,超过阈值则拒绝;

降级:服务分优先级,牺牲非核心服务(不可用),保证核心服务稳定;从整体负荷考虑;

熔断:依赖的下游服务故障触发熔断,避免引发本系统崩溃;系统自动执行和恢复

五、DashBoard流监控

新建springcloud-consumer-hystrix-dashboard模块

添加依赖

<!--Hystrix依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.6.RELEASE</version>
</dependency>
<!--dashboard依赖-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId><version>1.4.6.RELEASE</version>
</dependency>
<!--Ribbon-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.6.RELEASE</version>
</dependency>
<!--Eureka-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version>
</dependency>
<!--实体类+web-->
<dependency><groupId>com.haust</groupId><artifactId>springcloud-api</artifactId><version>1.0-SNAPSHOT</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--热部署-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId>
</dependency>

 

Hystrix 服务熔断相关推荐

  1. Spring Cloud(十一):Hystrix服务熔断-工作流程

    1. Hystrix服务熔断 1.1 断路器 类似保险丝 1.2 熔断是什么 熔断机制是应对雪崩效应的一种微服务链路保护机制.当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而 ...

  2. 9.Springcloud的Hystrix服务熔断和服务降级

    项目地址: github地址 服务熔断和服务降级异同 相同点:让用户体验到的是某些功能暂时不可用:都是从可用性和可靠性出发,为了防止系统崩溃: 不同点: 服务熔断:一般是某个服务(下游服务)故障引起, ...

  3. 跟着狂神学SpringCloud(Rest环境搭建+Eureka服务注册与发现+ribbon+Feign负载均衡+Hystrix+服务熔断+Zuul路由网关+SpringCloud config分布)

    跟着狂神学SpringCloud SpringCloud 回顾之前的知识- JavaSE 数据库 前端 Servlet Http Mybatis Spring SpringMVC SpringBoot ...

  4. SpringCloud系列7:安检员豪猪哥——Hystrix服务熔断、降级及监控

    文章目录 1.概述 分布式面临的问题 Hystrix介绍 2.服务熔断 1.新建模块 lingluocloud-provider-dept-hystrix-8001 3.服务降级 1.修改linglu ...

  5. SpringCloud Hystrix服务熔断和降级的理解

    (个人理解,不喜勿喷)假如我要开发一个项目,但是开发的过程中遇到一个问题,我不会操作数据库(包括数据库连接,数据查询等),我只能向我的朋友请教,朋友A会使用Hibernate,朋友B会JDBC访问数据 ...

  6. Spring Cloud微服务之Hystrix服务熔断(十二)

    Hystrix熔断器 一.Hystrix概念 二.feign结合Hystrix使用 1.在service的pom中添加依赖 2.在service-user配置文件中添加hystrix配置 3.在ser ...

  7. feign直接走熔断_SpringCloud微服务面试必问:Hystrix 服务降级、熔断

    本文作者:JLSong 本文链接:https://www.cnblogs.com/songjilong/p/12770999.html 1.Hystrix是什么? Hystrix 是一个用于处理分布式 ...

  8. 从Netflix的Hystrix框架理解服务熔断和服务降级

    本文讲的是从Netflix的Hystrix框架理解服务熔断和服务降级,伴随着微服务架构被宣传得如火如荼,一些概念也被推到了我们面前,其实大多数概念以前就有,但很少被提的这么频繁.想起有人总结的一句话, ...

  9. 服务熔断、降级、限流、异步RPC -- HyStrix

    本人新书出版,对技术感兴趣的朋友请关注: https://mp.weixin.qq.com/s/uq2cw2Lgf-s4nPHJ4WH4aw 在今天,基于SOA的架构已经大行其道.伴随着架构的SOA化 ...

最新文章

  1. 汇总 | 精选CVPR开源项目学习资源
  2. 乐鑫代理-启明云端分享|乐鑫ESP8266模组ESP-WROOM-02D和ESP-WROOM-02U有什么不同
  3. 内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量
  4. 合泰单片机数码管c语言,合泰单片机定时器数码管显示
  5. Bootstrap列表组支持的组件
  6. mask rcnn算法分析_实例分割综述(单阶段/两阶段/实时分割算法汇总)
  7. 【Excel从头开始】-2 快速填充/快速分析
  8. [DevExpress使用随笔]之BarManager控件中创建MainMenu
  9. 新华社痛批铁道部封抢票软件:自己傻就怨别人太聪明
  10. (下)开发一款微信小程序的个性简历,能打开大厂之门并获得门票?(附源码)
  11. 怎么一次性删除PPT中所有动画效果?
  12. 计算机类专科学校排名,2017计算机专科学校排名一览表
  13. Android之——手机黑名单的实现
  14. 丅rust是什么意思_rust是什么意思_rust的翻译_音标_读音_用法_例句_爱词霸在线词典...
  15. 第五季完美童模 形象大使林子懿现场走秀回顾
  16. Python之Scrapy爬虫(热门网站数据爬取)
  17. ubuntu20.04安装镜像后缀名称解释
  18. 大学计算机实验报告信息的表示与转换,大学计算机实验报告一(8页)-原创力文档...
  19. Iterm2使用指南
  20. 美图秀秀2015年实习生android应用开发方向招聘笔试题

热门文章

  1. 如何制作U盘启动盘进行Win10重装?
  2. JAVA毕业设计家庭食谱管理系统2021计算机源码+lw文档+系统+调试部署+数据库
  3. java process.waitfor();,正确的调用系统命令——为Process.waitFor设置超时以及其他 | 学步园...
  4. TailWindCSS入门
  5. python中zipfile的使用_如何在Python中使用ZIPFILE模块压缩文件。
  6. display:agl-compositor
  7. CSS 实现加载动画(最简单实现)
  8. day02-三元运算符,if语句
  9. 清华经管创业者加速器·区块链应用实验室“区块链合伙人加速计划”开启报名
  10. /etc/apache2/sites-available/yilan8