Hytrix原理

news2024/11/25 2:55:13

这里写目录标题

  • Hytrix容错机制
    • 熔断
    • 资源隔离
      • 线程池隔离
      • 信号量隔离
    • 服务降级
    • 请求缓存
    • 请求合并
  • Hystrix流程图

Hytrix容错机制

熔断

  1. 在一个统计时间窗口(HYST rixCommandProperties.metricsRollingStatisticalWindowInMilliseconds())内,处理的请求数达到设置的最小阈值(HYST)rixCommandProperties.circuitBreakerRequestVolumeThreshold()),错误百分比超过设置的最大阈值(HYST)rixCommandProperties.circuitBreakerThreshold() ) )此时断路器分闸,断路器状态由合闸切换为分闸。
  2. 当断路器断开时,它将直接融合所有请求(快速失败)并经过回退逻辑。
  3. 经过一个休眠窗口时间(HYST rixCommandProperties.circuitBreakerSleepWindowInMilliseconds()),Hystrix会释放一个进行后续服务并将断路器开关切换到半开(half OPEN)。如果请求失败,断路器将熔断开关切换到OPEN状态,继续熔断所有请求,直到下一个休眠时间窗口到来;如果请求成功,断路器将切换到 CLOSED 状态,此时允许所有请求通过,直到发生一步,断路器开关才会切换到 OPEN 状态。
    在这里插入图片描述

资源隔离

资源隔离主要指对线程的隔离。Hystrix提供了两种线程隔离方式:线程池和信号量。

线程池隔离

通过将发送请求线程与执行请求的线程分离,可有效防止发生级联故障。当线程池或请求队列饱和时,Hystrix将拒绝服务,使得请求线程可以快速失败,从而避免依赖问题扩散。
在这里插入图片描述

信号量隔离

使用线程池时,发送请求的线程和执行依赖服务的线程不是同一个,而使用信号量时,发送请求的线程和执行依赖服务的线程是同一个,都是发起请求的线程。

服务降级

Fallback相当于是降级操作。 对于查询操作, 我们可以实现一个fallback方法, 当请求后端服务出现异常的时候, 可以使用fallback方法返回的值。 fallback方法的返回值一般是设置的默认值或者来自缓存。告知后面的请求服务不可用了,不要再来了。

请求缓存

请求缓存:比如一个请求过来请求我userId=1的数据,你后面的请求也过来请求同样的数据,这时我不会继续走原来的那条请求链路了,而是把第一次请求缓存过了,把第一次的请求结果返回给后面的请求。

请求合并

请求合并:我依赖于某一个服务,我要调用N次,比如说查数据库的时候,我发了N条请求发了N条SQL然后拿到一堆结果,这时候我们可以把多个请求合并成一个请求,发送一个查询多条数据的SQL的请求,这样我们只需查询一次数据库,提升了效率。

Hystrix流程图

在这里插入图片描述
1、每次调用创建一个新的HystrixCommand,把依赖调用封装在run()方法中;
2、使用调用HystrixCommand的execute来执行一个业务方法调用。Hystrix除了提供了execute方法,另外还提供了3种方法(queue、observer、toObserver);
3、判断是否使用缓存响应请求,若启用了缓存,且缓存可用,直接使用缓存响应请求。【Hystrix支持请求缓存,但需要用户自定义启动】
4、判断熔断器是否打开,如果打开跳到步骤8;
5、判断线程池/队列/信号量是否已满,已满则跳到步骤8;
6、调用HystrixCommand的run方法。运行依赖逻辑,如果执行失败或者超时,跳到步骤8;如果执行成功则直接返回结果;
7、计算熔断器状态,所有的运行状态(成功, 失败, 拒绝,超时)上报给熔断器,用于统计从而判断熔断器状态
8、走Fallback备用逻辑。

以下四种情况将触发getFallback调用:
8.1 熔断器开启拦截调用
8.2 线程池/队列/信号量是否跑满
8.3 run()方法调用超时
8.4 run()方法抛出非HystrixBadRequestException异常

https://www.jianshu.com/p/3e8148d65786
流程图:https://blog.csdn.net/qq_43437044/article/details/128466503
https://www.jianshu.com/p/3e8148d65786

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

转化率双倍暴涨——客户自助服务门户

近年来,社交媒体的兴起使客户负责品牌对话。随着电子商务和在线帮助需求的扩大,公司必须满足并超越新的期望,以保持客户满意度。 通过SaleSmartly(ss客服)自动化流程功能建立客户自助服务是一种双赢的决策&#xff0c…

Ajax XHR响应

文章目录 AJAX 服务器 响应服务器响应responseText 属性responseXML 属性 AJAX 服务器 响应 服务器响应 如需获得来自服务器的响应,请使用 XMLHttpRequest 对象的 responseText 或 responseXML 属性。 属性描述responseText获得字符串形式的响应数据。responseXML…

2015年下半年软件设计师下午试题

试题一 【说明】 某慕课教育平台欲添加在线作业批改系统,以实现高效的作业提交与批改,并进行统计。学生和讲师的基本信息已经初始化为数据库中的学生表和讲师表。系统的主要功能如下: 提交作业。验证学生标识后,学生将电子作业通…

Ajax 数据库

文章目录 AJAX Database 实例AJAX 数据库实例实例解释 showCustomer() 函数AJAX 服务器页面 AJAX Database 实例 AJAX 可用来与数据库进行动态通信。 AJAX 数据库实例 下面的例子将演示网页如何通过 AJAX 从数据库读取信息: 请在下面的下拉列表中选择一个客户&…

【wpf】转换器 Converter

今天积攒了一个转换器的用法,分享给各位。 我们经常会有这种需求: 某些控件有时需要显示,有时需要隐藏,比如: 那,我就想通过一个bool变量和是否显示绑定。 但是我们知道,是否显示,…

