分布式-幂等性解决方案
定义
接口幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了不同结果。在分布式系统中,接口由于有三态(成功、失败、无响应)的问题,为了提高系统的可用性,重试是不可避免的,重试就会引发幂等性问题,这是一个因果关系。
常见幂等性问题
重复下单
在App中下订单的时候,点击确认之后,没反应,就又点击了几次。在这种情况下,如果无法保证该接口的幂等性,那么将会出现重复下单问题。
重复消费
在接收消息的时候,消息推送出现重复。如果处理消息的接口没有保证幂等性,那么重复消费消息产生的影响可能会非常大的。
发送短信
如果APP重复点击调用后台接口,后台重复调用第三方接口,造成用户收到多条短信,一般情况下控制在60s内再重发短信,如果不做控制,每一次调用第三方接口都会收费。
form表单提交
我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。
接口超时重试
项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果,为了避免返回错误的结果,于是会对该请求重试几次,这样也会产生重复的数据。
天然的幂等操作
查询操作
在数据不变的情况下,查询一次和多次的结果是一样的。
删除操作
删除一次和删除多次的结果是一样的,都是把结果删除,有点多余感觉。
非幂等操作
添加和修改操作,如果不做幂等性处理,有可能每调用一次,都会对数据结果产生影响。
幂等性解决方案
1.数据库添加唯一索引:比如订单号是唯一索引,防止生产重复订单
2.分布式锁:防止应用程序出现并发操作
3.token机制,防止重复提交:提交后台时带token值,先判断token是否存在,存在删除 token,执行业务逻辑
4.数据库通过乐观锁(update table_name set version=version+1 where version=0)
5.JVM锁(Synchronized/Lock)只适用于单机环境
6.数据库悲观锁,通常是通过主键或唯一索引和事务一起实现。
分布式-幂等性解决方案相关推荐
- 这6种最常见分布式事务解决方案!请拿走不谢!
作者:不清不慎,目前在杭州蘑菇街公司任职,Java大数据开发工程师一枚,热爱研究开源技术! 架构师社区合伙人! 一.分布式事务 分布式事务就是指事务的参与者.支持事务的服务器.资源服务器以及事务管理器 ...
- 基于消息队列的分布式事务解决方案
前两天发了工资,第一反应是想着要给远方的女朋友一点惊喜!于是打开了平安银行的APP给女朋友转点钱!填写上对方招商银行卡的卡号.开户名,一键转账!搞定!在我点击的那瞬间,就收到了app的账户变动的提醒, ...
- 如何选择分布式事务解决方案?
简介: 分布式事务中涉及的参与者分布在异步网络中,参与者通过网络通信来达到分布式一致性,网络通信不可避免出现失败.超时的情况,因此分布式事务的实现比本地事务面临更多的困难.本文归纳总结五种分布式事务解 ...
- 程序员修神之路--那些分布式事务解决方案
亲爱的,关注我吧 为了保证分布式环境下数据强一致性,需要引入分布式事务,而分布式事务由于网络环境的不确定性,天生就很难实现.具体可以见上一篇. [分布式下,我想要强一致性] 为了保证分布式事务的正确性 ...
- 分布式事务解决方案——柔性事务与服务模式
转载自 分布式事务解决方案--柔性事务与服务模式 初识分布式系统 关于分布式一致性的探究 分布式系统的CAP理论(需要到博客中查看) 分布式系统的BASE理论(需要到博客中查看) Java中的事务 ...
- 聊聊微服务架构及分布式事务解决方案
转载自 聊聊微服务架构及分布式事务解决方案 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布 ...
- base cap 分布式_干货分享:基于本地消息表的分布式事务解决方案总结
前段时间学习了分布式事务的几种方案,下面主要总结下基于本地消息表实现可靠消息最终一致性的分布式事务方案. 1,什么是分布式事务? 在传统架构中往往是一个单体架构,一个系统就对应一个war包,然后这个系 ...
- 分布式事务解决方案,Seata的基本配置和使用
文章目录 1. 分布式事务介绍 ①:本地事务 ②:分布式事务 ③:常见的分布式事务解决方案 3. 2PC与3PC ①:2PC与3PC的区别 3. Seata介绍 ①:Seata的三种角色 ②:Seat ...
- 《深入理解分布式事务》第六章 最终一致性分布式事务解决方案
<深入理解分布式事务>第六章 最终一致性分布式事务解决方案 文章目录 <深入理解分布式事务>第六章 最终一致性分布式事务解决方案 一.最终一致性分布式事务概述 1.典型方案 2 ...
最新文章
- 思考:王者荣耀为什么不使用微服务架构?
- 本科学计算机研究生读哲学,计算机专业本科生创新思维培养及其哲学思考
- 智能可穿戴平台,你更看好谁?
- 记录 之 tensorflow 常用函数:tf.split(),tf.clip_by_value() 和 tf.cond()
- 图论--2-SAT--详解
- 路由器局域网设置_路由器基础介绍
- m1 Mac的brew包完全卸载方法
- php操作xml类,PHP实现的XML操作类【XML Library】
- Windows PrintNightmare 漏洞和补丁分析
- linux优化服务器,Linux服务器优化
- (2)网络基础之IP
- PSR-4——新鲜出炉的PHP规范
- Silverlight 2 中简单的2.5D控件
- Orcad Library Builder使用教程以及安装踩坑记录
- php接入腾讯云短信SDK
- ios备忘录下载安卓版_ios8备忘录app软件下载
- 加减法叫做什么运算_加减法的意义及运算定律、性质
- MSP430 TTP229 单片机 触摸按键 实践 51单片机 触摸键盘
- 利用JQuery实现广告动态滚动特效
- uniapp配合colorUI制作简单的信封
热门文章
- 卡方检验(Chi-square test/Chi-Square Goodness-of-Fit Test)
- 2017ACM ICPC Asia Regional-Daejeon H-Rock Paper Scissors[ FFT]
- 这三个自媒体平台,你都了解嘛?
- 沙特阿美以246亿元收购荣盛石化10%股份,还将在中国东北建设大型炼化一体化项目...
- mysql 的capi预处理
- linux设备驱动--字符设备模型
- 收件人、寄件人如何根据快递单号查询物流进度
- mysql5.7 只读视图_MySQL 5.7: Innodb read view在只读场景的优化
- 【Column Generation思考-02】|从对偶的角度理解Cutting Stock Problem【更新版本】
- latex小技巧—极限符号下方分成两行