幂等性总结

本文介绍了幂等性的概念及其在网络波动、MQ消息重复、用户重复点击等场景中的重要性。幂等性通常在持久层实现,文章提出了前端和后端的多种幂等性控制策略,包括按钮控制、token机制、数据库唯一索引、分布式锁和缓存队列等,旨在确保系统在高并发和分布式环境中的稳定性和准确性。
摘要由CSDN通过智能技术生成

一、概念:

幂等的的意思就是一个操作不会修改状态信息,并且每次操作的时候都返回同样的结果。即:做多次和做一次的效果是一样 的。

 二、使用场景

幂等性问题在我们开发过程中、高并发、分布式、微服务架构中随处可见的,具体举例以下几个经常遇到的场景

  • 网络波动

    因网络波动,可能会引起重复请求

  • MQ消息重复

       生产者已把消息发送到mq,在mq给生产者返回ack的时候网络中断,故生产者未收到确定信息,生产者认为消息未发送成功,但实际情况是,mq已成功接收到了消息,在网络重连后,生产者会重新发送刚才的消息,造成mq接收了重复的消息。

  • 用户重复点击

       用户在使用产品时,可能会误操作而触发多笔交易,或者因为长时间没有响应,而有意触发多笔交易。

  • 应用使用失败或超时重试机制

       为了考虑系统业务稳定性,开发人员一般设计系统时,会考虑失败了如何进行下一步操作或等待一定时间继续前面的动作的。

三、 哪一层实现幂等

    目前互联网技术架构基本都是分布式、微服务架构,层次分的也比较清晰,如

  • 第一层:APP、H5、PC

  • 第二层:负载均衡设备(Nginx)

  • 第三层:网关层(GateWay)

  • 第四层:业务层(Service)

  • 第五层:持久层(ORM)

  • 第六层:数据库层(DB)

        那到底在哪一层实现幂等呢?

        一般网关层主要的任务是路由转发、请求鉴权和身份认证、限流、跨域、流量监控、请求日志、ACL控制等。如果在网关层实现幂等性,那需要把业务代码写在网关层,这种做法一般在设计中是很少推荐的,所以不适合

        业务层主要是处理业务逻辑,对查询或新增的结果进行一些运算等,所以也不合适

持久层也叫数据访问层,和数据库打交道,这块不做幂等性的话,可能对数据产生一定影响,所以这一层是需要作品幂等性校验。

通过以上分析我们得知幂等性一般在持久层去实现。

 

四、解决方案

  • 前端幂等性控制

       1、按钮只能点击一次

  如用户点击查询或提交订单号,按钮变灰或页面显示loding状态。防止用户重复点击。

        2、token机制

产品允许重复提交,但要保证提交多次和一次产生的结果是一致的。

具体实现是进入页面时申请一个token,然后后面所有请求都带上这个token,根据token来避免重复请求。见下图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值