探寻第一个 Idempotency Key 的诞生
The First Idempotency Key

受一篇寻找美国最佳免费面包文章的启发,我踏上了寻找软件史上第一个 Idempotency Key 的旅程。从 Stripe 的流行用法到 AWS 的 ClientToken,再到 IETF 的早期草案,甚至追溯到 2005 年的 POST Once Exactly 规范,我试图厘清这一分布式系统关键概念的起源。最终,目光落在了 1984 年 Birrell 和 Nelson 关于实现 RPC 的论文上,那里记录了最早的调用标识符概念。这场跨越数十年的技术考古,揭示了人类如何反复发明并完善这一保证“恰好一次”处理的核心机制。
在战争中,策略是避开敌人的强点,攻击其弱点。
- saltcured
有人可能会说这有点吹毛求疵,但我认为物理现实为我们提供了最早的幂等键,它们是特定系统中的自然键。某些效果之所以具有幂等性,是因为它们以收敛或提供互斥的方式处理物理现实。
鸽巢原理并不是给鸟的说明书,它只是描述了占位的现实。破壳齿会一直啄,但最多只能破开一个蛋壳。狗可能会绕圈,但最多只能占据一张床。
幂等性的真正价值在于真正的端到端。它关乎最终效果是否受控,而不是中间某次消息跳转。在我看来,将其局限于消息层的冲动往往是 misguided 的。这预设了其他层没有类似的故障模式。
如果你能从自然键和占位规则中引出所需的幂等性,系统会变得更加健壮。例如,REST 在创建请求前就能确定名称时,可以使创建操作幂等;或者当名称不被重复使用时,删除操作也是幂等的。
- reactordev
这里最大的误解是认为客户端或请求方负责生成密钥。其实不然。他们确实可以,但理想情况下,服务方返回一个带密钥的签名响应才是最佳方案。不过,客户端头部的密钥总比没有强。
在“发后即忘”的场景中,比如支付,由请求方生成确定性密钥是可以接受的。但在涉及交易或托管的场景中,最好向服务方请求密钥,以便服务方能进行编排。
不过我不是 CTO,只是个工程师。我可没法像他们那样,把糟糕的决策包装成“功能”,或者把微小的新修复吹嘘成行业的重大进步。
- jonhohle
剧透:美国最好的免费餐厅面包是华盛顿特区的 Le Diplomate 和费城的 Parc 提供的蔓越莓核桃面包。第二名令人惊讶地是 Red Lobster 的切达湾饼干,第三名是 Cheesecake Factory 的黑麦面包(我通常挺喜欢,但巧合的是,本周早些时候我觉得它有点不够味)。
我没法访问《大西洋月刊》,但我可能会把 Cracker Barrel 的饼干和玉米面包也算进去,不过我想那些可能不是免费的。