Hystrix服务熔断机制

熔断机制

熔断机制是应对雪崩效应的一种微服务链路保护机制,当系统链路中的某个微服务出现错误不可用或者响应时间太长的时候就会进行服务的降级,进而熔断该服务的调用,快速返回熔断的响应信息。当检测到该节点微服务调用正常后,就会恢复正常调用

在Spring Cloud框架里,熔断机制通过Hystrix实现。Hystrix会监控微服务间调用的状况,当失败的调用达到一定阈值,就会启动熔断机制。熔断机制的注解是@HystrixCommand。

Hystrix的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后,可以自动重连。通过断路的方式,将后续请求直接拒绝,一段时间(默认5秒)之后允许部分请求通过,如果调用成功则回到断路器关闭状态,否则继续打开,拒绝请求的服务。

Hystrix熔断状态机模型:

在这里插入图片描述
状态机有3个状态:

  1. Closed:关闭状态(断路器关闭),所有请求都正常访问。

  2. Open:打开状态(断路器打开),所有请求都会被降级。Hystrix会对请求情况计数,当一定时间内失败请求百分比达到阈值,则触发熔断,断路器会完全打开。默认失败比例的阈值是50%,请求次数最少不低于20次。

  3. Half Open:半开状态,不是永久的,断路器打开后会进入休眠时间(默认是5S)。随后断路器会自动进入半开状态。此时会释放部分请求通过,若这些请求都是健康的,则会关闭断路器,否则继续保持打开,再次进行休眠计时。

断路器重要参数

Hystrix有以下重要参数:

metrics.rollingStats.timeInMilliseconds:统计时间窗。断路器确定是否打开需要统计一些请求和错误数据,而统计的时间范围就是统计时间窗。默认为10s

circuitBreaker.sleepWindowInMilliseconds:休眠时间窗,熔断开启状态持续一段时间后,熔断器会自动进入半熔断状态,这段时间就被称为休眠窗口期。每隔默认 5000ms 放一个请求过去,试探所依赖的服务是否恢复。

circuitBreaker.requestVolumeThreshold :请求总数阀值。 在统计时间窗内,请求总数必须到达一定的数量级,Hystrix 才可能会将熔断器打开进入熔断开启转态,而这个请求数量级就是 请求总数阀值。Hystrix 请求总数阈值默认为 20,这就意味着在统计时间窗内,如果服务调用次数不足 20 次,即使所有的请求都调用出错,熔断器也不会打开。

circuitBreaker.errorThresholdPercentage:错误百分比阈值。 当请求总数在统计时间窗内超过了请求总数阀值,且请求调用出错率超过一定的比例,熔断器才会打开进入熔断开启转态,而这个比例就是错误百分比阈值。错误百分比阈值设置为 50,就表示错误百分比为 50%,如果服务发生了 30 次调用,其中有 15 次发生了错误,即超过了 50% 的错误百分比,这时候将熔断器就会打开。

我们可以通过修改hystrix的配置来修改熔断策略

hystrix:
	command:
		default:
	  	  execution:
		   isolation:
		    thread:
		     timeoutInMilliseconds: 3000 #服务降级超时时间
	circuitBreaker:
		errorThresholdPercentage: 50 # 触发熔断错误比例阈值,默认值50%
		sleepWindowInMilliseconds: 10000 # 熔断后休眠时长,默认值5秒
		requestVolumeThreshold: 10 # 熔断触发最小请求次数,默认值是20

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Visual Studio 2022 AI Code 支持

1.先在 Log In | Codeium Free AI Code Completion & Chat 上注册一个用户 在Visual Stuido 中扩展中搜索 codeium 并安装 安装完成后登录即可。 注意国内可能存在网络问题无法使用这时建议使用代理进行登录。 地址如下: Sign Up | Codeium Free AI Code Co…

数组中元素的插入和查找算法探究

数组的查找 线性查找 概念 线性查找也叫顺序查找,这是最基本的一种查找方法,从给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。 元素序列的排列可以有序,也可以无序。 代码实现 public cl…

1-06格式化输入和输出

一、概述 格式化输入和输出其实指的就是C语言标准函数库<stdio.h>中的&#xff1a; scanf函数&#xff0c;用于从键盘读取输入。printf函数&#xff0c;用于向屏幕输出信息。 它们是C语言当中使用非常非常频繁的两个函数&#xff0c;所以很重要。 这两个函数的基本使…

SAP 表TPALOG 查询请求号的查询记录

SE16N输入表 TPALOG &#xff0c;查看到如下界面

Linux下Redis6下载、安装和配置教程-2024年1月5日

Linux下Redis6下载、安装和配置教程-2024年1月5日 一、下载二、安装三、启动四、设置开机自启五、Redis的客户端1.Redis命令行客户端2.windows上的图形化桌面客户端 一、下载 1.Redis的官方下载&#xff1a;https://redis.io/download/ 2.网盘下载&#xff1a; 链接&#xff…

stm32---输入捕获实验实操(巨详细)

这次来分享上次没说完的输入捕获的知识点 实验中用到两个引脚&#xff0c;一个是通用定时器 TIM3 的通道 1&#xff0c;即 PA6&#xff0c;用于输出 PWM 信号&#xff0c;另一 个是高级控制定时器 TIM1 的通道 1&#xff0c;即 PA8&#xff0c;用于 PWM 输入捕获&#xff0c;实…

