【八股消消乐】构建微服务架构体系—熔断恢复抖动优化
😊你好,我是小航,一个正在变秃、变强的文艺倾年。
🔔本专栏《八股消消乐》旨在记录个人所背的八股文,包括Java/Go开发、Vue开发、系统架构、大模型开发、具身智能、机器学习、深度学习、力扣算法
等相关知识点,期待与你一同探索、学习、进步,一起卷起来叭!
目录
- 题目
- 答案
- 熔断
- 简历案例
题目
💬技术栈:微服务架构
🔍简历内容:针对强缓存依赖业务,独立定制熔断策略,保证了系统的高可用性。
🚩面试问:
(1)怎么判断微服务出现了问题?
(2)怎么知道微服务恢复了?
💡建议暂停思考10s,你有答案了嘛?如果你有不同题解,欢迎评论区留言、打卡。
答案
熔断
熔断:当微服务本身出现问题的时候,它会拒绝新的请求,直到微服务恢复。
策略制定:
(1)根据自己的业务来选择一些指标
,代表这个服务器的健康程度。比如说一般可以考虑使用响应时间、错误率。
(2)考虑两个因素: 一是阈值如何选择;二是超过阈值之后,要不要持续一段时间才触发熔断。
- 阈值如何选择:阈值可以比正常响应时间高一点
- 超过阈值之后,要不要持续一段时间才触发熔断
- 响应时间可能是偶发性地突然增长
- 防止抖动
抖动解决方案:控制流量,比如说按照 10%、20%、30%……逐步递增,而不是立刻恢复 100% 的流量。推荐通过客户端来控制这个流量
,借助负载均衡来选择节点。
客户端控制整体流程:
- 服务端在触发熔断的时候,会返回一个代表熔断的错误。
- 客户端在收到这个错误之后,就会把这个服务端节点暂时挪出可用节点列表。后续所有的新请求都不会再打到这个触发了熔断的服务端节点上了。
- 客户端在等待一段时间后,逐步放开流量。
- 如果服务端正常处理了新来的请求,那么客户端就加大流量。
- 如果服务端再次返回了熔断响应,那么客户端就会再一次将这个节点挪出可用列表。
- 如此循环,直到服务端完全恢复正常,客户端也正常发送请求到该服务端节点。
简历案例
(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
❌ [ 勘误 ] /* 暂无 */
📜 [ 声明 ] 由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!