首页 要闻娱乐军事情感奇闻搞笑社会体育游戏百科

幂等性 幂等性如何保证

2021-11-03 11:15

1幂等性

1.1定义

幂等性的概念来源于数学,意思是N变换和1变换的结果是一样的。在工程中,幂等性用来表示用户对同一操作发起的一个请求或多个请求的结果是一致的,不会出现多次点击带来的副作用。

幂等性包括第一个请求对资源有副作用,但许多后续请求不会对资源有副作用。

幂等函数关注的是将来多次请求的副作用,而不是结果。

网络超时等问题不在幂等讨论范围内。

幂等性是系统服务对外界的一种承诺,而不是实现,它承诺只要接口被成功调用,多个外部调用对系统的影响就会是一致的。声明为幂等的服务会认为外部调用失败是正常的,失败后会有重试。

1.2场景

在业务开发过程中,可能会出现由于网络震动导致无法接收请求,触发重试机制,或者前端抖动导致表单重复提交的情况。比如在交易系统中,用户提交的购物请求已经被服务器正确处理,但是服务器的退货结果却因为网络等原因丢失,导致客户端无法得知处理结果。如果是在网页上,一些不恰当的设计可能会让用户认为上一次操作失败,然后刷新页面,导致扣费被调用两次,账户被再次扣费。这时候就需要引入幂等接口。

我们以MySQL为例。只有第三种情况需要开发人员使用其他策略来确保幂等性:

以下是重复提交和幂等性之间的区别:

重复提交意味着在第一次请求成功的情况下,不满足幂等要求的服务会多次改变其状态。

幂等比较常用,当第一次请求失败或结果未知时,会发起多次请求,从而多次确认第一次请求成功,但不会因为多次请求而出现多次状态变化。

1.3幂等思维

引入幂等性将使服务器逻辑更加复杂。为了满足幂等服务的需求,逻辑中至少有两点:

首先,查询最后的执行状态,如果没有,就把它当作第一个请求。

在服务改变状态的业务逻辑之前,确保防止重复提交的逻辑。

幂等性可以简化客户端的逻辑处理,但会增加服务提供商的逻辑和成本。所以是否使用要根据具体场景来分析。因此,除了特殊的业务需求之外,不应该尽可能多地提供幂等接口。

添加了用于控制幂等性的附加业务逻辑,这使得业务功能变得复杂。

并行执行功能改为串行执行,降低了执行效率。

2幂等解

2.1前端设置

用户单击提交按钮后,我们可以将该按钮设置为不可用或隐藏。

前端限制很简单,但是有一个致命的错误。如果有知识的用户通过模拟网页请求重复提交请求,前端限制将被绕过。

2.2唯一索引

防止订单被多次插入的最简单直接的方法是创建一个唯一的索引,然后在插入时语句可能会略有不同。但目的是确保数据库中只有一条相同的记录。

方法一:给数据库添加一个唯一的索引,然后如果在执行过程中捕捉到了DuplicateKeyException,就知道是重复插入造成的,然后继续执行业务。

方法二:使用MySQL自带的关键字,实现不存在就插入,存在就更新的操作。此关键字不会删除原始记录。

方法replace into的主要功能类似于INSERT操作。replace into的底层是先删除数据再插入数据,这样会破坏索引,重新维护。请注意主键或唯一索引必须有效,否则只会添加替换为。

2.3复制表

删除重复表的机制是基于mysql唯一索引的特点,一般过程如下:

客户端首先请求服务器,服务器首先将请求信息存储在mysql去重表中,该表应根据请求的特殊字段之一建立唯一索引或主键索引。

判断插入是否成功,如果插入成功,继续进行后续业务请求。如果插入失败,则意味着当前请求已经执行。

2.4悲观锁定

方法1:简单的使用Java自带的syn或者锁锁来实现幂等性。核心点是将重要的执行部分从并行切换到串行。缺点是这个锁不能用于分布式场景,因为它跨越了JVM!此时,需要引入分布式锁。

序列化是依靠MySQL自带的操作数据库实现的。这里的重点是简单解释一下:

当线程A执行更新时,数据将锁定当前记录。当其他线程执行这一行代码时,它们将等待线程A释放锁,然后才能获取锁并继续后续操作。

提交事务后,会自动释放为更新而获取的锁。

这种模式的缺点是,如果业务处理耗时且并发,后续线程会长时间处于等待状态,占用大量线程,使这些线程处于无效等待状态。然而,web服务中的线程数量通常是有限的。如果大量线程由于获取更新锁而处于等待状态,不利于系统的并发操作。

