SpringCloud Hystrix服务熔断实例总结

SpringCloud Hystrix断路器-服务熔断与降级和HystrixDashboard
SpringCloud Hystrix服务降级实例总结

【1】服务熔断

熔断机制概述

熔断机制是应对雪崩效应的一种微服务链路保护机制。当扇出链路的某个微服务出错不可用或者响应时间太长时,会进行服务的降级,进而熔断该节点微服务的调用,快速返回错误的响应信息。

当检测到该节点微服务调用响应正常后,恢复调用链路。

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

关于服务熔断可以参考大神论文:https://martinfowler.com/bliki/CircuitBreaker.html

在这里插入图片描述

【2】服务降级和服务熔断区别

在Hystrix中,服务降级(Service Degradation)和服务熔断(Circuit Breaker)是两种不同的容错机制,它们分别用于处理不同的场景和问题。下面是它们的主要区别:

① 服务熔断 (Circuit Breaker)

服务熔断的概念源于电力工程中的断路器,它用于防止电路过载。在软件系统中,当检测到某个依赖服务出现问题时,断路器会“打开”,阻止进一步的请求到达故障服务,从而避免了请求的堆积和资源的无效消耗。一旦断路器打开,Hystrix会直接调用降级逻辑,而不是尝试调用故障服务,直到断路器再次关闭。

  • 触发原因:服务熔断通常是因为下游服务出现故障,比如响应时间过长、频繁失败或完全不可达。也就是当某服务调用失败达到一定次数或比例时,断路器会打开
  • 目的:保护调用者不受故障服务影响,防止调用者因为等待无响应的服务而浪费资源(如线程)。
  • 机制:当检测到故障模式时,熔断器将“打开”,直接拒绝后续的请求,而不是尝试调用可能失败的服务。这有助于避免故障传播,并且可以提供快速失败响应,让调用者可以立即知道调用失败。
  • 状态转换:断路器有三个状态:关闭(Closed)、打开(Open)和半开(Half-Open)。当故障消除一段时间后,断路器会进入半开状态,允许小部分请求尝试调用,如果成功,则关闭断路器,否则再次打开。

② 服务降级 (Service Degradation)

服务降级是在系统整体负荷过高或服务出现异常时,提供一种退而求其次的处理方式。它通常发生在系统资源紧张或为了防止系统过载的情况下。降级逻辑通常会提供一个静态的、预计算的或简化的响应,以代替完整服务的调用。

  • 触发原因:服务降级通常是在系统整体负荷较高或资源紧张时触发,旨在优先处理关键请求或减轻系统压力。
  • 目的:通过提供一个简化的或降级的服务版本,确保核心功能仍然可用,同时避免系统过载。
  • 机制:当系统检测到负载过高或其他降级条件时,会执行预先定义的降级逻辑,这通常涉及到提供一个静态的、预计算的或低质量的响应,而不是尝试调用完整的服务。
  • 代码侵入性:服务降级往往需要在应用层面上明确实现,例如编写降级逻辑或fallback方法,以便在正常服务无法满足时调用。

③ 总结

  • 服务熔断是一种自动化的故障隔离机制,用于快速响应故障服务调用,防止调用者线程池被耗尽。

  • 服务降级是根据系统状态动态调整服务级别的一种策略,用于在资源受限时提供基础服务,避免系统过载。

  • 服务降级每次都会先调用原服务方法,调用失败才会执行服务降级方法;服务熔断状态会直接调用服务降级方法。

在实践中,两者常常结合使用,以构建更具弹性和健壮性的分布式系统。Hystrix作为一个容错库,提供了这些机制的实现,允许开发者在微服务架构中更好地控制故障处理和资源管理。

【3】@HystrixCommand熔断实例

服务提供方的方法上使用@HystrixCommand进行配置,如下所示(在10s内的10次请求中如果失败超过6次进入服务熔断):

