服务熔断(Hystrix)

服务雪崩

多个微服务之间调用的时候,假设微服务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.mzph.cn/news/239369.shtml

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

相关文章

c++打开网页

1.使用ShellExecute 效果图: 相关代码: void Open_url::on_pushButton_clicked() {QString path1 "explorer.exe";QString urlui->lineEdit->text();ShellExecute(NULL, L"open", path1.toStdWString().c_str(), url.toStdWString().c…

Python匹配文件模块的实战技巧

更多资料获取 📚 个人网站:ipengtao.com 在Python中,文件匹配是许多应用中常见的需求,例如文件管理、数据处理等。本文将深入探讨Python中用于文件匹配的模块,包括glob、fnmatch和os.path等,通过丰富的示例…

Keil5软件仿真 定时器互补通道 波形输出(Logic Analyzer)

步骤一:管脚配置确认。 ①配置定时器的管脚模式为复用推挽输出模式(GPIO_MODE_AF_PP)!!!,注意:复用开漏模式软件仿真时无波形。 步骤二:编译程序。 ①点击编译按钮。 …

(Mac上)使用Python进行matplotlib 画图时,中文显示不出来

【问题描述】 ①报错确缺失字体: ②使用matplotlib画图,中文字体显示不出来 【问题思考】 在网上搜了好多,关于使用python进行matplotlib画图字体显示不出来的,但是我试用了下,对我来说都没有。有些仅使用于windows系…

小型洗衣机什么牌子好又便宜?内衣裤洗衣机十大排名推荐

作为一个上班族,每天回到家中真的不愿意再动了,市面上也越来越多懒人福利神器,而内衣洗衣机可以称得上是人类最幸福的小家电,它不仅可以释放我们的双手,而且还比我们自己手洗得干净,功能和清洁力都比我们传…

Ubuntu 常用命令之 zip 命令用法介绍

📑Linux/Ubuntu 常用命令归类整理 Ubuntu系统下的zip命令是用来压缩文件的。这个命令可以将一个或多个文件或者目录压缩成一个.zip文件,也可以将整个目录树压缩成一个.zip文件。 zip命令的基本格式 zip [选项] [压缩文件名] [要压缩的文件或目录...]z…

选择移动订货系统源码的四大原因

移动订货系统需要选择源码支持的厂家,有以下四个原因,其中第四个是比较重要的,大家点个关注点个赞,我们接着往下看。 1.可自行定制:支持源码的移动订货系统可以根据企业的具体需求进行定制开发,满足企业特定…

电脑完全重装教程——原版系统镜像安装

注意事项 本教程会清除所有个人文件 请谨慎操作 请谨慎操作 请谨慎操作 前言 本教程是以系统安装U盘为介质进行系统重装操作,照着流程操作会清除整个硬盘里的文件,请考虑清楚哦~ 有些小伙伴可能随便在百度上找个WinPE作为启动盘就直接…

运维实施工程师计算机基础

目录 一.运维实施工程师需要具备的知识 1.1.运维工程师、实施工程师是啥? 1.2. 运维工程师、实施工程师做些啥? 1.3.运维工程师、实施工程师需要具备啥技能? 二.计算机的组成 2.1.简介 2.1.1.CPU(中央处理器) 2.…

25.BFD双向转发检查

BFD双向转发检查 链路故障检测工具,结合三层协议使故障检测更加快速 例如两台路由器之间加了一台二层设备 在修改优先级后,默认选择了下面那条优先级高的路由,R1 ping R2的时候是正常能ping通的 但是,当下面的路由出现故障后&a…

Mybatis3系列课程8-带参数查询

简介 上节课内容中讲解了查询全部, 不需要带条件查, 这节我们讲讲 带条件查询 目标 1. 带一个条件查询-基本数据类型 2.带两个条件查询-连个基本数据类型 3.带一个对象类型查询 为了实现目标, 我们要实现 按照主键 查询某个学生信息, 按照姓名和年级编号查询学生信息 按照学生…

解决GD32VF103编译printf无法打印 float

解决GD32VF103编译printf无法打印 float 在GD32VF103编译后,采用printf打印float变量时,总是无法显示,是因为编译时采用用newlib-nano库,但是这个库对printf做了优化,在eclipse的build配置use-newlib-nano的选项取消勾…

【Amazon 实验②】使用Amazon WAF做基础 Web Service 防护之自定义规则

文章目录 1. 自定义规则1.1 介绍 2. 实验步骤2.1 测试2.2 输出 上一篇章介绍了使用Amazon WAF做基础 Web Service 防护中的Web ACLs 配置 & AWS 托管规则的介绍和演示操作 【Amazon 实验①】使用Amazon WAF做基础 Web Service 防护,本篇章将继续介绍关于自定义…

Web 开发与移动应用程序开发 – 哪一种适合您的业务?

目录 Web 开发:释放浏览器的力量 1. 可访问性和跨平台兼容性: 2. 成本效益: 3. 内容交付和搜索引擎优化: 4.即时更新: 持续的网络维护: 移动应用程序开发:针对设备功能定制体验 1.增强用户体验&…

springboot+vue前后端分离的社区养老服务管理管理系统(有文档)

springbootvue前后端分离的社区养老服务管理管理系统。系统功能齐全,配置完成可运行,有文档,演示视频,配置说明,数据库文件,虚拟产品下单不退不换! 技术:springbootmybatisplusmysql…

微信小程序开发系列-02注册小程序

上一篇文章,创建了一个最小的小程序,但是,还有3个疑问没有弄清楚,还是基于demo1工程,这篇文章继续探索。 当前的目录结构是否是完备的呢?(虽然小程序可以运行起来)app.js文件内容还…

反序列化版本漏洞

laravel5.7反序列化漏洞 <?phpnamespace Illuminate\Foundation\Testing {class PendingCommand{public $test;protected $app;protected $command;protected $parameters;public function __construct($test, $app, $command, $parameters){$this->test $test; …

机器学习算法(12) — 集成技术(Boosting — Xgboost 分类)

一、说明 时间这是集成技术下的第 4 篇文章&#xff0c;如果您想了解有关集成技术的更多信息&#xff0c;您可以参考我的第 1 篇集成技术文章。 机器学习算法&#xff08;9&#xff09; - 集成技术&#xff08;装袋 - 随机森林分类器和...... 在这篇文章中&#xff0c;我将解释…

MD5的实现与“破解”

MD5的实现与“破解” 文章目录 MD5的实现与“破解”一、 概述二、 MD5简单介绍三、 MD5的实现四、 MD5的“破解”五、MD5的“破解”方法1. 暴力破解&#xff1a;穷举法&字典法2. 时间和空间的折中&#xff1a;哈希链表法&彩虹表法2.1. 哈希链表法的过程2.2. 哈希链表可…

WPF组合控件TreeView+DataGrid之DataGrid封装-粉丝专栏

wpf的功能非常强大&#xff0c;很多控件都是原生的&#xff0c;但是要使用TreeViewDataGrid的组合&#xff0c;就需要我们自己去封装实现。 我们需要的效果如图所示&#xff1a; 这2个图都是第三方控件自带的&#xff0c;并且都是收费使用。 现在我们就用原生的控件进行封装一…