架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 6616|回复: 1

接口幂等性问题

[复制链接]
发表于 2018-12-4 13:29:37 | 显示全部楼层 |阅读模式
【问题描述】
用户在使用APP的时候,页面非常的卡顿,就会随便狂点,由于接口没有做重复提交,会出现好几个相同的请求,在service层,一个线程没有insert完成,另一个线程一查,空的。于是也插入一条进来。原本每个人一条的,某个业务员出现了三条,导致业务逻辑错误。对于恶意提交的处理,在前端部分是可以搞定,在后端部分也可以有成熟的解决方案的。

【解决办法】 1、使用唯一性约束解决事务的幂等性问题,设置唯一性约束,如果出现重复提交的场景,在数据库层面会抛出唯一性约束的异常,业务逻辑不会被破坏。多个字段的组成的唯一性约束也可以。
http://www.caosh.me/be-tech/idempotence-using-unique-key/

上面是在数据库层面做防重复设置。

2、在代码层面实现防重复设置。很多时候说,通过数据库的唯一性约束会影响数据插入的效率,因为每次插入的时候,在数据库层面都要做一次判断。所以就从代码层面上进行判断,代码层面常用的就是先select再insert,但是如果高并发场景下, 还是会出现重复提交的情况。可以给逻辑代码加上同步锁synchronized,这样在高并发场景下,先select 再insert是生效的。但是效率不高,并行变成串行了。 可以使用DCL锁机制。(有没有发现跟单例模式下创建单一对象采用的方法很像,先判断对象是否存在,如果不存在就创建,否则不创建),自然DCL锁机制上,效率更高。

#分布式锁
还可以使用分布式锁来解决,常用的有Redis和Zookeeper。 这里讲解如何使用Redis实现分布式锁。
Redis中存在setNx命令操作,如果不存在就set值,并且返回1。存在就不set,并且返回0。
利用了Redis单线程特性,把高并发的场景,通过消息队列给变成串行的。
不过分布式锁有坑,需要注意。
https://www.cnblogs.com/austinspark-jessylu/p/8043726.html
3、mvcc机制?

3.1 什么是MVCC机制
MVCC是一种多版本并发控制机制。

3.2 能够解决什么问题
锁机制可以控制并发操作,但是其系统开销较大,而使用MVCC可以在大多数情况下代替行级锁,能够降低其系统开销,提高性能。

https://blog.csdn.net/whoamiyang/article/details/51901888

4、消息中也存在幂等性问题

比方说消息的重复消费,如何防止?

在MQ中消息中间件中,这些一定要弄懂,弄透的。




上一篇:美发 学美发的进来看看
下一篇:育儿故事视频 育儿故事音频 育儿故事绘本 育儿知识大全
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2021-3-17 10:27:09 | 显示全部楼层
幂等在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-19 19:17

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表