当前位置: 首页 > backend >正文

【八股消消乐】构建微服务架构体系—熔断恢复抖动优化

在这里插入图片描述

😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法等相关知识点,期待与你一同探索、学习、进步,一起卷起来叭!

目录

  • 题目
  • 答案
    • 熔断
    • 简历案例

题目

💬技术栈:微服务架构

🔍简历内容:针对强缓存依赖业务,独立定制熔断策略,保证了系统的高可用性。

🚩面试问:
(1)怎么判断微服务出现了问题?
(2)怎么知道微服务恢复了?


在这里插入图片描述

💡建议暂停思考10s,你有答案了嘛?如果你有不同题解,欢迎评论区留言、打卡。


答案

熔断

熔断:当微服务本身出现问题的时候,它会拒绝新的请求,直到微服务恢复。

在这里插入图片描述
策略制定:

(1)根据自己的业务来选择一些指标,代表这个服务器的健康程度。比如说一般可以考虑使用响应时间、错误率。

在这里插入图片描述

(2)考虑两个因素: 一是阈值如何选择;二是超过阈值之后,要不要持续一段时间才触发熔断。

  • 阈值如何选择:阈值可以比正常响应时间高一点
    在这里插入图片描述
  • 超过阈值之后,要不要持续一段时间才触发熔断在这里插入图片描述
    • 响应时间可能是偶发性地突然增长
    • 防止抖动在这里插入图片描述

抖动解决方案:控制流量,比如说按照 10%、20%、30%……逐步递增,而不是立刻恢复 100% 的流量。推荐通过客户端来控制这个流量,借助负载均衡来选择节点。

在这里插入图片描述
客户端控制整体流程:

  1. 服务端在触发熔断的时候,会返回一个代表熔断的错误。
  2. 客户端在收到这个错误之后,就会把这个服务端节点暂时挪出可用节点列表。后续所有的新请求都不会再打到这个触发了熔断的服务端节点上了。
  3. 客户端在等待一段时间后,逐步放开流量。
  4. 如果服务端正常处理了新来的请求,那么客户端就加大流量。
  5. 如果服务端再次返回了熔断响应,那么客户端就会再一次将这个节点挪出可用列表。
  6. 如此循环,直到服务端完全恢复正常,客户端也正常发送请求到该服务端节点。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简历案例

(1)指标:响应时间。

(2)阈值选择:根据业务情况来选择这个阈值。

  • 如果产品经理要求响应时间是1s,那么我会把阈值设定在1.2s。【多了0.2s的原因:留了余地,防止偶发性的响应时间变长的情况。
  • 如果响应时间超过1.2s,并且持续三十秒,就会触发熔断。【30s的原因:基于个人经验,然后解释一下过长或者过短的弊端就可以了
  • 在触发熔断的情况下,新请求会被拒绝,而已有的请求还是会被继续处理,直到服务恢复正常。【如何判断服务恢复正常:等待一段固定的时间,然后尝试逐渐放开流量。】

(3)问题:接口并发很高,对缓存的依赖度非常严重。如果Redis 崩溃了,会全部落到 MySQL 上,基本上会压垮 MySQL。

(4)方案:缓存崩溃。

(5)Redis 崩溃了,就会触发熔断。触发熔断后,就会额外开启一个线程(如果是Go就换成 Goroutine)持续不断地 ping Redis。

(6)恢复后,逐步放开流量。由客户端来控制这个流量。

在这里插入图片描述


往期精彩专栏内容,欢迎订阅:

🔗【八股消消乐】20250609:构建微服务架构体系—负载均衡算法如何优化
🔗【八股消消乐】20250608:构建微服务架构体系—服务注册与发现
🔗【八股消消乐】20250607:MySQL存储引擎InnoDB知识点汇总
🔗【八股消消乐】20250606:MySQL参数优化大汇总
🔗【八股消消乐】20250605:端午节产生的消费数据,如何分表分库?
🔗【八股消消乐】20250604:如何解决SQL线上死锁事故
🔗【八股消消乐】20250603:索引失效与优化方法总结
🔗【八股消消乐】20250512:慢SQL优化手段总结
🔗【八股消消乐】20250511:项目中如何排查内存持续上升问题
🔗【八股消消乐】20250510:项目中如何优化JVM内存分配?
🔗【八股消消乐】20250509:你在项目中如何优化垃圾回收机制?
🔗【八股消消乐】20250508:Java编译优化技术在项目中的应用
🔗【八股消消乐】20250507:你了解JVM内存模型吗?
🔗【八股消消乐】20250506:你是如何设置线程池大小?
🔗【八股消消乐】20250430:十分钟带背Duubo中大厂经典面试题
🔗【八股消消乐】20250429:你是如何在项目场景中选取最优并发容器?
🔗【八股消消乐】20250428:你是项目中如何优化多线程上下文切换?
🔗【八股消消乐】20250427:发送请求有遇到服务不可用吗?如何解决?

📌 [ 笔者 ]   文艺倾年
📃 [ 更新 ]   2025.6.10
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

在这里插入图片描述

http://www.xdnf.cn/news/13367.html

相关文章:

  • 认识 Python 【适合0基础】
  • 魔兽世界正式服插件与宏-敏锐盗贼实用宏探索(3)-起手奥义【袭】之突如其来
  • C++ Programming Language —— 第1章:核心语法
  • SpringBoot自动化部署实战
  • Python主动抛出异常详解:掌握raise关键字的艺术
  • 云原生核心技术 (6/12): K8s 从零到一:使用 Minikube/kind 在本地搭建你的第一个 K8s 集群
  • 基于STM32F103C8T6单片机双极性SPWM逆变(软件篇)
  • 软件定义汽车的转型之路已然开启
  • MH2213 32位Arm® Cortex®-M3 Core核心并内嵌闪存和SRAM
  • 模型上下文协议(MCP)实践指南
  • 医院系统源码核心功能开发探索:问诊、陪诊、预约挂号、电子处方
  • 华为仓颉语言初识:并发编程之同步机制(下)
  • 分布式ID最新最佳实践?UUIDv7介绍
  • 进程间通信详解(二):System V IPC 三件套全面解析
  • API网关是什么?原理、功能与架构应用全解析
  • 单位的oa系统能不能在家电脑登陆?办公网址在手机上怎么访问?
  • 如何xml序列化 和反序列化类中包含的类
  • tomcat的websocket协议升级。如何从报文交换变成全双工通信?session对象的注册和绑定?
  • nginx配置中有无‘‘/’’的区别
  • mybatis 关联映射---一对一关联映射
  • LAMP-Cloud与RuoYi-Cloud技术架构对比
  • 大模型驱动的具身智能: 发展与挑战--综述--中国电信人工智能研究院--2024.8.29
  • 风中低语:Linux 信号处理的艺术与实践
  • 新一代 Rust Web 框架的高性能之选
  • 利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
  • ubuntu-root密码遗忘重设方法
  • 校验枚举类类型的入参合法性的统一方案
  • 基于算法竞赛的c++编程(28)结构体的进阶应用
  • DP 1.4 to HDMI 2.1 (DSC) ,8k@60Hz
  • 【WebRTC-14】webrtc是如何创建视频的软/硬编码器?