幂等性(Idempotency)
字数 681 2025-11-25 22:12:27
幂等性(Idempotency)
-
基本定义
幂等性是指对同一操作的多次执行所产生的影响与一次执行的影响相同。在互联网领域,这一概念主要应用于HTTP协议、API设计和分布式系统,例如发送相同的请求一次或多次,服务器状态变更结果一致。 -
HTTP方法中的幂等性
- 安全方法(如GET、HEAD):仅检索数据,不改变服务器状态,天然幂等。
- 幂等方法(如PUT、DELETE):
- PUT:多次上传同一资源,服务器最终状态与第一次相同(覆盖为相同内容)。
- DELETE:多次删除同一资源,结果均为“资源不存在”(第二次起返回404不影响状态)。
- 非幂等方法(如POST):多次提交同一订单可能创建多个订单(需额外设计保证幂等)。
- 幂等性的实现机制
- 唯一标识符:客户端在请求中附加唯一ID(如UUID),服务器通过缓存已处理的ID避免重复操作。
- 令牌机制:服务端生成一次性令牌,客户端首次提交后令牌失效,防止重复提交。
- 状态机约束:设计业务状态流转(如“已支付”状态不可重复处理),通过前置状态校验阻止重复操作。
- 分布式系统中的应用
在微服务或消息队列中,幂等性可应对网络重试或消息重复投递:
- 消息队列(如Kafka):消费者通过记录已处理消息的偏移量(offset)或内容哈希值去重。
- 数据库操作:使用
INSERT ON CONFLICT(SQL)或条件更新(如CAS)避免重复插入。
- 实际场景示例
- 支付接口:用户重复点击支付按钮时,通过订单ID幂等校验确保仅扣款一次。
- 文件上传:客户端重传同一文件时,服务端通过文件哈希值返回已有结果,避免存储冗余。