1. 雪崩效应

1.1. 雪崩效应描述

在微服务的架构中,服务间通常会形成相互依赖的关系.

场景一: 比如现在有三个微服务节点:A,B和C,B为A的消费者,C为B的消费者。假如由于网络波动或者A服务自身故障,导致B调用A服务的线程被挂起进入长时间的等待。在高并发的情况下可能导致B的资源被耗竭随之崩溃,从而导致C服务也不可用。这种情况下 就是雪崩效应

场景二: 比如现在有三个微服务节点:A,B和C, A是消费者 B和C是A的提供者,A如果想要完成一个功能 必须同时成功调用B和C 如果B和C 有一个出现问题 则A也会导致挂起,高并发的情况下 A的资源也会耗尽 最终崩溃

1.2. 雪崩效应条件

1: 服务提供者不可用 1.1: 硬件故障,硬件故障可能为硬件损坏造成的服务器主机宕机, 网络硬件故障造成的服务提供者的不可访问. 1.2: 程序Bug,程序出现bug,一直无法响应 1.3: 缓存击穿,缓存击穿一般发生在缓存应用重启, 所有缓存被清空时,以及短时间内大量缓存失效时。大量的缓存不命中,使请求直击后端,造成服务提供者超负荷运行,引起服务不可用 1.4: 用户大量请求 在秒杀和大促开始前,如果准备不充分,用户发起大量请求也会造成服务提供者的不可用. ​
2: 重试加大流量 2.1: 用户重试在服务提供者不可用后, 用户由于忍受不了界面上长时间的等待,而不断刷新页面甚至提交表单 2.2: 代码逻辑重试服务消费端的会存在大量服务异常后的重试逻辑。这些重试都会进一步加大请求流量。 ​
3: 服务调用者不可用 3.1: 同步等待造成的资源耗尽,当服务消费者使用同步调用时,会产生大量的等待线程占用系统资源。一旦线程资源被耗尽,服务调用者提供的服务也将处于不可用状态,于是服务雪崩效应产生了。 ​

1.3. 报错演示

2. 服务降级

服务降级:表示一组服务,优先保证核心服务,或者正常的服务调用的同时,对不可用或者弱可用的服务,直接返回一个结果,不让线程进行等待 ​ 服务降级可以在消费者 也可以在提供者

2.1. 消费者端添加依赖

      <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

2.2. 消费者端开启熔断

2.3. 控制器添加

2.4. 测试

2.5. 整个控制器配置

2.6. 测试

2.7. 开发中的配置

1:由于熔断可以写在消费者端,也可以写在提供者端,也可以两端都写,那么由于消费者访问提供者是有返回值类型的,那么我们的callback方法 也应该有对应的返回类型要求,否则将会二次报错 (ResponseEntity统一返回值类型的好处) ​ ​ 2:我们一个服务有可能又是提供者又是消费者,所以能不能做到很灵活 比如想让谁处理 谁处理

2.8. Feign接口工程中添加类

2.9. 接口中添加

2.10. 处理端开启hystrix

因为我们把熔断这个事,放到了OpenFeign的接口中,所以如果是提供者处理 就在提供者的配置文件中开启 如果是消费者处理,就在消费者配置文件中开启

2.11. 控制器中的内容可以去掉

3. 超时问题

3.1. 问题演示

3.2. 问题说明

因为我们设置了OpenFeign的超时时间是5秒,也就是说这5秒内返回数据都是正常的,但是当我们延时的时间在OpenFeign的范围内,也访问不到数据,触发了Hystrix,因为Hystrix的默认超时时间是1秒 如果1秒没有返回数据 默认熔断器打开

3.3. 设置熔断器时间

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 6000 ## 一般设置的时间 大于等于OpenFeign的超时时间

3.4. 测试

4. 服务熔断

服务熔断:比如整个宿舍楼 所有的人都在看片,看到高潮的时候,此时由于功率过高,保险丝断了,这就是熔断 而Hystrix的熔断和保险丝还不一样,保险丝的熔断需要人为接上,而hystrix的熔断会自动再恢复

4.1. 熔断器状态

Closed  关闭状态(熔断器关闭) 所有请求正常访问Open 打开状态(熔断器打开) 所有请求都会被降级 Hystrix会对请求情况进行统计 如果当一定时间内失败请求达到默认值(默认是百分之50并且访问数不低于20次)时 触发熔断 此时熔断器会打开 此时请求直接超时 不会再等待HalfOpen 半打开状态   当熔断器打开之后5秒(默认值) 会进入半打开状态 释放部分请求通过 如果释放的这些请求是还是有不正常的  那么进入打开状态 然后再5秒进去半打开状态 然后请求的情况 是否再次进入打开状态(一直循环)

4.2. 熔断器的配置

