文章目录
- 幂等性
- 什么场景需要幂等设计?
- 产生幂等性的原因
- 解决重复操作,实现幂等性
幂等性
接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如:公交车刷卡,用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。因此,当你重复刷卡时,会提示:刷码重复。
什么场景需要幂等设计?
一般对数据要求比较高的场景,如:金钱交易、数据一致性至关重要的业务场景:
在线支付:当用户发起支付请求时,账户要避免重复扣款。
银行交易:确保同一笔交易不会因网络重试等原因被执行多次。
票务系统:在线购票平台在用户购票时,检查所选座位是否已被重复预订。
通信服务:如短信或通话服务,系统会检查是否已为相同内容的请求计费。
任务调度:在定时任务或批处理系统中,确保不会因为任务重启或重试而重复执行相同的操作。
用户注册:防止因重复提交表单而导致用户信息被创建多次。
产生幂等性的原因
1.网络问题:
在分布式系统中,由于网络延迟或不稳定,可能会导致请求被重复发送。
2.客户端重试:
客户端可能会因为各种原因(如超时、错误等)重试请求。
3.服务端重试:
服务端在处理请求时,可能会因为内部错误或依赖服务的问题而重试操作。
4.系统容错:
为了提高系统的容错性,系统设计时会考虑在失败时重试操作。
5.并发控制:
在多线程或多进程环境中,为了避免并发导致的数据不一致问题,需要保证操作的幂等性。
6.事务管理:
在事务处理中,为了保证事务的原子性,需要确保事务中的操作是幂等的。
7.缓存一致性:
在使用缓存系统时,为了保证缓存与数据库之间的一致性,缓存更新操作需要是幂等的。
8.分布式缓存:
分布式缓存中的节点可能会重复接收到相同的更新请求,需要保证操作的幂等性以避免数据不一致。
9.消息队列:
消息队列中的消费者可能会因为各种原因重消费消息,需要保证消息处理的幂等性。
10.负载均衡:
在负载均衡系统中,同一个请求可能会被分配到不同的处理节点,需要保证处理逻辑的幂等性。
11.服务降级:
在服务降级策略中,为了保证核心业务的可用性,可能会重复执行某些操作。
12.用户行为:
用户可能会不小心重复提交表单或点击按钮,需要保证系统的响应是幂等的。
14。第三方集成:
在与第三方服务集成时,第三方服务可能会重复发送相同的请求。
15.定时任务:
定时任务可能会因为调度问题而重复执行。
解决重复操作,实现幂等性
判断当前的token是否存在,存在业务继续,不存在,业务终端,表示重复提交。
2.唯一事务ID:
为每个事务或操作分配一个全局唯一的ID,使用此ID来识别和防止重复的事务。
账户操作,对同一笔操作,我们用流水来做唯一标识存到数据库中。
trace:唯一主键,业务线用uuid或者雪花算法生成
3.检查重复请求:
在执行操作之前,检查请求是否已经被处理过,例如,通过查找数据库中的记录或检查缓存中的标记。
4.状态模式:
使用状态模式来管理对象的状态,确保对象在某个状态下只能执行特定的操作。
我们只操作状态为初始的,执行完成后,将状态更新为已完成。
5.乐观锁:
使用版本号或时间戳来实现乐观锁,确保在读取和更新数据时,数据没有被其他事务修改。
5.悲观锁:
在操作执行期间使用悲观锁来锁定涉及的资源,防止其他操作同时修改同一资源。
6.分布式锁:
使用分布式锁来确保跨多个节点的操作幂等性。
7.消息队列的幂等性:
如果使用消息队列,确保消息消费者能够处理重复的消息,例如通过检查消息的唯一标识符。
8.操作重试策略:
设计重试机制时,确保操作是幂等的,即使重试也不会改变结果。
9.补偿事务:
在分布式事务中,如果操作失败,执行补偿操作(如撤销或回滚)以恢复到原始状态。
10.幂等性存储:
使用幂等性存储系统,如某些NoSQL数据库,它们支持幂等性写入操作。
11.业务逻辑保证:
在业务逻辑层面确保操作的幂等性,例如,通过检查业务实体的特定条件是否满足。
12.限流和降级:
在系统压力过大时,通过限流和降级策略来控制操作的执行,避免因重复操作导致的系统过载。
13.监控和报警:
实施监控机制,对操作的执行进行监控,并在检测到异常时触发报警。
14.事务性消息:
使用支持事务性消息的中间件,确保消息发送和处理的原子性。
15.最终一致性:
在分布式系统中,接受最终一致性模型,通过事件驱动或补偿机制来达到最终的一致状态。
16.服务编排:
使用服务编排工具管理分布式操作,确保幂等性。
17.缓存机制:
利用缓存来减少对数据库的直接访问,缓存可以存储操作的状态或结果,以避免重复计算。
18.API设计:
设计API时,确保操作的幂等性,例如通过使用HTTP的GET、PUT和DELETE方法。
19.数据一致性:
通过事务管理、日志记录、数据校验等手段,确保数据的一致性。
20.用户界面:
在用户界面层面,防止用户重复提交表单或点击按钮。