幂等性:为什么重复执行不应继续改变结果?

幂等性:为什么重复执行不应继续改变结果?

幂等性描述一种操作:执行一次以后,再执行同样的操作,目标结果不再改变。系统把一份文档“设为已归档”时,网络若没有及时返回确认,客户端可能重试。第一次已成功,第二次仍只是已归档,而不会产生第二份文档,这个状态转换就是幂等的。

它不等于操作毫无副作用。每次请求仍可能留下日志、占用资源或发送通知;幂等性只要求我们所关心的目标状态相同。它也不同于可逆性:可逆性问能否回到先前状态;幂等性问重复同一动作会不会继续把状态推远。可交换性则比较两个不同操作调换顺序后的结果。

幂等性重要,是因为现实中的消息会延迟、确认会丢失,人常常无法判断一次操作究竟失败了,还是已经成功但没有回音。让关键命令可以安全重试,系统便不必用一次通信的完美可靠来换取一致。它保存的不是“只做一次”,而是“即使多做,目标结果也只有一个”。


了解 Geoffrey Chen 的更多信息

订阅后即可通过电子邮件收到最新文章。