rpm数据库被破坏,无法使用yum

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题描述&#xff1a; 云服务器在安装了开源的HIDS插件后&#xff0c;发现安装了插件的服务器全部突然无法正常使用yum安装软件…

HTML JavaScript 康威生命游戏

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>康威生命游戏</title><style>body {font-family: Arial, sa…

Adobe XD是什么?探索这款创新的用户体验设计工具

Adobexd是一种基于矢量的设计工具&#xff0c;主要用于设计移动和Web应用程序的用户界面(UI)。与Photoshop或ilustrator等其他Adobe产品相比&#xff0c;它相当轻。对于对快速设计和原型迭代感兴趣的界面设计师来说&#xff0c;轻量级并不是一件坏事。 在早期&#xff0c;Adob…

LINUX常见问题之SYN flooding

一、什么是 SYN flooding&#xff1f; SYN Flood是流行的DoS&#xff08;拒绝服务攻击&#xff09;与DDoS&#xff08;分布式拒绝服务攻击&#xff09;的方式之一&#xff0c;这是一种利用TCP协议缺陷&#xff0c;发送大量伪造的TCP连接请求&#xff0c;塞满TCP等待连接队列&am…

12.字符串和正则表达式

使用正则表达式 正则表达式相关知识 在编写处理字符串的程序或网页时&#xff0c;经常会有查找符合某些复杂规则的字符串的需要&#xff0c;正则表达式就是用于描述这些规则的工具&#xff0c;换句话说正则表达式是一种工具&#xff0c;它定义了字符串的匹配模式&#xff08;…

基于 TensorFlow.js 构建垃圾评论检测系统

基于 TensorFlow.js 构建垃圾评论检测系统。 准备工作 在过去的十年中&#xff0c;Web 应用变得越来越具有社交性和互动性&#xff0c;而即使是在中等热门的网站上&#xff0c;也有数万人可能实时对多媒体、评论等的支持。 这也让垃圾内容发布者有机会滥用此类系统&#xff0c…

如何做到高可用、高吞吐、高扩展性

如何做到高可用、高吞吐、高扩展性 本文转自 公众号 ByteByteGo&#xff0c;如有侵权&#xff0c;请联系&#xff0c;立即删除 我们经常需要设计具有高可用性、高可扩展性和高吞吐量的系统。它们的确切含义是什么&#xff1f; 下图是一份系统设计小抄&#xff0c;包含“三高”…

Windows Server 2019 Standard 和 Datacenter 版本差异比较

文章目录 正式版本的通用功能差异锁定和限制差异服务器角色差异可用功能差异Windows 2019 ISO下载推荐阅读 在测试hyper-V的过程中&#xff0c;计划安装一个Windows 2019的OS&#xff0c;顺便了解Windows Server 2019 的 Standard 和 Datacenter 版本有哪些差异&#xff1f;我们…

NoSQL概述与Redis入门-redis安装与测试

一、Nosql概述 1、为什么使用Nosql 1、单机Mysql时代 90年代,一个网站的访问量一般不会太大&#xff0c;单个数据库完全够用。随着用户增多&#xff0c;网站出现以下问题 数据量增加到一定程度&#xff0c;单机数据库就放不下了数据的索引&#xff08;B Tree&#xff09;,一个…

基于zookeeper实现服务节点HA主备自动切换

文章目录 前言一、架构图和流程图二、流程说明1.服务启动初始化ZK、注册所有服务节点信息-MasterRegister2.创建、运行服务节点&#xff0c;并管理服务节点-LeaderSelectorZkClient。3.典型场景-调度服务单体执行-DigitalEmpTask 总结参考 前言 Spring Boot 主备切换可以采用数…

Go语言学习笔记

go变量和常量-初窥门径-CSDNGo技能树 安装检查go版本 在线运行 在线代码运行 (gotribe.cn) 新建一个文件夹 打开终端执行 go mod init learngo。这将创建一个名为go.mod 新建文件 main.go内容 package mainfunc main() {println("Hello world") } package main…

《BackTrader量化交易图解》 1~7 章

文章目录 1. BackTrader 简介1.1 BackTrader 量化软件特点1.2 模块介绍 2. 数据预处理2.1 数据格式2.2 Lines 内部数据格式 3. 策略编程3.1 SQN 指数&策略评估参数3.2 量化金融指标3.3 策略编程模板 4. Buy 买入策略5. Sell 卖出策略5.1 Position 仓位检查5.2 Smart Stakin…

【Vue3】2-4 : 声明式渲染及响应式数据实现原理

本书目录&#xff1a;点击进入 一、声明式渲染 1.1 什么是JS表达式&#xff1a;能够进行赋值的操作 ▶ 正确 ▶ 错误示例 二、示例&#xff1a;2秒后&#xff0c;页面中 message 由 hello world 变成 hi vue ▶ 效果 三、原理&#xff1a;利用ES6的Proxy对象对底层进…

【方法】如何合并7z分卷压缩文件?

压缩7z文件时&#xff0c;设置分卷压缩可以更方便文件的传输、存储和管理&#xff0c;如果后续不需要分卷了&#xff0c;除了可以将分卷文件解压出来&#xff0c;再压缩成一个文件&#xff0c;还可以利用解压缩软件&#xff0c;直接合并分卷文件。 我们常用的7-Zip和WinRAR都可…