spring cloud之服务熔断

四、Hystrix组件(*)

- 官网:https://github.com/Netflix/Hystrix
- 在分布式环境中,许多服务依赖项不可避免的会失败。Hystrix是一个库,它通过添加延迟容忍和容错逻辑来帮助您控制这些分布式服务之间的交互。Hystrix通过隔离服务之间的访问点、停止它们之间的级联故障及提供后备选项来实现这一点,所有这些都可以提高系统的整体弹性。

1.服务雪崩

- 在微服务之间进行服务调用,由于某一个服务故障,导致级联的服务故障的现象,成为雪崩效应。
- 雪崩效应描述的是服务提供方不可用,导致消费方不可用,并将不可用逐渐扩大的过程。

微服务之间链路调用图示
在这里插入图片描述

在某一时刻流量突然波动很大,导致某一服务(如SeverC)扛不住请求的压力,变得不可用。那么ServerB的请求也会阻塞,慢慢耗尽serverB的线程资源,导致ServerB也变得不可用,同样也会导致ServerA不可用

在这里插入图片描述

2.服务熔断

"熔断器"本身是一种开关装置,当某个服务发生故障后,通过断路器(hystrix)的故障监控,某个异常条件被触发,直接熔断整个服务。向请求方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出异常,就保证了服务请求方的线程不会长时间占用,避免故障在分布式系统中蔓延,乃至雪崩。如果目标服务情况好转则恢复调用。服务熔断是解决服务雪崩的重要手段。

服务熔断图示:
在这里插入图片描述

3.服务降级

- 服务压力剧增时,为了保证核心服务正常运行,可以有策略的关闭微服务系统中的某些边缘服务

服务降级图示
在这里插入图片描述

4.服务熔断和服务降级总结

- 服务熔断必会触发服务降级,所以熔断也是降级的一种。区别在于熔断是对服务之间调用链的保护,而降级是对整个系统压力过载的一种保护。
- 都是从系统的可用性可靠性着想,为防止系统的整体缓慢甚至服务雪崩,所采取的保护手段。

5.服务熔断的实现

  • 1.添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
  • 2.在启动类上添加注解 @EnableCircuitBreaker。开启服务熔断
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public class HystrixApplication {}
  • 3.服务熔断测试
在方法上添加注解@HystrixCommand(fallbackMethod = "demoFallback"),fallback指定服务熔断后的处理@RestController
public class DemoController {@GetMapping("/demo")@HystrixCommand(fallbackMethod = "demoFallback")public String demo(@RequestParam Integer id){if (id <= 0) {throw new RuntimeException("ID无效");}return "demo ok";}/*** demo方法服务熔断后的处理*/public String demoFallback(Integer id) {return "系统繁忙,请稍后再试!";}
}

错误请求,操作多次后,熔断器打开
在这里插入图片描述

在熔断器打开状态下,接下来(默认)5秒内,所有请求到该接口依然会熔断处理
在这里插入图片描述

熔断器打开状态下,5秒后,此时熔断器处于半开状态,允许放行一个请求进来,如果该请求执行成功,则断路器会关闭,反之重新打开断路器
在这里插入图片描述

  • Hystrix熔断器打开条件
- 1.当次数达到一定的阈值时(默认10秒内超过20个请求次数)
- 2.当失败率达到一定的比例(默认10秒内超过50%的请求失败)
  • Hystrix熔断器触发熔断机制流程图
    在这里插入图片描述
当Hystrix监控对该服务接口调用达到触发熔断器开启的条件时,会在系统中自动触发熔断器,此时任何到该接口的服务请求均不可用,默认5秒后,熔断器会处于半开状态,只允许放行一个请求到该服务接口,如果该请求执行成功,则断路器关闭,反之断路器重新打开

6.OpenFeign 集成 Hystrix

  • 1.添加依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- consul 注册中心 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency><!-- hystrix 熔断 --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency><!--openfeign --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>
</dependencies>
  • 2.配置文件
server.port=8855
# 服务名
spring.application.name=OPENFEIGN-HYSTRIX
# consul注册中心地址
spring.cloud.consul.host=localhost
spring.cloud.consul.port=8500
# 开启openfeign服务熔断处理(默认为false,不开启)
feign.hystrix.enabled=true
  • 3.在启动类上添加注解
@SpringBootApplication
@EnableDiscoveryClient // 开启服务注册客户端
@EnableCircuitBreaker // 开启断路器
@EnableFeignClients // 开启feign
public class OpenfeignHystrixApplication {}
  • 4.OpenFegin 集成 Hystrix 测试
@RestController
@Slf4j
public class TestController {@Autowiredprivate HystrixClient hystrixClient;@GetMapping("/test")public String test(@RequestParam Integer id) {String result = hystrixClient.demo(id);log.info("result:{}", result);return "test ok";}
}
---------------
- feign客户端接口
// fallback:当接口处理异常或不可用时,进行服务熔断处理
@FeignClient(value = "HYSTRIX", fallback = HystrixClientFallback.class)
public interface HystrixClient {@GetMapping("/demo")String demo(@RequestParam(value = "id") Integer id);
}  - Openfeign接口服务熔断备选处理类,需实现HystrixClient接口
@Component
public class HystrixClientFallback implements HystrixClient {@Overridepublic String demo(Integer id) {return "当前请求处理失败,进行服务熔断备选处理。id:" + id;}
}

在这里插入图片描述

7.Hystrix Dashboard(仪表盘)

- Hystrix Dashboard收集了每个HystrixCommand的一组度量,以高效的方式显示每个断路器的运行状况
- 作用:监控每一个@HystrixCommand注解的一组度量,构建一组信息,通过图形化方式展示当前方法@HystrixCommad的状态信息
  • 1.添加依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
  • 2.配置文件