2.5乐观锁定

2.6分布式锁

Redis中的Setnx操作用于设置分布式锁中幂等性的保障屏障。如果setnx成功,说明这是第一次插入数据,继续执行SQL语句就可以了。如果setnx失败,则意味着它已经被执行。

2.7令牌方案

这种方法分为两个阶段:令牌申请阶段和支付阶段。

第一阶段:进入订单提交页面前,订单系统需要根据用户信息向支付系统发送令牌请求,支付系统将令牌保存在Redis缓存中,供第二阶段支付。

第二阶段:订单系统用应用的令牌发起支付请求,支付系统将检查Redis中是否存在令牌。如果存在,则表示第一次发起支付请求,删除缓存中的令牌后开始支付逻辑处理;如果缓存中不存在,则表示请求非法。

其实这里的代币可以看作代币,支付系统根据代币确认插入的唯一性。token模式的不足是需要系统之间的两次交互,过程比上述方法复杂。

令牌引用

相关阅读
王铮亮首公开爱女 庆女儿百日为其写歌。
2007年湖南卫视选秀娱乐节目《快乐男声》让观众认识了王铮亮。今年6月,王铮亮妻子文薇生下女儿并取名“球球”。近日,王铮亮女儿“球球”满百日,王铮亮首次公开女儿的照片,并未自己的女儿创作了一首歌。简直父爱满满。王铮亮微博截图  近日,著名歌手、制作人王铮亮首次在社交网站上公布自己与妻子文薇的女儿“球球”超萌照片,并附上为“球球”亲自创作的同名歌曲。不久前,为庆祝女儿出生满百日,“球球”的干妈宋丹丹17在看 07-07
戴军整容前后照片对比 短下巴整容后化身完美型男
90年代内陆逐渐涌现了一批才华横溢的音乐人,一首《阿莲》让初出茅庐的戴军在娱乐圈崭露头角。之后戴军不仅涉足音乐,当主持人做演员都是手到擒来在娱乐圈影响力颇高。逐渐淡出娱乐圈的戴军最近竟传出整容传闻,网上更是有戴军整容前后照片对比让网友大呼认不出,戴军整容前长啥样下面随小编一起看看吧。年轻时候的戴军五官还是不错的,虽然是单眼皮但十分有神韵,深情迷人说的就是戴军吧。高挺的鼻梁,黝黑的皮肤是个魅力四射的19在看 07-07
顾长卫的前妻是谁 顾长卫前妻陈晓旭资料
顾长卫是在北京电影学院电影导演专业毕业的学生,作为第五代电影导演领军人物的顾长卫,更开始也只是跟在导演后面的摄影而已,不过顾长卫现在已经拥有了自己的电影作品,更因为这些电影作品,让顾长卫的电影生涯增色不少,曾经还获得了银熊奖的顾长卫,已经是电影导演界很有名气的导演了,顾长卫的婚姻生活更是受到了大家的关注哦!顾长卫在1984年的时候,就已经在八一电影厂担当摄影,后来众多部耳熟能详的作品,都是顾长卫来15在看 07-07
教室门女主角邱佳卉照片曝光【图】
湖北武汉17中教室门图片曝光8月24日一不雅视频在网上传疯了,视频中两名中学生在教室激情交欢,据称此视频为武汉十七中学生所拍摄,网民称之为武汉17中教室门。 整段视频约有28分钟左右,视频中女孩很羞涩也很漂亮,视频是在教室内拍摄,且又是在课桌上,让人实在无语。女生起初躺在教室的桌子上,上衣没有脱,但下身全裸,两条性感的长腿被男生放在两腰上,下体已经交合,女孩看起来但非常的羞涩,男生一边享受欢愉,一87在看 07-07
李民浩整容了吗?李民浩整容前照片曝光令人震惊
导读:李民浩整容了吗?李民浩整容前照片曝光,引网民热议。(Lee MinHo) 李民浩,模特出身。因与具惠善、SS501的成员金贤重及阳光帅哥金范等共同出演了韩国版《流星花园》(花样男子)中的男主角具俊表而人气暴涨。李民浩已经成为了时下韩国最抢手的男明星之一。今日,李民浩在整容前活动的视频引起轰动。在11号的韩国的娱乐节目里爆料了李民浩整容前活动的视频引起轰动亲眼见证了《花样男子》掀起的这阵旋风的18在看 07-07

热文排行