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

孤舟笔记 互联网常用框架篇二 Dubbo服务请求失败怎么处理?集群容错策略你用过几种

文章目录

    • 先说结论
    • Failover:换家店试试
    • Failfast:不行就算了
    • Failsafe:忘了这事
    • Failback:回头再说
    • Forking:同时点几家
    • Broadcast:通知所有人
    • 怎么选择
    • 回答技巧与点评
      • 加分回答
      • 面试官点评

个人网站

分布式系统中,服务调用失败是家常便饭——网络抖动、服务重启、机房故障……问题不是"会不会失败",而是"失败了怎么办"。Dubbo 提供了多种集群容错策略,面试官问这题,他想听的是:每种策略的原理是什么?适用什么场景?你项目里用的哪种?

先说结论

策略行为适用场景
Failover失败自动切换其他提供者重试读操作(默认)
Failfast失败立即报错非幂等写操作
Failsafe失败忽略,返回空结果日志等非关键操作
Failback失败自动记录,定时重发消息通知等最终一致场景
Forking并行调用多个,取最快返回实时性要求高的读操作
Broadcast逐个调用所有提供者通知所有节点更新缓存

一句话记住:Failover 是"换家店试试",Failfast 是"不行就算了",Failsafe 是"忘了这事",Failback 是"回头再说"

Failover:换家店试试

默认策略。调用失败后,自动切换到其他提供者重试。默认重试 2 次(共调用 3 次)。

@DubboReference(retries=2)// 👈 失败重试 2 次,总共调用 3 次privateUserServiceuserService;
dubbo:consumer:retries:2# 全局默认重试次数

就像你去餐厅点菜,第一家说"售完了",你自动换第二家点——总有一家能做。

注意:重试会带来延迟(每次超时等一段时间),也可能导致重复写入(如果是写操作)。所以 Failover只适合读操作,写操作必须用 Failfast。

Failfast:不行就算了

只调用一次,失败立即报错,不重试。

@DubboReference(cluster="failfast")// 👈 失败直接抛异常privateOrderServiceorderService;

适合非幂等写操作——创建订单、扣款等。重试可能导致重复下单,比失败更可怕。

就像医院挂号——挂不上就挂不上,你不能自动换家医院挂号,因为可能挂重了。

Failsafe:忘了这事

调用失败时忽略异常,返回空结果。

@DubboReference(cluster="failsafe")privateLogServicelogService;

适合非关键操作——写日志、发通知、更新缓存等。失败了不影响主流程。

就像你在饭馆吃饭,服务员忘了送小菜——无所谓,不影响吃主菜。

Failback:回头再说

调用失败时,记录请求到失败队列,定时重发

@DubboReference(cluster="failback")privateNotificationServicenotificationService;

适合最终一致性场景——消息通知、数据同步等。失败了不急着重试,后台慢慢补。

就像快递送不到——先放快递柜,回头再来取。Dubbo 默认每 5 秒重试一次失败记录。

注意:如果失败请求堆积太多,可能导致内存溢出。生产环境需监控失败队列长度。

Forking:同时点几家

同时调用多个提供者,取最快返回的那个

@DubboReference(cluster="forking",forks=3)// 👈 并行调用 3 个privateSearchServicesearchService;

适合实时性要求高的读操作——搜索引擎、推荐系统等。不追求所有结果,谁最快用谁。

就像你同时叫了 3 辆出租车,谁先到坐谁——快就是正义。

注意:并行调用会浪费服务器资源(3 次调用只有 1 次有效),forks 数量不宜过大。

Broadcast:通知所有人

逐个调用所有提供者,任意一个报错则报错。

@DubboReference(cluster="broadcast")privateCacheServicecacheService;

适合通知所有节点的场景——更新缓存、刷新配置等。每个节点都得通知到。

就像公司广播——通知所有部门开会,不能漏掉任何一个。

怎么选择

操作类型推荐策略原因
读操作Failover天然幂等,重试安全
写操作(非幂等)Failfast避免重复写入
非关键操作Failsafe失败不影响主流程
消息通知Failback最终一致即可
实时性要求高Forking并行取最快
全节点通知Broadcast每个都得通知
Dubbo 集群容错全景 六种策略 ├── Failover —— 失败重试(默认,适合读) ├── Failfast —— 快速失败(适合非幂等写) ├── Failsafe —— 安全失败(适合非关键操作) ├── Failback —— 失败重发(适合最终一致) ├── Forking —— 并行调用(适合实时读) └── Broadcast —— 广播调用(适合全节点通知) 选择原则 ├── 读操作 → Failover ├── 写操作 → Failfast ├── 非关键 → Failsafe ├── 通知类 → Failback / Broadcast └── 实时性 → Forking 核心风险 ├── Failover 重试导致写重复 ├── Failback 失败队列堆积 └── Forking 并行浪费资源 口诀:Failover换家试,Failfast直接报; Failsafe无所谓,Failback回头搞; Forking并行跑,Broadcast全员到; 读写区分最关键,幂等重试才安全