// 服务熔断
@HystrixCommand(fallbackMethod = "paymentInfo_Circuit",commandProperties = {@HystrixProperty(name="circuitBreaker.enabled",value = "true"),//是否开启断路器@HystrixProperty(name="circuitBreaker.requestVolumeThreshold",value = "10"),// 请求次数@HystrixProperty(name="circuitBreaker.sleepWindowInMilliseconds",value = "10000"),// 时间窗口期@HystrixProperty(name="circuitBreaker.errorThresholdPercentage",value = "60")// 失败率// 加起来就是在10s内的10次请求中如果失败超过6次进入服务熔断
})
public String paymentCircuitBreaker(@PathVariable("id") Integer id){if (id<0){throw new RuntimeException("id 不能为负数");}String serialNumber = IdUtil.simpleUUID();return "调用成功:"+serialNumber;
}public String paymentInfo_Circuit(Integer id){return "id不能为负数:"+id;
}

主启动类配置注解@EnableCircuitBreaker

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

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

相关文章

WWDC 2024前瞻:苹果如何用AI技术重塑iOS 18和Siri

苹果下周的全球开发者大会有望成为这家 iPhone 制造商历史上的关键时刻。在 WWDC 上&#xff0c;这家库比蒂诺科技巨头将展示如何选择将人工智能技术集成到其设备和软件中&#xff0c;包括通过与 OpenAI 的历史性合作伙伴关系。随着重大事件的临近&#xff0c;有关 iOS 18 及其…

AI大模型时代必须关注的数据库 DuckDB1.0 正式发布

开源数据库DuckDB1.0 经过内部6年的打磨&#xff0c;积累了30万行代码&#xff0c;1.8万star&#xff0c;2024.06.03号正式发布了1.0版本&#xff08;代号 Snow Duck&#xff09;。 我们新一代程序员&#xff0c;没能见证MySQL 1.0、PostgreSQL 1.0、Windows 1.0、Linux 1.0、…

flinksql 回撤流中主键发生变更的影响(group by中的值发生改变)

flinksql 回撤流中,主键发生变更的影响 1 什么是回撤流2 主键变更场景2.2 实践发生3 实践中发现的比较好的的实时数仓架构1 什么是回撤流 这篇文章主要谈论一个场景,简单来说: 首先我们来简单的说一下什么是回撤流,以及回撤流的底层原理,举个例子: 这个说的不是很清晰…

【吊打面试官系列】MySQL 中有哪几种锁?

大家好&#xff0c;我是锋哥。今天分享关于 【MySQL 中有哪几种锁&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; MySQL 中有哪几种锁&#xff1f; 1、表级锁&#xff1a;开销小&#xff0c;加锁快&#xff1b;不会出现死锁&#xff1b;锁定粒度大&#xff0c;…

TypeScript学习(一):开发环境搭建

官方文档搭建参考 https://learn.microsoft.com/zh-cn/training/modules/typescript-get-started/ 1.下载node.js https://nodejs.org/en/download 2.下载vscode https://code.visualstudio.com/ 3.在线ts的测试工具 https://www.typescriptlang.org/play/ 4.下载typescr…

H5即时通讯群聊源码无限建群创群/H5聊天系统聊天网站源码/H5语音聊天系统

源码介绍 支持自助建群 管理群 修改群资料支持自动登录 登陆成功可自助修改资料后台可查看群组聊天消息记录支持表情 动态表情 图片发布支持消息语音提醒

docker-compose教程

1. docker-compose是什么&#xff1f; 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目&#xff0c;定义和运行多个 Docker 容器的应用&#xff08;Defining and running multi-container Do…

月入30000的软件测试人员,简历是什么样子的?

我们都知道&#xff0c;简历是一个人进入职场的敲门砖。从某种层面来说&#xff0c;简历也像一个人的具象身份证&#xff0c;或者专业资格证。所以&#xff0c;一份简历的好坏&#xff0c;不仅关乎个人的“脸面”&#xff0c;更关乎你是不是一个有“含金量”的技术人员。 所以…

SVG画双色虚线并带有流动效果

实现效果 HTML代码 <svg xmlns"http://www.w3.org/2000/svg" viewBox"0 0 100 100" version"1.1"><polyline points"10,20 10,40 80,40 80,60" stroke-width"2" stroke-dasharray"10 10" fill"non…

C语言数据结构排序、插入排序、希尔排序(多组并排、一组排完排另一组)、选择排序、堆排序、冒泡排序等的介绍

