服务熔断(Hystrix)

news2025/2/1 9:05:28
服务雪崩

多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其他的微服务,这就是所谓的“扇出”,如果扇出的链路上某个微服务的调用响应时间过长,或者不可用,对微服务A的调用就会占用越来越多的系统资源,进而引起系统崩溃,所谓的“雪崩效应”。

image-20231222212445291

对于高流量的应用来说,单一的后端依赖可能会导致所有服务器上的所有资源都在几十秒内饱和。比失败更糟糕的是,这些应用程序还可能导致服务之间的延迟增加,备份队列,线程和其他系统资源紧张,导致整个系统发生更多的级联故障,这些都表示需要对故障和延迟进行隔离和管理,以达到单个依赖关系的失败而不影响整个应用程序或系统运行。

我们需要,弃车保帅!

什么是熔断?

熔断简单来说就是在单个服务出现问题,不可用时,为了避免引发更严重的问题,导致整个服务链路不可用的情况下,可以采用熔断的方式来避免。熔断一般情况下意味着服务的降级,可以理解为是一种异常兜底策略,需要服务的上游调用方来实现。

在访问量比较高的情况下,客户端访问A节点,A节点一个依赖的服务节点B出现延迟(或者不可用),这种情况下,无论是重试策略(重试3次)也好,或者超时策略(超过1S返回失败或者默认结果)也好,都会比正常请求消耗更多的资源,这时在流量高的场景有可能造成A服务资源被沾满,从而导致A服务其他接口也出现延迟或者不可用情况,再严重一些可能会出现雪崩,A服务依赖的上游也不可用,进而整个集群链路崩溃。

因此,服务异常时可以通过熔断的方式来进行快速的失败,避免后续流量继续请求到服务B,避免雪崩。

熔断更多的是指服务之间的熔断,熔断通常都会有恢复策略。

什么是降级?

降级,其实也是一种兜底策略,可以理解为主方案行不通了,换一个备用方案。比如,查询缓存失败,改为查询数据库,查询数据库也失败,返回“系统繁忙”给到用户,这种就是降级。再比如,A服务调用B服务,调用失败,返回“系统繁忙”也算降级,如果此时进行重试,那么可以叫“容错”。

降级其实有很多方案:

  1. 被动降级:服务不可用时,返回备用数据,或者提示文案。比如,广告推送,正常推送查询用户感兴趣的,如果服务不可用,改为推送默认广告。
  2. 主动降级:人为的把服务设置为不可用。比如双十一,将评论,收藏等功能主动降级为不可用,避免用户请求占用服务资源。一般通过预制的降级开关实现。收到客户端请求后,不会真的去请求评论,收藏服务,直接返回用户,功能不可用。
  3. 自动降级:通过预制的规则,自动的实现降级,自动实现恢复。比如,熔断导致的降级,限流触发降级,超时降级等。

自动降级与被动降级区别主要是:是否可以自动恢复。
被动降级强调的是,不受控制。可以理解为简单的if、else每次请求过来都会进行判断。
自动降级强调的是,自动化。可以理解服务出现问题,达到阈值条件时拒绝后续请求,同时感知服务状态,达到可用条件时,再允许后续请求。

服务熔断(Hystrix)

在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。熔断器的原理很简单,如同电力过载保护器。它可以实现快速失败,如果它在一段时间内侦测到许多类似的错误,会强迫其以后的多个调用快速失败,不再访问远程服务器,从而防止应用程序不断地尝试执行可能会失败的操作,使得应用程序继续执行而不用等待修正错误,或者浪费 CPU时间去等到长时间的超时产生。熔断器也可以使应用程序能够诊断错误是否已经修正,如果已经修正,应用程序会再次尝试调用操作。

image-20231222212216885

Hystrix 断路器机制

断路器很好理解, 当 Hystrix Command 请求后端服务失败数量超过一定比例(默认 50%), 断路器会切换到开路状态(Open). 这时所有请求会直接失败而不会发送到后端服务. 断路器保持在开路状态一段时间后(默认 5 秒), 自动切换到半开路状态(HALF-OPEN). 这时会判断下一次请求的返回情况, 如果请求成功, 断路器切回闭路状态(CLOSED), 否则重新切换到开路状态(OPEN). Hystrix 的断路器就像我们家庭电路中的保险丝, 一旦后端服务不可用, 断路器会直接切断请求链, 避免发送大量无效请求影响系统吞吐量, 并且断路器有自我检测并恢复的能力。

