Go微服务: 服务熔断hystrix原理

微服务熔断概述


  • go 微服务保稳三剑客: 熔断,限流,负载均衡
  • 微服务熔断(hystrix-go) 与 服务雪崩效应
    • 在服务里面,有服务A调用服务B, 会有依赖调用关系,同时服务C被B依赖
    • 如果依赖关系在生产环境中多的话,C挂了之后
    • 服务B原本正常,也会因为C导致不正常
    • 同时,A因为依赖B导致A也出了问题
    • 这时候,会级联反应,就是服务雪崩效应,如下图
  • 微服务熔断 (hystrix-go) 目标
    • 组织故障的连锁反应
    • 快速失败并迅速恢复
      • 它会走一个熔断的逻辑
      • 回退并优雅降级
    • 对出问题的微服务进行回退和降级
    • 提供近实时的监控与告警

微服务熔断 (hystrix-go) 使用原则

  • 防止任何单独的依赖耗尽资源(线程)
  • 过载立即切断并快速失败,防止排队
  • 尽可能提供回退来保护用户免受故障
  • 通过近实时的指标,监控和告警,确保故障被及时发现

微服务熔断 (hystrix-go) 的请求原理

  • 从开始,紫色箭头是正常状态下的流转
  • command 可以有多个
  • 第一步判断,熔断是否开启,是否开启的判断是通过 计数器
  • 计数器这块 它会有一个信息的收集,黄色箭头是信息的上报
  • 上报到计数器时,计数器会根据它的业务逻辑判断熔断是否开启
  • 第一步判断熔断是否开启会依赖计数器给出的最终结果
  • 如果熔断没有开启,即:否,需要判断熔断是否超过并发,计数器上会设置并发值
  • 超过并发,走callback逻辑,如果没超过走程序逻辑
  • 程序逻辑调用判断是否执行成功,如果执行成功,会鸡儿判断是否执行超时
  • 这些:是否否执行成功,是否超时,是否超过并发,这些都会把信息进行上报
  • 上报到计数器里面,当流程上的判断都是成功的时候,紫色箭头就是正常状态
  • 如果有异常,都会执行 callback, 这就是熔断器整个调用过程的整体架构

微服务熔断 (hystrix-go) 的熔断器状态

  • closed 关闭状态: 允许流量通过
  • open 打开状态: 不允许流量通过,即处于降级状态,走降级逻辑
  • half_open 半开状态,允许某些流量通过,如果出现超时,异常等情况
  • 将进入 open 状态,如果成功,那么将进入closed 状态

微服务熔断 (hystrix-go) 的重要字段

  • Timeout: 执行command的超时时间,默认时间是 1000 毫秒
  • MaxConcurrentRequests: 最大并发量,默认值是 10
  • SleepWindow: 熔断打开后多久进行再次尝试,默认值 5000 毫秒
  • RequestVolumeThreshold: 10s 内的请求量,默认值20,判断是否熔断
  • ErrorPercentThreshold: 熔断百分比,默认值50%, 超过启动熔断
  • 主要是这5个重要的参数

微服务熔断 (hystrix-go) 的熔断计数器

  • 每个 Command 都会有一个默认统计控制器
  • 默认的统计控制器 DefaultMetricCollector
  • 保存熔断器的所有状态,调用次数,失败次数,被拒绝次数等信息
  • 在10s的窗口中,有上述一个图
  • 有4个状态:成功,失败,超时,拒绝
  • 在每一秒的窗口中,熔断记录的状态,各个状态产生的计数
  • 当超过10s, 第一个会被销毁,后面会再添加一个,始终保持10个
  • 这个是计数的原理,有的是根据10s内的平均值进行判断的
  • 以上是它的实现方式

微服务熔断 (hystrix-go) 的熔断-上报状态信息原理

  • 信息上传就是通过断路器, 断路器执行完就上报信息
  • 上报信息之后就写入熔断器,写入的过程,就是每一秒建立一个bucket
  • 时间窗口默认是10s, 在这个时间内记录请求的状态
  • 根据这些请求的状态判断熔断是否开启
  • 熔断计数器主要是信息的上报,把每一秒的信息中统计成功,失败,超时和拒绝的状态
  • 记录完了之后,当你查询熔断是否需要开启时,它是根据这些信息进行判断的
  • 这个熔断器主要是这样的一个原理

微服务熔断 (hystrix-go) 的观测面板的安装

  • $ docker pull mlabouardy/hystrix-dashboard:latest
  • $ docker run --name hystrix-dashboard -d -p 9002:9002 mlabouardy/hystrix-dashboard:latest
  • 访问: http://localhost:9002/hystrix 到控制面板UI界面

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

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

相关文章

ins视频批量下载,instagram批量爬取视频信息

简介 Instagram 是目前最热门的社交媒体平台之一,拥有大量优质的视频内容。但是要逐一下载这些视频往往非常耗时。在这篇文章中,我们将介绍如何使用 Python 编写一个脚本,来实现 Instagram 视频的批量下载和信息爬取。 我们使用selenium获取目标用户的 HTML 源代码,并将其保存…

pyskl手势/动作识别的实现与pytorch cuda环境部署保姆教程

恭喜你,找到这篇不需要翻墙就能够成功部署的方法。在国内布置这个挺麻烦的,其他帖子会出现各种问题不能完全贯通。便宜你了。。 实话5年前我用1080训练过一个基于卷积和ltsm的手势识别,实话实说感觉比现在效果好。是因为现在的注意力都在tra…

贝叶斯网络