server.port=9909
# 应用名
spring.application.name=HYSTRIX-DASHBOARD
# consul注册中心地址
# spring.cloud.consul.host=localhost
# spring.cloud.consul.port=8500
  • 3.在启动上添加注解@EnableHystrixDashboard
@SpringBootApplication
//@EnableDiscoveryClient
@EnableHystrixDashboard // 开启熔断器仪表盘
public class HystrixDashboardApplication {}
  • Hystrix Dashboard图形化界面访问地址
http://localhost:9909/hystrix

在这里插入图片描述

添加需要监控的服务地址,点击【 Monitor Stream】
在这里插入图片描述

  • Hystrix目前状态
- Hystrix 和 Hystrix Dashboard已经进入维护模式- Hystrix Dashboard已经被废弃,替换产品:Netflix-Skunkworks/hystrix-dashboard- 推荐使用阿里的 sentinel (流量卫兵)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/178556.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python OpenCV 通过trackbar调整图像亮度对比度颜色

上一篇文章通过设置固定值的方式来调整图像&#xff0c;这篇文章通过trackbar来动态调整参数&#xff0c;从而实时展现图像处理结果&#xff0c;得到想要的图像处理参数。 1. 创建trackbar import cv2 import numpy as npdef nothing(x):passcv2.namedWindow(image) # 创建5个…

Postman工具简介

介绍 Postman是一个商业的接口测试工具。免费的版本也可以使用不少功能。 官网&#xff1a;https://www.postman.com/ 下载、安装、应用界面 下载 安装、安装成功以后的应用界面 双击下载下来的可执行文件进行安装&#xff0c;出现如下界面&#xff1a; 可以注册一个账…

如果使用Vue要做根据已有的图形填入到指定的单元格中,你会怎么做?

这里写自定义目录标题 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f;先看效果图上代码 如果使用Vue要做根据已有的图形填入到指定的单元格中&#xff0c;你会怎么做&#xff1f; 先看效果图 上代码 <template><div class&q…

代理IP怎么使用

使用代理IP的步骤如下&#xff1a; 获取代理IP地址&#xff1a;从代理IP服务商处获取代理IP地址。打开浏览器&#xff1a;打开浏览器&#xff0c;并进入代理设置页面。设置代理IP&#xff1a;在代理设置页面中&#xff0c;将代理IP地址和端口号填写到对应的文本框中&#xff0…

kubernetes集群编排——prometheus监控

部署prometheus 创建项目仓库并上传镜像 编写配置文件 [rootk8s2 values]# vim prometheus-values.yaml alertmanager:alertmanagerSpec:image:repository: prometheus/alertmanagertag: v0.24.0 grafana:enabled: trueimage:repository: grafana/grafanatag: 9.0.6service:typ…

Oneid方案

一、前文 用户画像的前提是标识出用户&#xff0c;存在以下场景&#xff1a;不同业务系统对同一个人的标识&#xff0c;匿名用户行为的行为归因&#xff1b;本文提供多种解决方案&#xff0c;提供大家思考。 二、方案矩阵 三、其他 相关连接&#xff1a; 如何通过图算法能力获…

Linux权限管理

目录 前言 1. Linux权限的概念 2. Linux权限管理 2.1 修改权限 拓展 2.2 修改拥有者 2.3 修改所属组 3. 文件类型 3.1 file指令 4. 权限掩码 umask指令 5.目录权限 6. 粘滞位 总结 前言 Linux作为一款开源操作系统&#xff0c;其权限管理机制是非常重要的一部分。熟练掌…

新一轮SocialFi浪潮来袭,Atem Network 再次打响注意力争夺战

火爆如潮的 Atem Network 再次从 CyberConnect 以及 Friend.tech 手中接过 SocialFi 赛道的热度大棒&#xff0c;同时这也表明&#xff0c;协议层仍将是 Web3 社交领域的主要叙事。 前不久&#xff0c;Web3社交协议Atem Network 在白皮书中披露了ATEM的代币经济模型&#xff0c…

基础课4——客服中心管理者面临的挑战

客服管理者在当今的数字化时代也面临着许多挑战。以下是一些主要的挑战&#xff1a; 同行业竞争加剧&#xff1a;客服行业面临着来自同行业的竞争压力。为了获得竞争优势&#xff0c;企业需要不断提高自身的产品和服务质量&#xff0c;同时还需要不断降低成本、提高效率。然而…

2023.11.15使用bootstrap做一个简洁的注册页面

2023.11.15使用bootstrap做一个简洁的注册页面 设置密码必须大于等于6位&#xff0c;并且包含大写字母、小写字母、特殊字符或者数字中的三种。 关注&#xff1a;type"button"和type"submit"之间的区别&#xff1a; type"button"用于普通按钮&…

Vue修饰符(Vue事件修饰符、Vue按键修饰符)

目录 前言 Vue事件修饰符 列举较常用的事件修饰符 .stop .prevent .capture .once Vue按键修饰符 四个特殊键 获取某个键的按键修饰符 前言 本文介绍Vue修饰符&#xff0c;包括Vue事件修饰符以及按键修饰符 Vue事件修饰符 列举较常用的事件修饰符 .stop: …

基于Genio 700 (MT8390)芯片的AR智能眼镜方案

AR眼镜是一种具有前所未有发展机遇的设备&#xff0c;无论是显示效果、体积还是功能都有明显的提升。AR技术因其智能、实时、三维、多重交互和开放世界的特点备受关注。 AR眼镜集成了AR技术、语音识别、智能控制等多项高科技功能&#xff0c;可以帮助用户实现更加便捷、高效、个…