Hystrix 如何实现熔断

场景

服务调用者A,需要调用服务提供者B的接口。考虑到B服务如果出现超时不可用情况,要减轻对A服务的影响。比如:B服务接口响应时间超过1S,开启降级,提供 fall back方法(服务调用者自行根据业务创建该方法),返回默认信息(也可以默认失败),在B服务接口出现不稳定(10秒内调用20次失败率50%以上时,开启熔断,后续5秒的请求直接走降级fall back 方法 返回默认信息)

熔断的默认触发机制

使用Histrix 默认策略 10秒内 调用20次 失败率50%以上 触发熔断 默认熔断 5s

步骤

服务提供者

  1. 提供服务接口。
  2. 模拟超时失败。
  3. 启动服务

服务调用者

  1. 引入jar包。
  2. 开启熔断配置注解。
    1. 启动配Enable注解。@EnableCircuitBreaker
    2. 如果使用Fein 对Fein 需要开启Histrix 支持(yml 配置文件增加 feign.hystrix.enabled=true)
  3. 在调用服务提供者接口处进行配置。使用注解方式。
    1. @HystrixCommand
    2. 也可以使用默认的配置属性
  4. 创建与注解配置一致的fall back方法
    1. fall back 是作为一个降级的方法,我们也可以不使用降级。

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

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

相关文章

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于骑手优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.骑手优化算法4.实验参数设定5.算法结果6.…

Open3D 入门教程

文章目录 1、概述2、安装3、点云读写4、点云可视化 4.1、可视化单个点云4.2、同一窗口可视化多个点云4.3、 可视化的属性设置 5、k-d tree 与 Octree 5.1、k-d tree5.2、Octree 5.2.1、从点云中构建Octree5.2.2、从体素栅格中构建 Octree 6、点云滤波 6.1、体素下采样6.2、统计…

java.lang.IllegalStateException: Duplicate key

序言 最近监控扫描出我们项目的某些异常信息,报错java.lang.IllegalStateException: Duplicate key xxx,看到异常来自stream流,然后定位看了一下是某位同事的代码使用stream流把List转Map集合出现重复的key异常信息。List集合A对象来源于某个…

Python命名规范中的[单/双][前导/后缀]下划线小结

如图所示 出处 Single and Double Underscores in Python Names

「C/C++ 01」 深拷贝和浅拷贝

目录 一、概念 1. 浅拷贝 2. 深拷贝 3. 深浅拷贝问题 4. 总结 二、在C的类中实现深拷贝 1. 拷贝构造函数 中实现深拷贝 a. 自己开辟一个新空间,然后将内容拷贝到新空间 b. 借助构造函数来实现深拷贝 2. operator 中实现深拷贝 a. 自己开辟一个新空间,…

JAVA版的鸿鹄云商B2B2C:多商家入驻直播商城系统特性解析 商城免 费搭建

鸿鹄云商 b2b2c产品概述 【b2b2c平台】,以传统电商行业为基石,鸿鹄云商支持“商家入驻平台自营”多运营模式,积极打造“全新市场,全新 模式”企业级b2b2c电商平台,致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

pyqt5实现wget下载视频文件的进度条显示

简介: 最近在写一个项目,用到了wget下载视频,为了更好的视觉效果,所以使用pyqt5中QProgressBar来实现下载进度条。当视频开始下载就会弹出下载进度条,下载完成后进度条消失。效果如下图; 具体代码实现 : …

Sobit:将BRC20资产桥接到Solana ,加速铭文市场的火热

2023 年 1 月份后,比特币 Ordinals 协议出现后为铭文赛道的出现奠定了基础,它以聪为单位将比特币分成份,并在每一聪上攥刻不同的信息以达到非同质化资产的效果,而此后包括 BRC20 在内的诸多采用了 Ordinals 方案的应用不断面向市场…

