Skip to content

分布式幂等面试题:HTTP、MQ、任务、状态机与副作用

本页只放标准回答,完整状态模型、Demo和Runbook见幂等主线

问题标准回答原理页
幂等是什么同一业务意图重复执行,只产生一次业务效果,并返回与第一次相容的结果;它不阻止重复到达。定义
重复从哪里来HTTP超时重试、MQ至少一次、支付回调、调度补偿、用户连点、服务重启和CDC重放都会产生重复。重复来源
超时为什么不能直接重试超时只说明没按时得到结果,下游可能已提交但响应丢失;先按业务流水查询事实,再决定幂等重试或补偿。结果未知
幂等键怎样设计标识稳定业务意图并跨重试不变,包含合适租户/操作作用域;同Key还要保存请求摘要防止参数不同复用结果。幂等键摘要
traceId能当幂等键吗通常不能,traceId标识一次调用尝试或链路,重试可能变化;幂等键要标识业务意图。幂等键
幂等状态有哪些常见PROCESSING、SUCCESS、FAILED_RETRYABLE、FAILED_FINAL等;重复请求根据状态返回原结果、等待、接管或拒绝。状态模型
为什么先查后插不安全两个并发请求都可能查到不存在,再同时执行副作用;应先用唯一约束或条件更新原子抢占。竞态原子抢占
幂等记录和业务怎样原子同库时在一个本地事务中完成幂等占位、业务写入和结果记录;否则可能出现记录成功但业务失败或相反。同事务模式
PROCESSING卡住怎么办用ownerToken和lease标识处理者,过期后先查事实源,再补成功、条件接管或转人工,不能看到超时就直接重做。租约
HTTP接口怎样幂等客户端提供稳定Idempotency-Key,服务端原子抢占、校验摘要、执行事务并保存响应,重复请求复用结果。HTTP流程
支付回调怎样幂等校验签名和金额,以支付平台流水唯一约束,订单状态条件更新,已处理回调返回成功避免平台无限重试。支付回调
MQ消费者怎样幂等以consumerGroup+eventId唯一占位,业务写与消费结果同事务提交,之后ACK;ACK丢失重投时复用成功记录。MQ消费事务边界
Redis SETNX够不够只适合短时防抖;TTL、淘汰、故障切换以及Redis与数据库双写窗口都可能失效,关键业务要数据库约束。SETNX边界
分布式锁能替代幂等吗不能。锁可能过期、脑裂或误删,只控制并发入口;幂等还要吸收顺序和时间上重复。锁边界
定时任务怎样幂等使用业务周期+任务类型唯一键、状态条件更新、分片归属和结果记录,调度框架不保证Exactly Once。定时任务
幂等记录保留多久至少覆盖最大重试、消息保留、回调和补偿窗口;资金审计可能长期保留,过早清理会让旧重复重新生效。去重窗口
热点幂等键怎么办避免轮询风暴,使用请求合并、等待通知、状态查询限流和结果缓存,但最终状态仍以事实库为准。热点
线上重复执行怎么查按业务键聚合请求、幂等记录、数据库流水、MQ Attempt和外部副作用,确认是抢占竞态、租约接管还是ACK丢失。Runbook

本章小结

幂等面试应沿“稳定业务意图—原子抢占—同事务副作用—结果复用—过期恢复”回答。