分布式专题——接口幂等性实战
文章目录
- 1、接口设计与重试机制引起的问题。
- 2、什么是幂等性?
- 3、什么情况需要幂等性?
- 4、业务场景?
- 5、幂等性设计的核心思想。
- 6、如何实现接口幂等?
- 7、select,delete,insert,update和混合操作的接口幂等性。
- 8、Delete操作的幂等性
- 9、Update操作的幂等性
- 10、Insert操作的幂等性
- 11、混合操作的幂等性
注意:接口幂等性根据业务决定,不要盲目使用
1、接口设计与重试机制引起的问题。
1、提交订单按钮如何防止重复提交?
2、表单录入页如何防止重复提交
3、微服务接口,客户端重试时,会对业务数据产生影响吗?
2、什么是幂等性?
幂等性的公式:f(f(x))=f(x)
- 幂等元素运行多次,还等于它原来的运行结果
- 在系统中,一个接口运行多次,与运行一次的效果是一致的
3、什么情况需要幂等性?
- 重复提交
- 接口重试
- 前端操作
4、业务场景?
- 用户多次点击提交订单,后台应该只生成一个订单,不应该产生多个订单,保证订单的唯一
- 支付时,由于网络问题重复,应该只扣一次钱
5、幂等性设计的核心思想。
- 通过唯一的业务单号保证幂等。
6、如何实现接口幂等?
- 非并发情况下,查询业务单号有没有操作过,没有则执行操作
- 并发操作下,整个过程加锁
7、select,delete,insert,update和混合操作的接口幂等性。
Select:不会对业务数据有影响,天然幂等
Delete:第一次已经删除,第二次也不会有影响
Insert:没有唯一业务单号,使用Token保证幂等
Update:更新操作传入版本号,通过乐观锁实现幂等性
混合操作:找到操作的唯一业务单号,有则可使用分布式锁,无则可以通过Token保证幂等。
8、Delete操作的幂等性
- 根据唯一业务号
- 第一次删除时,已将数据删除
- 第二次再次执行时,由于找不到记录,所以返回的结果是0,对业务数据没有影响。可在删除前进行数据的查询。
- 删除操作没有唯一业务号,则要看具体的业务需求
- 列如:删除所有审核未通过的商品
- 在第一次执行,将所有未通过审核的商品删除。
- 在第二次执行前,又有新的商品未审核通过
- 执行第二次删除操作,新的未审核通过的商品要不要删除?(这个)
- 列如:删除所有审核未通过的商品
9、Update操作的幂等性
- 根据唯一业务号去更新数据
- 用户查询出要更新的数据,系统将数据返回页面,将数据版本号放入隐藏域
- 用户更新数据,点击提交,将版本号一起提交给后台
- 后台使用版本号作为更新条件
update table set version=version+1 … where id=xxx and version=${version} - 使用乐观锁与update行锁,保证幂等
- 更新操作没有唯一业务号,可使用Token机制
10、Insert操作的幂等性
- 有唯一业务号的insert操作,列如:秒杀,商品ID+用户ID
- 可通过分布式锁,保证接口幂等
- 业务执行完成后,不进行锁释放,让其过期自动释放
- 没有唯一业务ID的Insert操作,比如用户注册,点击多次
- 使用Token机制,保证幂等性
- 进入到注册页时,后台统一生成Token,返回前端隐藏域中
- 用户在页面点击提交时,将Token一同传入后台
- 使用Token获取分布式锁,完成Insert操作
- 执行成功后,不释放锁,等待过期自动释放
11、混合操作的幂等性
- 混合操作,一个接口包含多种操作
- 通用可以使用token机制
代码实现:https://gitee.com/zhouzhz/java-system-learn/tree/master/%E5%88%86%E5%B8%83%E5%BC%8F%E4%B8%93%E9%A2%98/%E5%88%86%E5%B8%83%E5%BC%8F%E5%B9%82%E7%AD%89%E6%80%A7/idempotent
分布式专题——接口幂等性实战相关推荐
- SpringBoot自定义注解+AOP+redis实现防接口幂等性重复提交,从概念到实战
一.前言 在面试中,经常会有一道经典面试题,那就是:怎么防止接口重复提交? 小编也是背过的,好几种方式,但是一直没有实战过,做多了管理系统,发现这个事情真的没有过多的重视. 最近在测试过程中,发现了多 ...
- 分布式接口幂等性、分布式限流总结整理
- 1 - 文章目录 一.接口幂等性 1.Update操作的幂等性 1)根据唯一业务号去更新数据 2.使用Token机制,保证update.insert操作的幂等性 1)没有唯一业务号的update与 ...
- Spring Boot + Redis 实现接口幂等性 | 分布式开发必知!
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 来源:http://tinyurl.com/y5k2sx5t >>阿里云8月最新 ...
- 接口幂等性的设计之————redis分布式锁的应用
接口幂等性的设计之----redis分布式锁的应用 在集群分布式机器部署的前提下,接口在相同数据高并发的情况下如果没有唯一索引的情况下,可能会有一些问题. 比如: 插入或更新商品的接口,如果没有则插入 ...
- redis 判断存在性_实战 | springboot+redis+拦截器 实现接口幂等性校验
来源:https://www.jianshu.com/p/6189275403ed 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能 ...
- 分布式接口幂等性、分布式限流:Guava 、nginx和lua限流
点击关注公众号,实用技术文章及时了解 一.接口幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用.举个最简单的例子,那就是支付,用户购买商品 ...
- 如何优雅的实现分布式接口幂等性、分布式限流(荣耀典藏版)
目录 一.接口幂等性 1.Update操作的幂等性 2.使用Token机制,保证update.insert操作的幂等性 二.分布式限流 2.1.分布式限流的几种维度 2.1.1.QPS和连接数控制 2 ...
- 分布式接口幂等性、分布式限流(Guava 、nginx和lua限流)
一.接口幂等性 接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用.举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款成功,但是返回结果的时 ...
- 分布式接口幂等性的实现
接口幂等性 幂等性:f(f(x)) = f(x),幂等元素运行多次,还等于它原来的运算结果.在系统中,一个接口运行多次,与运行一次的效果是一致的. 什么时候需要幂等性? 并不是所有的接口都要求幂等性, ...
最新文章
- springboot整合Quartz实现动态配置定时任务
- 2021春季学期-创新设计与实践-Lesson6
- 理解__repr__
- IntelliJ IDEA 2017.01配置jdk和tomcat
- 实践App内存优化:如何有序地做内存分析与优化
- 台电x80plus装linux,纤巧却不简单——台电X80 Plus评测
- python模拟密码有效性检测功能_检查密码有效性(Django/Python)
- Python判断变量类型
- jeecg 根据数据类型key查询数据字典
- 【linux】ssh 远程执行命令
- 60-40-040-序列化-Twitter 的Avro序列化
- Android Fragment 真正的完全解析(上) (转载)
- Spring IOC知识点一网打尽!
- smartform---条形码技术详解
- Wordpress中Md文章添加图片点击放大效果
- tpadmin导入数据库问题
- MySQL的函数——聚合函数、数学函数、字符串函数、日期函数
- 微软开源 Python 自动化神器 Playwright
- 如何利用数据挖掘让RTB广告效果倍增?
- 数据库练习题目(一)
热门文章
- Java并发编程:并发和并行
- Linux下 Python通过ctypes调用cAPI (一)
- MS计算轨迹的分子间作用能
- excel函数应用:最简单的条件求和函数DSUM
- 计算机移动硬盘的一般作用,移动硬盘有什么用处
- 防止后缀aol.com}AOL勒索病毒*** .com}AOL勒索病毒解密工具处理方法
- 2021年高教杯数学建模国赛C题的解题过程附全部代码以及参赛论文(百度网盘)
- miui11可用的位置模拟器_miui11支持机型汇总_miui11支持哪些机型_软吧下载
- 8086汇编(7、80x25彩色缓冲区)
- 【科普小知识】KMS 是什么?