生成式AI大模型对人类进化的影响

你是不是发现每天的工作都离不开ChatGPT之类的语言生成模型?离不开类似Midjourney的图像生成模型?离不开一些设计类的AI辅助工具?如果是,那说明你已经逐步被AI侵蚀了,你的创造力也正在逐渐下降,大模型正在剥…

使用通道和模式

通过通道、选择语句和最佳实践掌握 Go 中的并发编程 并发编程是构建高效和响应迅速的软件的强大范例。Go,也被称为 Golang,通过通道提供了一种健壮且优雅的解决方案来进行并发通信。在这篇文章中,我们将探讨通道的概念、它们在并发编程中的作…

Qt配置opencv,cmake编译参考笔记,已成功

Qt版本:Qt5.14.2 opencv:4.5.4(不要用4.5.5!!很坑别问我为什么知道) cmake:下的最新版本 前言:为什么非得要用cmake编译呢?跳过cmake不好吗? 之前用的opencv…

pickle反序列化

文章目录 基础知识pickle简介可序列化对象object.__reduce__() 函数 pickle过程详细解读opcode简介pickletools 漏洞利用利用思路如何手写opcode 工具pker实战例题[MTCTF 2022]easypickle[HZNUCTF 2023 preliminary]pickle 基础知识 pickle简介 与PHP类似,python也…

内存管理学习

内存管理 在计算系统中,通常存储空间分为两种:内部存储空间和外部存储空间。 内部存储空间通常访问速度比较快,能够按照变量地址随机访问,也就是我们通常所说的RAM(随机存储器),可以把它理解为…

两种方法解决win10开机慢,经验分享

方法一: 1、按快捷键“winR”打开 运行窗口。 2、这时候输入“msconfig”后 ,点击“确定”或者按“ENTER”键。 3、这时候会打开一个名为“系统配置”的窗口, 在“常规”选项框下 勾选“有选择的启动”下的“加载系统服务”和“加载启动项”。…

Python的环境搭建环境配置()

Python 环境搭建 一,下载Python 1.去官网 www.python.org 下载环境 2.如图点击Download 3.选择Windows 4.如图直接下载 5.直接勾选 6.后面就一直默认选项 Win11 安装目录 不能放在C盘的ProgramFIle路径下 二,测试环境是否安装成功 1.winR 输入cmd 2.输入python --versio…

[已解决] Ubuntu远程桌面闪退+登录显示“远程桌面由于数据加密错误 , 这个会话将结束“

两个月前,由于跑代码在Ubuntu配置环境,乱七八糟的下载了很多东西,导致了一系列问题..... 问题1 Ubuntu远程桌面闪退 实验室有两台服务器,IP后三位分别为141和142,其中141在输入密码后立即闪退,142可以正常…

110基于matlab的混合方法组合的极限学习机和稀疏表示进行分类

基于matlab的混合方法组合的极限学习机和稀疏表示进行分类。通过将极限学习机(ELM)和稀疏表示(SRC)结合到统一框架中,混合分类器具有快速测试(ELM的优点)的优点,且显示出显着的分类精…

华为鸿蒙开发适合哪些人学习?

随着鸿蒙系统的崛起,越来越多的人开始关注鸿蒙开发,并希望成为鸿蒙开发者。然而,鸿蒙开发并不适合所有人,那么哪些人最适合学习鸿蒙开发呢?本文将为您总结鸿蒙开发适合的人群。 一、具备编程基础的人 学习鸿蒙开发需要…

python报错A value is trying to be set on a copy of a slice

加入.copy()即可避免该报错提示 原代码: df5df4.drop_duplicates() print(df5.shape)df5[班型中文名称]df5[班型名称]-A print(df5.head()) 输出结果: 修改后代码: df5df4.drop_duplicates().copy() print(df5.shape)df5[班型中文名称]df…

MyBatis关联查询(三、多对多查询)

MyBatis关联查询(三、多对多查询) 需求:查询角色及角色赋予的用户信息。 分析:一个用户可以拥有多个角色,一个角色也可以赋予多个用户,用户和角色为双向的一对多关系,多对多关系其实我们看成是…