外观
如何理解请求幂等与业务效果只发生一次?
项目版本说明
这些问答整合历史设计与实现资料;当前 main 分支 README 以工作包描述建设状态。具体能力、实验数据与设计目标的边界见项目状态与证据。
标准回答
幂等请求需要稳定键和规范化请求摘要。同一键、同一内容返回原操作或已有结果;同一键、不同内容应冲突。仅有一个 requestId 字段而没有唯一约束与事务检查,并不能阻止两个并发请求都创建记录。
任务层还要让重复 Commit 不产生重复权威写入。当前实现包含已成功任务的幂等返回和若干稳定结果 ID;正确性仍依赖数据库约束与相关状态在同一事务中提交。进程内 map 去重不能覆盖重启和多实例。
“恰好一次”必须限定效果和边界。系统可能重复计算或发送通知,但通过唯一身份使某个数据库业务结果只落地一次。外部模型费用、邮件或远端工具副作用不自动获得同样保证,需要各自幂等协议或补偿。
追问与回答
幂等键应该保留多久
覆盖客户端可重试窗口和业务对账需要,并说明过期后语义;过短可能重复执行,永久保存也有成本。
重复请求到来时原操作仍在运行
返回同一操作的当前状态或可查询标识,不能因为尚无最终结果就创建第二次操作。
易混淆点
- 把重试成功解释为整个分布式系统恰好执行了一次。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q156