贝叶斯网络,又称为贝叶斯信念网络或贝叶斯网络模型,是一种概率图模型,由代表变量节点及连接这些节点的有向边构成。这种网络模型由Judea Pearl于1985年首次提出,用于表示和分析变量之间概率关系,从而进行不确定性推理。…

参会记录|全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS‘2024)

前言:2024年4月13日上午,我与实验室的诸位伙伴共聚江西南昌的玉泉岛大酒店,参加了为期一天半的全国多媒体取证暨第三届多媒体智能安全学术研讨会(MAS’2024)。本届学术研讨会由江西省计算机学会、江西省数字经济学会主…

自然语言处理: 第二十七章LLM训练超参数

前言: LLM微调的超参大致有如下内容,在本文中,我们针对这些参数进行解释 training_arguments TrainingArguments(output_dir"./results",per_device_train_batch_size4,per_device_eval_batch_size4,gradient_accumulation_steps2,optim"adamw_8bi…

【翻译】再见, Clean Code!

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 【翻译】再见, Clean Code!正文那是一个深夜次日早晨这只是一个阶段 【翻译】再见…

面试八股——JVM★

类加载 类加载器的定义 类加载器的类别 类装载的执行过程 类的装载过程: 加载: 验证: 准备: 这里设置初始值并不是传统意义的设置初始值(那个过程在初始化阶段)。 解析: 初始化: …

微信小程序|自定义弹窗组件

目录 引言小程序的流行和重要性自定义弹出组件作为提升用户体验和界面交互的有效方式什么是自定义弹出组件自定义弹出组件的概念弹出层组件在小程序中的作用和优势为什么需要自定义弹出组件现有的标准弹窗组件的局限性自定义弹出组件在解决这些问题上的优势

基于Springboot的校园闲置物品交易网站

基于SpringbootVue的校园闲置物品交易网站的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商品信息展示 商品资讯 后台管理 后台首页 用户管理 商品类型管…

《系统架构设计师教程(第2版)》第9章-软件可靠性基础知识-04-软件可靠性设计

文章目录 1. 容错设计技术1.1 恢复块设计1.2 N版本程序设计1.3 冗余设计 2. 检错技术3. 降低复杂度设计4. 系统配置中的容错技术4.1 双机热备技术4.1.1 双机热备模式4.1.2 双机互备模式4.1.3 双机双工 4.2 服务器集群技术 1. 容错设计技术 1.1 恢复块设计 恢复块设计 选择一组…

用于 SQLite 的异步 I/O 模块(二十四)

返回:SQLite—系列文章目录 上一篇:SQLite的PRAGMA 声明(二十三) 下一篇:SQLite、MySQL 和 PostgreSQL 数据库速度比较(本文阐述时间很早比较,不具有最新参考性)(二…

亚马逊、沃尔玛自养号测评技术解析:如何降低潜在风险

亚马逊等电商平台在全球范围内迅速扩张,竞争愈发激烈。为提升产品排名和销量,众多卖家选择采用自养号测评的策略。然而,自养号测评技术并非完美无缺,它存在着一定的技术局限性。由于缺乏对自养号原理及底层环境搭建的深入理解&…

华为配置通过流策略实现流量统计

配置通过流策略实现流量统计示例 组网图形 图1 配置流策略实现流量统计组网图 设备 接口 接口所属VLAN 对应的三层接口 IP地址 SwitchA GigabitEthernet1/0/1 VLAN 10 - - GigabitEthernet1/0/2 VLAN 20 - - GigabitEthernet1/0/3 VLAN 10、VLAN 20 - - S…

MapReduce原理简介

MapReduce 是一种用于处理大规模数据集的编程模型和计算框架,最初由 Google 提出,并被 Hadoop 等开源项目广泛应用。它主要包括两个阶段:Map 阶段和 Reduce 阶段。下面是 MapReduce 的基本原理: 图示不错 MapReduce 的基本原理&…

Java的Future机制详解

Java的Future机制详解 一、为什么出现Future机制二、Future的相关类图2.1 Future 接口2.2 FutureTask 类 三、FutureTask的使用方法四、FutureTask源码分析4.1 state字段4.2 其他变量4.4 构造函数4.5 run方法及其他 一、为什么出现Future机制 常见的两种创建线程的方式。一种是…

开源模型应用落地-chatglm3-6b-gradio-入门篇(七)

一、前言 早前的文章,我们都是通过输入命令的方式来使用Chatglm3-6b模型。现在,我们可以通过使用gradio,通过一个界面与模型进行交互。这样做可以减少重复加载模型和修改代码的麻烦, 让我们更方便地体验模型的效果。 二、术语 2.…

《剑指 Offer》专项突破版 - 面试题 110 : 所有路径(C++ 实现)

题目链接:所有路径 题目: 一个有向无环图由 n 个节点(标号从 0 到 n - 1,n > 2)组成,请找出从节点 0 到节点 n - 1 的所有路径。图用一个数组 graph 表示,数组的 graph[i] 包含所有从节点 …

组件与组件之间的传递-事件总线

两个组件之间的数据传递(属于非父子组件通讯) 当项目中只是两个组件的少量数据传递时使用事件总线这种方法会比较方便,但当遇到大量数据传递时推荐使用vuex 思路 组件与组件之间不能直接传递,这是候可以创建一个EventBus.js文件…

ELK日志分析系统之Zookeeper

一、Zookeeper简介 ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。分布式应用可以基于它实现更高级的服务,实现诸如同步服务、配置维护和集群管理或者命名的服务。 Zookeepe…

力扣:49. 字母异位词分组

知识点: 散列函数 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位: 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)key或H&a…