回答技巧与点评

标准回答:Dubbo 提供 6 种集群容错策略:Failover(失败自动重试,默认,适合读操作)、Failfast(快速失败,适合非幂等写操作)、Failsafe(忽略异常,适合非关键操作)、Failback(失败定时重发,适合最终一致场景)、Forking(并行调用取最快,适合实时读)、Broadcast(广播调用所有节点,适合通知类操作)。选择的关键在于区分读写操作和幂等性。

加分回答

  1. 幂等性是重试的前提:Failover 重试意味着同一请求可能被多次执行,只有读操作和幂等写操作才能安全重试。非幂等写操作(如下单、扣款)必须用 Failfast
  2. retries 的计算:retries=2 表示失败后重试 2 次,总共调用 3 次(1 次正常 + 2 次重试)。超时时间要合理设置,避免重试导致响应时间成倍增加
  3. 自定义容错策略:Dubbo 通过 SPI 机制支持自定义 Cluster 实现,你可以根据业务需求实现自己的容错逻辑,比如"失败后降级到缓存"的混合策略

面试官点评

这道题考的是你对分布式容错设计的理解。能说出 3-4 种策略算及格,高分的关键在于:讲清楚每种策略的适用场景和风险,特别是 Failover 重试可能导致写重复的问题。如果你能提到幂等性是重试的前提,说明你有实战经验。

原文阅读


内容有帮助?点赞、收藏、关注三连!评论区等你 💪

http://www.jsqmd.com/news/886680/

相关文章:

  • Docker 安装RocktMQ 和管理平台
  • 企业AI编程部署方案:2026最新权威8款AI编程工具必看清单
  • taotoken多模型广场如何在ubuntu开发中辅助模型选型
  • 冒泡排序:经典算法入门指南
  • Windows文件夹共享
  • 孤舟笔记 互联网常用框架篇三 Dubbo是如何动态感知服务下线的?注册中心和服务端双保险
  • 文本分类算法实战:从朴素贝叶斯到神经网络的全流程解析
  • 廊坊黄金回收5家机构测评——典典佳汇排名第一,资质正规、实力顶尖、诚信经营,让你的每一分黄金价值都稳稳落袋! - 诚鑫名品
  • 从苏格拉底的麦穗,到找对象的“37%法则”:数学如何教我们在不确定中做选择
  • 【Java基础|Stream流:从基础入门到实战进阶,告别繁琐循环!】
  • 腾讯 Marvis 初级使用教程——从安装到上手
  • 基于ConvNeXt与多元高斯损失的NLSE参数联合估计方法
  • 终极指南:3分钟学会用EldenRingSaveCopier轻松迁移艾尔登法环存档
  • 【收藏级・2026 版】小白 程序员必看!打通金融大模型落地最后一公里
  • “烟雾飘散方向不对”是Prompt问题还是模型缺陷?2024 Q2 Midjourney烟雾物理引擎更新深度逆向分析(含3大未公开--stylize影响因子)
  • 企业数据安全方案有哪些:2026年从风险评估到落地的完整指南 - 华旭传媒
  • AMD Ryzen终极调试指南:用SMUDebugTool解锁隐藏性能的完整教程
  • 为什么阴干的衣服那么臭?原因竟然是……
  • 现在不看就亏!2024Q2语音合成价格窗口期将关闭:3类企业正紧急切换供应商
  • 高效实现百度网盘链接解析:技术架构与API调用深度解析
  • DeepSeek模型上线前最后1道关卡:生产环境级评估 checklist(含GPU显存泄漏检测、长尾请求P99延迟验证)
  • RTX51 Tiny内存冲突与ISD51调试器解决方案
  • 不以0开头的偶数集和奇数集
  • 2026年金华为餐饮企业提供SAAS收银系统的服务商综合分析与适配指南 - 万事通达
  • C#与Unity学习(26_05_24)
  • 【DeepSeek性能测试黄金法则】:20年专家亲授5大避坑指南与实测调优参数清单
  • 全国奢侈品回收流程、价格范围及市场现状究竟怎样
  • WaveTools深度解析:鸣潮玩家的专业性能调优与数据管理实战指南
  • 16告警处理:如何避免告警风暴?
  • 【Claude数据库设计辅助实战指南】:20年DBA亲授AI时代建模新范式,错过再等三年?