SpringCloud 学习(四)Hystrix

6. Netflix.Hystrix

6.1 简介

● 扇出

多服务之间调用,若微服务 A 调用微服务 B 和微服务 C,微服务 B 和 微服务 C 又调用其他微服务,这就是扇出

● 服务雪崩

若扇出的链路上某个微服务的调用响应时间过长或者不可用,么此扇出链路的调用就会占用越来越多的系统资源,进而引起系统崩溃,这就是雪崩效应

● 断路器

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

● 服务降级

服务降级一般是指在服务器压力剧增的时候,根据实际业务使用情况以及流量,对一些服务和页面有策略的不处理或者用一种简单的方式进行处理,从而释放服务器资源的资源以保证核心业务的正常高效运行

● 服务熔断

服务熔断是应对系统服务雪崩的一种保险措施,是一种特殊降级措施。

服务熔断是服务降级的一种特殊情况,他是防止服务雪崩而采取的措施。 系统发生异常或者延迟或者流量太大,都会触发该服务的服务熔断措施,链路熔断,返回兜底方法。 这是对局部的一种保险措施。在 SpringCloud 框架中,熔断机制通常使用 Hystrix 实现。

● 什么是 Hystrix

Hystrix 是一个用于处理分布式系统的延迟和容错的开源库,能保证某个依赖出问题的情况下,不使整体服务失败,避免级联故障,提高分布式系统的弹性。

官方文档:Home · Netflix/Hystrix Wiki (github.com)

翻译文档:Hystrix 使用手册 | 官方文档翻译 - 闪客sun - 博客园 (cnblogs.com)

● Hystrix 能干什么

  • 服务降级

  • 服务熔断

    Hystrix 监控微服务间的调用状况,当失败的调用到一定阈值,缺省为5秒内20次调用失败就会启动熔断机制,熔断机制的注解是 @HystrixCommand

  • 服务限流

  • 接近实时的监控

6.2 实现服务熔断

调整 springcloud-provider-dept-8001 服务

● 新建 maven module

将 springcloud-provider-dept-8001 服务复制到本服务,修改相关配置

在这里插入图片描述

● 添加依赖

<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.6.RELEASE</version>
</dependency>

● 修改控制层

@RestController
public class DeptController {@Autowiredprivate DeptService deptService;@GetMapping("/dept/getDept/{id}")// 此函数执行失败后指定跳转函数@HystrixCommand(fallbackMethod = "hystrixGetDept")public Dept getDept(@PathVariable("id") Long id) {Dept dept = deptService.queryById(id);if (dept == null) throw new RuntimeException("id = " + id + " => 用户不存在");return dept;}/*** 备选方法* @param id 用户编号* @return 返回 Dept 对象,其 dname 为提示信息*/public Dept hystrixGetDept(@PathVariable("id") Long id) {return new Dept().setDeptno(id).setDname("@hystrix id = " + id + " => 用户不存在").setDb_source("no this data in database");}}

● 开启熔断支持

// 服务启动后注册到 eureka 注册中心
@EnableEurekaClient
// 服务发现
@EnableDiscoveryClient
// 熔断支持
@EnableCircuitBreaker
@SpringBootApplication
public class HystrixDeptProvider_8001 {public static void main(String[] args) {SpringApplication.run(HystrixDeptProvider_8001.class, args);}
}

在这里插入图片描述

查询数据库内不存在的数据

在这里插入图片描述

6.3 实现服务降级

● 创建后备工厂

在公共服务 springcloud-api 中定义后备工厂,即服务无法调用或调用失败后的备用方法

在这里插入图片描述

package com.why.springcloud.service;import com.why.springcloud.pojo.Dept;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;import java.util.List;/*** 服务降级** @author why* @since 2021/9/9 20:56*/
@Component
public class DeptClientFallbackFactory implements FallbackFactory {@Overridepublic DeptClientService create(Throwable throwable) {return new DeptClientService() {@Overridepublic Dept queryById(Long id) {return new Dept().setDeptno(id).setDname("@hystrix id = " + id + " => 此服务已关闭").setDb_source("this service has stopped");}@Overridepublic List<Dept> queryAll() {return null;}@Overridepublic boolean addDept(Dept dept) {return false;}};}
}

● Feign 绑定后备工厂

在这里插入图片描述

@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT", fallbackFactory = DeptClientFallbackFactory.class)

● 消费端开启 feign.hytrix

在这里插入图片描述

# feign.hystrix
feign:hystrix:enabled: true

在这里插入图片描述

关闭服务,再次访问

在这里插入图片描述

6.4 实现服务监控

(1) 新建 dashboard 服务模块

在这里插入图片描述

(2) 导入依赖

<!--实体类 + web-->
<dependencies><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-hystrix --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix</artifactId><version>1.4.6.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-hystrix-dashboard</artifactId><version>1.4.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-ribbon</artifactId><version>1.4.6.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId><version>1.4.6.RELEASE</version></dependency><dependency><groupId>org.example</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>
</dependencies>

(3) 应用配置文件

server:port: 9001# 避免 Cannot execute request on any known server 异常
eureka:client:# 是否将自己注册到 Eureka-Server 中,默认为 true# registerWithEureka等同于register_with_eurekaregister-with-eureka: false# 是否需要拉取服务信息,默认为 true# fetchRegistry等同于 fetch-registryfetch-registry: false

(4) 启动类开启监控

@SpringBootApplication
// 开启监控页面
@EnableHystrixDashboard
public class DeptConsumerDashboard_9001 {public static void main(String[] args) {SpringApplication.run(DeptConsumerDashboard_9001.class, args);}
}

(5) 访问监控页面

localhost:9001/hystrix

在这里插入图片描述

(5) 服务端添加 servlet

springcloud-provider-dept-hystrix-8001

// HystrixDeptProvider_8001.java
@Bean
public ServletRegistrationBean<HystrixMetricsStreamServlet> hystrixMetricsStreamServlet() {ServletRegistrationBean<HystrixMetricsStreamServlet> registrationBean = new ServletRegistrationBean<>(new HystrixMetricsStreamServlet());registrationBean.addUrlMappings("/actuator/hystrix.stream");return registrationBean;
}

(6) 访问监控页面

启动 springcloud-consumer-hystrix-dashboard

启动 springcloud-provider-dept-hystrix-8001

启动 springcloud-eureka-7001

向服务 springcloud-provider-dept-hystrix-8001 发送一个 get 请求

在这里插入图片描述

查看服务 springcloud-provider-dept-hystrix-8001 的流情况

在这里插入图片描述

填写监控页面信息

在这里插入图片描述

在这里插入图片描述

