幂等性与无状态设计
分布式系统的请求会因为网络超时、进程崩溃、服务端处理超时等原因被重复发送。支付回调扣了两次钱?订单创建了两笔?库存被扣了两件?这些问题都源于同一个根源:请求不是幂等的。
幂等(Idempotent) 意味着一个操作执行一次和执行多次,效果是一样的。GET 是天然的幂等操作——读一万遍也不会改变资源状态。PUT 是幂等的——用相同的值覆盖,资源还是那个值。但 POST(创建订单)和 DELETE(删除资源)就不是天然的幂等——两次 POST 会创建两笔订单。
在分布式环境下,幂等性是系统容错的最后一道防线。消息队列的消费、HTTP 接口的重试、服务间调用的超时重试——所有这些场景都需要幂等保证。
无状态设计则是幂等性的架构基础。把状态(会话数据、临时计算结果)从服务节点转移到外部存储(Redis、数据库),每个服务节点都是「无状态」的,处理请求时可以随时被替换、扩容、缩容,而不影响业务正确性。
本模块将讲解幂等性的数学定义、HTTP 各方法的幂等性特征、以及如何在生产系统中实现幂等消费和幂等调用。