目录
定义:
幂等操作是指对某个操作进行多次执行,其结果与执行一次的结果相同。这一特性在分布式系统和网络服务中非常重要,尤其是在处理请求失败、重试或并发操作时。
幂等操作的特点:
-
重复执行无副作用:无论调用多少次,操作的结果都是一致的。例如,向数据库插入相同的记录时,如果使用唯一约束,后续的插入将不会影响已有记录。
-
常见的幂等 HTTP 方法:
-
GET:获取资源,多次请求相同的资源不会改变其状态。
-
PUT:更新资源,多次更新同一资源到相同状态,不会产生副作用。
-
DELETE:删除资源,如果资源已经被删除,再次删除操作不会产生不同的结果(通常返回404)。
应用场景:
一般对数据要求比较高的场景,如:金钱交易、数据一致性至关重要的业务场景:
-
在线支付:当用户发起支付请求时,避免重复扣款。
-
银行交易:确保同一笔交易不会因网络重试等原因被执行多次。
-
票务系统:在线购票平台在用户购票时,检查所选座位是否已被重复预订。
-
通信服务:如短信或通话服务,系统会检查是否已为相同内容的请求计费。
-
任务调度:在定时任务或批处理系统
-
用户注册:防止因重复提交表单而导致用户信息被创建多次。
如何产生幂等问题?
产生幂等性问题的原因主要有:
-
网络请求重试:网络波动或超时,客户端可能会重复发送相同的请求。
-
用户界面重复提交:用户在用户界面上可能会不小心重复点击按钮,导致相同的请求被发送多次。
-
消息队列重试机制:使用消息队列(如Kafka、RabbitMQ)时,消息可能会被重复消费。
-
数据库并发操作:数据库的插入、更新和删除操作多个事务同时修改同一条记录,而没有使用适当的锁机制或事务隔离级别。
-
外部系统API接口重试:对外提供的API接口可能由于调用方的重试逻辑,导致数据库操作被重复调用。
-
其它......
注意事项:
- 尽管幂等性可以减少错误和不一致性,但在设计分布式系统时,仍需考虑性能、可扩展性以及如何处理非幂等操作。
- 通过实现幂等性,可以提高分布式系统的健壮性和可靠性,从而确保用户体验的一致性。
实现方式:
大致可以分为以下几大类