nssctf web

[BJDCTF 2020]easy_md5 测试发现输入的内容会通过get传递但是没有其他内容 观察一下响应头 我们看到了 select * from admin where passwordmd5($pass,true) 这里的md5(string,raw) 这里的string应该清楚就是字符串,是必选参数 raw是可选参数 默认不写为FA…

08 - Linux终端与进程

---- 整理自狄泰软件唐佐林老师课程 查看所有文章链接:(更新中)Linux系统编程训练营 - 目录 文章目录 1. 详解控制台与终端1.1 问题1.2 历史回顾1.2.1 控制台(Console)1.2.2 终端(Terminal) 1.3 历史发展进程1.4 终端与…

【Springboot系列】项目启动时怎么给mongo表加自动过期索引

1、前言 在之前操作mongo的过程中,都是自动创建,几乎没有手动创建过表。 这次开发中有张表数据量大,并且不是特别重要,数据表维护一个常见的问题是过期数据没有被及时清理,导致数据量过大,查询变得缓慢。…

【操作系统】CPU 缓存一致性、MESI 协议

【操作系统】CPU 缓存一致性、MESI 协议 参考资料: CPU缓存一致性协议(MESI) 【JUC】Java并发机制的底层实现原理 CPU 缓存一致性 文章目录 【操作系统】CPU 缓存一致性、MESI 协议CPU Cache 的数据写入写直达写回 缓存一致性问题总线嗅探MESI 协议总结 CPU Cache …

电感知识大全

目录 一、电感的种类 1、共模电感 2、差模电感 3、工字电感 功率电感 4、磁珠 5、变压器 6、R棒电感、棒形电感、差模电感 二、电感符号 三、电感特性 前面在学习电容的时候,为了让大家更形象,更通俗的去理解这个元器件,都是拿水缸去…

IO多路复用——select函数

1.select函数原型和fd_set结构体说明 1.1 select函数原型 ​ 使用 select 这种 IO 多路转接方式需要调用一个同名函数 select,这个函数是跨平台的,Linux、Mac、Windows 都是支持的。程序员通过调用这个函数可以委托内核帮助我们检测若干个文件描述符的…

mybatisPlus·入门·贰

文章目录 1 简单CRUD接口1.1 根据id查询({id传参)1.1.1 接口类直接继承IService1.1.2 controller直接调用方法 1.2 根据ids查询1.3 新增1.3.1 接口类直接继承IService1.3.2 controller直接调用方法 1.4 修改状态(Query传参)1.4.1 …

GPT-4 IDEA神仙插件亲测帮助亿万用户解决痛点!

最近,Intellij IDEA的插件商店推出了一款新的插件——Bito,据说使用了GPT-4和ChatGPT来帮助开发人员编写代码,并且下载量已经达到了65K以上。 这款插件可以将GPT-4和ChatGPT引入IDE来大大提高开发人员的效率。它使用了OpenAI的模型&#xff0…

ESP32设备驱动-BMM150数字地磁传感器驱动

BMM150数字地磁传感器驱动 文章目录 BMM150数字地磁传感器驱动1、BMM150介绍2、硬件准备3、软件准备4、驱动实现1、BMM150介绍 BMM150 是一款低功耗、低噪声的 3 轴数字地磁传感器,用于罗盘应用。 具有 1.56 x 1.56 mm 和 0.60 mm 高度的 12 引脚晶圆级芯片级封装 (WLCSP) 为…

JavaEE 2(4/24)

目录 1.线程 2.前台线程和后台线程 3.run和start的区别 4.线程的终止 5.线程等待 6.获取当前线程的引用 1.线程 创建线程需要继承Thread方法 调用start方法就会生成一个新的线程,调用run方法会在老的线程继续跑 main也是个线程,他是自动调用的.线程休息了先唤醒main和thre…

【文章学习系列之模型】Informer

本章内容 文章概况总体结构重点结构self-attention distilling operation(自注意蒸馏操作)generative style decoder(生成式解码器)ProbSparse self-attention mechanism(概率稀疏自注意机制) 实验结果主要…

双向沟通写作法: 用妙记多 Mojidoc 快速写作的实践

在妙记多 Mojidoc,我们希望能够为用户提供快速开始生产力的工具,为此我们一直在加快完善用户使用中的需求和功能迭代,请查看妙记多更新日志,看看我们产品改进速度。 妙记多 Mojidoc 如何实践双向沟通写作法以及在双向写作的文档中…

自称是资深Android程序员的面试现场,结果被面试官吊打~

1背景 牛哥工作五年了,是一名“资深”程序员(嗯…至少他自己是这么认为的) 牛哥所在的公司已经两年没有涨过工资了(嗯…至少他是两年没涨过了) 牛哥坐不住了,这位“资深”程序员打算去“外面的世界”看看…

〖ChatGPT实践指南 - 零基础扫盲篇④〗- OpenAI API 相关介绍、提示-Prompt 与 完成-Completion

文章目录 ⭐ OpenAI API介绍⭐ 提示-Prompt 与 完成-Completion 介绍 这一章节将为各位小伙伴介绍一下 OpenAI 的 API 相关内容,以及在 ChatGPT 中两个经常被用来比较的名词:“提示-prompt” 与 “完成-completion”。 ⭐ OpenAI API介绍 OpenAI API 概…

Fido无密码认证示例部署运行

文章目录 什么是FIDOwebauthn部署运行访问测试 本文对fido基本概念进行总结说明,并部署运行一个实际的例子,可以直观的体验fido无密码认证。晚上的例子方便后续实现相关功能。 什么是FIDO 常见认证方式的问题 目前流行认证方式普遍存在一些问题 用户名…