文章目录 前言打印数组函数一、插入排序二、希尔排序三、选择排序四、堆排序五、冒泡排序总结 前言 C语言数据结构排序、插入排序、希尔排序&#xff08;多组并排、一组排完排另一组&#xff09;、选择排序、堆排序、冒泡排序等的介绍 打印数组函数 打印数组函数定义 // 打印…

如何以定投策略投资场外个股期权?

场外个股期权为投资者提供了一种灵活且富有潜力的投资工具。与传统的投资方式不同&#xff0c;场外个股期权以其低门槛、高灵活性和潜在的较高回报吸引了众多投资者。对于希望长期稳健增值的投资者来说&#xff0c;利用定投策略来投资场外个股期权是一个值得考虑的选项。 文章…

什么样的男士内裤比较好?按这个方法选男士内裤不会出错!

男士内裤作为日常穿着的重要服饰&#xff0c;其舒适度与卫生性对男士们的健康至关重要。随着时代的变迁&#xff0c;男士内裤的款式与材质也日益丰富多样&#xff0c;为男士们提供了更多选择。 目前市场上&#xff0c;男士内裤主要分为三角、平角和四角三大类别。其中&#xf…

结构体+结构体内存对齐+结构体实现位段

结构体内存对齐实现位段 一.结构体1.结构体的声明2.结构体变量成员访问操作符3.结构体传参4.匿名结构体5.结构的自引用 二.结构体内存对齐1.对齐规则2.为什么存在内存对齐&#xff1f;3.修改默认对齐数 三.结构体实现位段1.什么是位段2.位段的内存分配3.位段的跨平台问题4.位段…

帮助客服高效工作的快捷回复软件

在繁忙的客服工作中&#xff0c;对于客服团队来说&#xff0c;每天面对大量的客户咨询&#xff0c;如何快速、准确地回应每一位客户的需求&#xff0c;成为了他们日常工作中的一大挑战。而快捷回复软件的出现&#xff0c;无疑是客服人员的福音。今天&#xff0c;我要向大家介绍…

MySQL 关键特性一:插入缓冲、双写缓冲

前言 ​ 本文主要介绍 mysql 的几大特性之几&#xff0c;如&#xff1a;双写缓冲和插入缓存。 双写缓冲 基本概念 ​ 双写缓冲&#xff08;doublewrite buffer&#xff09;是MySQL/InnoDB中用于支持原子页面更新的一种机制。在传统的数据库系统中&#xff0c;为了保证数据的…

Android Dialog使用汇总

Dialog分类 AlertDialog Dialog 类是对话框的基类&#xff0c;官方建议我们不要直接实例化它&#xff0c;而是使用其子类来获取实例。AlertDialog是系统提供的一个直接子类&#xff0c;它能帮助我们快速构建出不同类型的弹窗。接下来就看下各种类型弹窗的使用。 1、普通对话框…

wpf工程中加入Hardcodet.NotifyIcon.Wpf生成托盘

1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。 2、在App.xaml中创建托盘界面&#xff0c;代码是写在 App.xaml 里面 注意在application中一定要加入这一行代码&#xff1a; xmlns:tb"http://www.hardcodet.net/taskbar" 然后在<Application.R…

html 使用svg矢量图时无法 调整宽高问题解决,不能像图片一样设置宽高比例问题

引入的路径后加 #svgView(preserveAspectRatio(none)) 具体代码如下 修改前 <img src"/assets/svgs/full_screen_full.svg" class"im"> 修改后 <img src"/assets/svgs/full_screen_full.svg#svgView(preserveAspectRatio(none))" cla…

免费注册US.KG域名支持接入CF

注册地址&#xff1a; https://register.us.kg/auth/register 号码和地址我是随便填的&#xff0c;不知道对以后有没有影响 收到激活邮件&#xff0c;可能在垃圾箱里 接下来是有个KYC验证&#xff0c;需要填写信息和上传KYC照片&#xff0c;我也是乱填的和乱上传的。可以去找…

ERPNext - 用Python打造您的企业资源规划解决方案

文章目录 ERPNext - 用Python打造您的企业资源规划解决方案第一部分&#xff1a;背景第二部分&#xff1a;ERPNext是什么&#xff1f;第三部分&#xff1a;如何安装ERPNext&#xff1f;第四部分&#xff1a;ERPNext基本使用方法第五部分&#xff1a;场景应用示例第六部分&#…