4.3. 遗憾的事情

09-熔断器Hystrix相关推荐

  1. 09 熔断器Hystrix

    09 熔断器Hystrix 1.简介 Hystrix 在英文里面的意思是 豪猪,它的logo 看下面的图是一头豪猪,它在微服务系统中是一款提供保护机制的组 件,和eureka一样也是由netflix公司 ...

  2. 一起来学Spring Cloud | 第五章:熔断器 ( Hystrix)

    在微服务项目中,一个系统可以分割成很多个不同的服务模块,不同模块之间我们通常需要进行相互调用.springcloud中可以使用RestTemplate+Ribbon和Feign来调用(工作中基本都是使 ...

  3. 《深入理解 Spring Cloud 与微服务构建》第九章 熔断器 Hystrix

    <深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix 文章目录 <深入理解 Spring Cloud 与微服务构建>第九章 熔断器 Hystrix ...

  4. springcloud 熔断器Hystrix的具体使用

    springcloud 熔断器Hystrix的具体使用 说起springcloud熔断让我想起了去年股市中的熔断,多次痛的领悟,随意实施的熔断对整个系统的影响是灾难性的,好了接下来我们还是说正事. 熔 ...

  5. 【微服务】微服务熔断器--Hystrix

    微服务熔断器--Hystrix 前言 什么是熔断? 什么是降级? 熔断和降级的区别 Hystrix的隔离机制? 什么是Fallback? 熔断器的使用 导入依赖 启动类开启Hystrix配置 声明服务 ...

  6. 关于熔断器Hystrix替代方案的调研报告

    关于熔断器Hystrix替代方案的调研报告 一.背景 Netflix宣布停止Hystrix熔断器的开发,目前进入了维护模式.同时,也指出了Hystrix 1.5.18版本足够满足现阶段的应用(详细请参 ...

  7. 第六章 服务熔断器Hystrix

    6-1.Hystrix是什么? ​   在微服务的框架中,我们是将一个单体应用拆分成多个服务单元,各个服务单元之间通过注册中心彼此发现和消费对方提供的服务,每个服务器单元都是单独部署,在各自服务的运行 ...

  8. SpringCloud使用熔断器Hystrix

    文章目录 1. 配置 1.1 远程调用配置 1.2 测试远程调用 1.3 使用熔断器Hystrix 1.4 测试熔断器 1. 配置 Feign是简化Java HTTP客户端开发的工具(java-to- ...

  9. 熔断器hystrix的使用

    一.restTemplate+ribbon使用hystrix 1.引入依赖 <dependency><groupId>org.springframework.cloud< ...

  10. SpringCloud组件之熔断器Hystrix的理论与实操

    本篇博客主要讲解Hystrix的理论以及实现. 首先先来讲熔断器Hystrix的理论以及两种实现方法. 熔断器理论 为什么使用熔断器 分布式系统面临的问题:雪崩效应 在微服务架构中通常会有多个服务层调 ...

最新文章

  1. 四旋翼姿态解算——互补滤波算法及理论推导
  2. php调用go服务问题,PHP 调用 Go 服务的正确方式 - Unix Domain Sockets
  3. linux du命令使用:目录大小排序
  4. 安装DNN时可能出现的错误
  5. 一张图看懂微软Power BI系列组件
  6. Oracle B-Tree Index 原理
  7. 【SQLSERVER】SQL SERVER 2008筛选表报错
  8. 中文BERT上分新技巧,多粒度信息来帮忙
  9. javascript 总结(常用工具类的封装)(转)
  10. 解决VS2005在窗体设计界面中数据源窗口灰化不显示数据源的问题
  11. 2017年10月9日 冒泡去重复习
  12. 医院网络安全管理方案
  13. 多图详解缓冲区溢出问题
  14. 计算机在it行业的应用,IT行业的前景怎样啊,我是自考本科毕业,计算机应用...
  15. 香橙派PC Plus电脑开发板制作网络打印服务器
  16. 【ZFNet】Visualizing and Understanding Convolutional Networks (2013) 全文翻译
  17. AutoGPT保姆级使用教程
  18. android 矢量图片使用方法,Android中的矢量图
  19. 京东商品SKU数据采集方法
  20. 群晖moments套件识别拍摄日期为1970错误的解决方法

热门文章

  1. zsh: command not found: telnet 如何解决
  2. 盘点 | 云原生峰会重磅发布
  3. JS数组中的方法 flat(),flatMap()
  4. rpm打包遇到的问题记录
  5. 计算机程序员的表白(转)
  6. 关于pwm电机调速的理解
  7. 独立综合音色库-MAGIX Independence Library Engine | 70GB
  8. 养肝护肝这些好习惯很重要
  9. 技术群闯进了一个幼儿园设计girl
  10. Mac上安装 Navicat