← 每日面试题 学习看板

什么是最大努力通知?

面试题/02架构设计题/02分布式/02分布式事务/什么是最大努力通知?.md

面试记录 2026-10-19

题目:什么是最大努力通知?

难度:low

标签:arch/distributed/transaction, distributed/best-effort, difficulty/low

评分:⭐⭐⭐☆☆(3/5)

我的回答

最大努力通知是分布式事务中的一个支持,用于进行最终一致性的实现,主要是用于通过各种方式让通知尽可能的到达,但又不是无限制的重试;

对应的还有一些补偿操作,比如人工对账,计划任务补偿之类的

点评

优点:

不足:

补充:

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对"最弱一档最终一致"的定位、流程与边界,以及它与事务消息/本地消息表的区别。

知识点拆解:

  1. 定义:发送方尽最大努力把业务结果通知到接收方,允许失败,通过有限重试 + 对账兜底,不追求强一致。
  2. 典型流程:业务本地事务落库(含通知消息表)→ 通知服务异步发送 → 接收方处理并返回 ACK → 未 ACK 按递增间隔重试 N 次 → 超限告警/人工介入。
  3. 重试策略:次数上限 + 递增间隔 + 幂等键,避免无限重试打爆下游。
  4. 适用场景:支付结果通知、物流状态同步、第三方回调、积分/权益发放等弱一致场景。
  5. 边界:通知成功不代表业务成功,必须靠接收方幂等 + 双方对账收敛。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. "最大努力通知和本地消息表是什么关系?"
  1. "重试到上限还失败怎么办?"
  1. "为什么支付通知普遍用最大努力通知而不是强一致?"

第三部分:面试者参考回答

【一句话结论】

面试官您好,最大努力通知是最弱一档的最终一致方案,核心是"尽力通知 + 有限重试 + 对账兜底"。

【三点展开】

第一,它不是保证成功,而是保证通知动作尽力而为:业务先落库并记录通知消息,通知服务按递增间隔重试有限次数,对方 ACK 就结束。

第二,它必须配幂等和重试上限,否则重复通知会打爆下游,超限后转异常表、告警和人工对账。

第三,它适合支付结果、物流同步、第三方回调这类能接受最终一致的场景,不适合资金扣减本身。

【一句边界】

当然,如果要求"本地事务和消息发送"原子,那要用事务消息或本地消息表,而不是最大努力通知。