  • 实心圆
    • 颜色表示实例的健康状况, 绿色<黄色<橙色<红色
    • 面积表示实例的请求流量,面积越大,流量越大
  • 实线
    • 记录两分钟内流量的相对变化

在这里插入图片描述

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

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

相关文章

人工智能AI 全栈体系(六)

第一章 神经网络是如何实现的 这些年神经网络的发展越来越复杂&#xff0c;应用领域越来越广&#xff0c;性能也越来越好&#xff0c;但是训练方法还是依靠 BP 算法。也有一些对 BP 算法的改进算法&#xff0c;但是大体思路基本是一样的&#xff0c;只是对 BP 算法个别地方的一…

ADC数模转化器

简介 • ADC &#xff08; Analog-Digital Converter &#xff09;模拟 - 数字转换器 • ADC 可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁 • 12 位逐次逼近型 ADC &#xff0c; 1us 转换时间 &#xff08;12位:分辨率…

得帆用户峰会|江汽集团数字化实践

本文深度分享江汽集团数字化实践。全部内容来自于江淮汽车IT技术总监文洪刚&#xff0c;在得帆信息主办的“智荟数字未来”2023得帆数字化高管峰会的演讲。 01 -基于两化融合 积极推进智能制造、互联网服务能力建设 江汽集团于十三五期间基于两化融合管理体系积极推进智能制…

谈谈最近招人的感受!

最近折腾新的项目&#xff0c;面试了很多实习生小伙伴&#xff0c;我说说我的一些「面试」感受&#xff0c; 虽然是一个老生常谈的话题&#xff0c;但是依然提一下。 准时很重要&#xff1a;提前一点时间&#xff0c;踩个点&#xff0c;别迟到&#xff0c;面试的过程中由于每个…

贪心算法总结归类(图文解析)

贪心算法实际上并没有什么套路可言&#xff0c;贪心的关键就在于它的思想&#xff1a; 如何求出局部最优解&#xff0c;通过局部最优解从而推导出全局最优解 常见的贪心算法题目 455. 分发饼干 这题的解法很符合“贪心”二字 如果使用暴力的解法&#xff0c;那么本题是通过…

MySQL 存储引擎

MySQL 存储引擎1、概念2、常用存储引擎2.1 MyISAM特点2.2 InnoDB特点 3、MyISAM 表支持的存储格式4、查看表的存储引擎4.1 查看系统支持的存储引擎4.2 查看表使用的存储引擎 5、修改存储引擎5.1 通过 alter table 修改5.2 通过修改 /etc/my.cnf 配置文件&#xff0c;指定默认存…

opencv dnn模块 示例(17) 目标检测 object_detection 之 yolo v5

在前文【opencv dnn模块 示例(16) 目标检测 object_detection 之 yolov4】介绍的yolo v4后的2个月&#xff0c;Ultralytics发布了YOLOV5 的第一个正式版本&#xff0c;其性能与YOLO V4不相伯仲。 文章目录 1、Yolo v5 和 Yolo v4 的区别说明1.1、Data Augmentation - 数据增强1…

深入浅出Java的多线程编程——第一篇

目录 1. 认识线程&#xff08;Thread&#xff09; 1.1 概念 1.1.1 线程是什么 1.1.2 为啥需要线程 1.1.3 进程和线程的区别 1.1.4 Java的线程和操作系统线程的关系 1.2 第一个多线程程序 1.3 创建线程的方式&#xff08;5种&#xff09; 1.3.1 继承Thread类 1.3.2 实现…

AVL树的模拟实现(c++)

目录 搜索二叉树对于搜索查询来说是非常快的&#xff0c;但是它有着致命的缺陷&#xff0c;如果插入的数据是有序的&#xff0c;那么它的结构就会变成单链表&#xff0c;这对于搜索查询来说是非常不利的&#xff0c;因此为了解决搜索树的缺陷&#xff0c;弥补它的不足&#xff…

网络编程-UDP协议(发送数据和接收数据)

需要了解TCP协议的&#xff0c;可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 TCP/IP参考模型 通过此图&#xff0c;可以了解UDP所在哪一层级中 代码案例 发送数据 package com.hidata.devops.paas.udp;import java.io.IOException; …

海康、大华等IPC解码上墙,PC上平台同时查看方案

【金山文档】 wvp-gb28181-prohttps://kdocs.cn/l/cneSpcss6bo2

多层感知机——MLP

源代码在此处&#xff1a;https://github.com/wepe/MachineLearning/tree/master/DeepLearning Tutorials/mlp 一、多层感知机&#xff08;MLP&#xff09;原理简介 多层感知机&#xff08;MLP&#xff0c;Multilayer Perceptron&#xff09;也叫人工神经网络&#xff08;ANN&…

孜然单授权系统V1.0[免费使用]

您还在为授权系统用哪家而发愁&#xff1f;孜然单授权系统为您解决苦恼&#xff0c;本系统永久免费。 是的&#xff0c;还是那个孜然&#xff0c;消失了一年不是跑路了是没有空&#xff0c;但是这些都是无关紧要的&#xff0c;为大家带来的孜然单授权系统至上我最高的诚意&…

AnyDesk多ID集中控制台V2.0

网盘下载 AnyDesk多ID集中控制台V2.0 软件介绍&#xff1a; 首先大家要知道AnyDesk软件是干嘛的&#xff1f;国外的远程协助工具&#xff0c;和TeamViewer同一个软件&#xff0c;TeamViewer确定需要登录&#xff0c;使用限制5分钟等等缺点&#xff0c;所以自己就用易语言开发An…

ElasticSearch - DSL查询文档语法,以及深度分页问题、解决方案

目录 一、DSL 查询文档语法 前言 1.1、DSL Query 基本语法 1.2、全文检索查询 1.2.1、match 查询 1.2.2、multi_match 1.3、精确查询 1.3.1、term 查询 1.3.2、range 查询 1.4、地理查询 1.4.1、geo_bounding_box 1.4.2、geo_distance 1.5、复合查询 1.5.1、相关…

关键点检测 HRNet网络详解笔记

关键点检测 HRNet网络详解笔记 0、COCO数据集百度云下载地址1、背景介绍2、HRNet网络结构3、预测结果&#xff08;heatmap&#xff09;的可视化3、COCO数据集中标注的17个关键点4、损失的计算5、评价准则6、数据增强7、模型训练 论文名称&#xff1a; Deep High-Resolution Rep…

Learn Prompt- Midjourney案例:网页设计

快速开始​ 用 “ web design for...” 或 “ modern web design for..” 来快速开始你的提示。 web design for a generic SaaS startup --ar 3:2否定提示-no​ 使用--no告诉 Midjourney 你不想要什么。Midjourney 的默认风格倾向于现实和详细。但这可能不适用于所有品牌。…

AI聊天ChatGPT系统源码卡密验证开源版

ChatGPT卡密验证版源码是一个基于PHP7.4和MySQL5.6的聊天AI源码&#xff0c;它不仅支持暗黑模式、反应速度极快&#xff0c;而且充值方面采用后台生成卡密方式&#xff0c;方便快捷&#xff0c;如果您有能力将其接入在线支付&#xff0c;即可进一步拓展充值方式&#xff0c;为更…

白帽学苑-内网渗测靶机训练(1)

本文对应靶机地址&#xff1a; BoredHackerBlog: Social Network ~ VulnHub 涉及知识点&#xff1a; 主机发现端口扫描服务发现路径爬取代码注入Shell脚本内网信息收集内网穿透漏洞利用密码破解本地提权攻击代码修改 将靶机导入虚拟机中&#xff0c;桥接模式&#xff0c;直接…

基于springboot会员制医疗预约服务管理信息系统springboot017

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…