您当前的位置:首页 > 电脑百科 > 程序开发 > 算法

解决幂等问题,只需要记住这个口诀!

时间:2023-05-23 11:43:52  来源:  作者:Hollis
"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

作为开发人员,我们每天都要开发大量的接口,其中包括了读接口和写接口,而对于写接口来说,除了要保证他的性能、可用性以外,还需要有一个重要的问题,那就是考虑如何保证接口的幂等性。

幂等性

什么是幂等性?

"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。 这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。"

以上是百度百科中的回答,总结起来就是一句话:一个接口,不管我调多少次,只要参数不变,结果也应该不变。

但是,实际在工作中,谈到幂等性,一般分为两种,即请求幂等和业务幂等。

请求幂等:每次请求,如果参数一样,结果也要一样。

业务幂等:同一次业务请求,再拿到最终状态之后的每次请求,结果要保证一样。再没拿到最终状态之前,每一次请求需要正常执行业务逻辑,直到推进到最终状态。

一般来说,我们谈到的幂等性,大部分都是业务幂等。比如,一次支付请求,如果支付返回处理中,或者系统异常等,我们需要重试,继续调用,直到他明确的返回支付成功,或者明确的无法成功的支付失败结果。

如何保证幂等

想要保证幂等性,最简单的做法就是:在做业务操作之前,先查一下,判断下本次操作是否有被执行过,如果执行过,则不再执行,否则继续执行。

但是,这个方案存在一个关键性的问题,那就是在高并发场景中,是可能会有幂等击穿的。

图片

所以,想要解决好这个问题,需要做好并发控制,那么,做并发控制,大家首先想到的就是锁,没错。就是要用锁。

那么,解决幂等问题,请记住这个口诀:”一锁、二判、三更新”。

一锁、二判、三更性

“一锁、二判、三更新”,只要严格遵守这个过程,那么就可以解决并发问题。

一锁:第一步,先加锁。可以加分布式锁、或者悲观锁都可以。但是一定要是一个互斥锁!

二判:第二步,进行幂等性判断。可以基于状态机、流水表、唯一性索引等等进行重复操作的判断。

三更新:第三步,进行数据的更新,将数据进行持久化。

图片

三步需要严格控制顺序,确保加锁成功后进行数据查询和判断,幂等性判断通过后再更新,更新结束后释放锁。

以上操作需要有一个前提,那就是第一步加锁、和第二步判断的时候,需要有一个依据,这个就是幂等号了,通常需要和上游约定一个唯一ID作为幂等号。然后通过对幂等号加锁,再通过幂等号进行幂等判断即可。

一锁这个过程,建议使用redis实现分布式锁,因为他是非阻塞的高效率的互斥锁。非常适合在幂等控制场景中。

二判这个过程,如果有操作流水,建议基于操作流水做幂等,并将幂等号作为唯一性约束,确保唯一性。如果没有流水,那么基于状态机也是可以的。

但是不管怎么样,数据库的唯一性约束都要加好,这是系统的最后一道防线。万一前面的锁失效了,这里也能控制得住不会产生脏数据。



Tags:幂等   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除。
▌相关推荐
"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。作为开发人...【详细内容】
2023-05-23  Tags: 幂等  点击:(0)  评论:(0)  加入收藏
在分布式系统中,接口幂等性是一个非常重要的概念,它保证了在同样的条件下,同一请求的多次执行所产生的效果都是相同的。在实际开发中,为了防止重复提交或者重复操作带来的问题,我...【详细内容】
2023-03-07  Tags: 幂等  点击:(69)  评论:(0)  加入收藏
什么是接口的幂等性?幂等作为一个数学概念,是指在某个一元运算过程中,任意次数的运算结果会与一次运算结束后的结果是相同的。在计算机操作中,一个幂等操作的特点是任意执行一...【详细内容】
2023-02-02  Tags: 幂等  点击:(68)  评论:(0)  加入收藏
在后端并不是写完一个接口的业务逻辑就能投入使用的,接口的优化更是一个难点与麻烦之处(下面的内容我们不考虑前端的处理,因为不能完全靠前端,前后端都需要做自己的处理工作)1.幂...【详细内容】
2022-07-05  Tags: 幂等  点击:(327)  评论:(0)  加入收藏
一、什么是幂等?**幂等性:**多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。二、使用幂等的场景1、前端重复提交用户注册,用户创建商品等...【详细内容】
2022-03-15  Tags: 幂等  点击:(221)  评论:(0)  加入收藏
一、幂等性概念在数学里,幂等有两种主要的定义。1、在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下唯一两个幂等实数为0和...【详细内容】
2021-10-09  Tags: 幂等  点击:(166)  评论:(0)  加入收藏
消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消...【详细内容】
2021-08-19  Tags: 幂等  点击:(278)  评论:(0)  加入收藏
幂等,这个词来源自数学领域。幂等性衍生到软件工程中,它的语义是指:函数/接口可以使用相同的参数重复执行, 不应该影响系统状态,也不会对系统造成改变。举一个简单的例子:正常设...【详细内容】
2021-06-18  Tags: 幂等  点击:(224)  评论:(0)  加入收藏
小伙伴们有没有遇到过生产环境经常出现过重复的数据?在排查问题的时候,数据又是正常的。这个是何解呢?怎么会出现这种情况,而且还很难排查问题。今天老顾给大家分享一下这里的原因,以及解决方案。...【详细内容】
2021-03-31  Tags: 幂等  点击:(425)  评论:(0)  加入收藏
之前负责的项目报了一个问题,用户操作回退失效。我们的设计里,操作回退是回到操作前的状态。经过查看日志发现,用户之前的操作做了两次,也就是说提交操作的接口被调用了两次,导致...【详细内容】
2021-01-18  Tags: 幂等  点击:(311)  评论:(0)  加入收藏
▌简易百科推荐
"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。作为开发人...【详细内容】
2023-05-23  Hollis    Tags:幂等   点击:(0)  评论:(0)  加入收藏
新智元报道编辑:桃子【新智元导读】手写提示既费时又费力,微软研究人员的APO算法提供了一种自动化的解决方案。无需调整超参数或模型训练,APO可以显著提高提示的性能,并具有可解...【详细内容】
2023-05-22  新智元    Tags:APO算法   点击:(5)  评论:(0)  加入收藏
引言哨兵思想是指在算法中使用一个特殊值来检测或标记某些条件的发生,它的目的是为了简化代码,并使其更容易理解,常常用于在循环中优化边界条件的判断。介绍在算法中,"哨兵"思想...【详细内容】
2023-05-22  opendotnet  今日头条  Tags:算法   点击:(2)  评论:(0)  加入收藏
首先,人们需要了解什么是AI算法?简单地说,AI算法是使机器能够从数据中学习的数学模型。它们有不同的形式,包括监督学习、无监督学习和强化学习。监督学习算法从标记的例子中学习...【详细内容】
2023-05-18    极客网  Tags:算法   点击:(11)  评论:(0)  加入收藏
在分布式系统中,高并发场景下,为了防止系统因突然的流量激增而导致的崩溃,同时保证服务的高可用性和稳定性,限流是最常用的手段。限流算法也是面试中必考题,今天一灯带大家一块学...【详细内容】
2023-05-16   一灯架构    Tags:算法   点击:(21)  评论:(0)  加入收藏
前言分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。但就是这样一个简单的分类树查询功能,我们却优化了5次。到底是怎么回事呢?背景我们的网站使用了Sprin...【详细内容】
2023-05-15   苏三说技术  微信公众号  Tags:分类树   点击:(21)  评论:(0)  加入收藏
快速排序是由东尼·霍尔所发明的一种排序算法,时间复杂度是 O(nlogn), 是不稳定排序算法。快速排序使用分治思想,通过一趟排序将要排序的数据分割成独立的两部分,其中一部...【详细内容】
2023-05-08      Tags:排序算法   点击:(24)  评论:(0)  加入收藏
冒泡算法是一种简单的排序算法,它的基本思想是通过相邻元素之间的比较和交换,将大的元素慢慢地“冒泡”到数组的最后一个位置。冒泡算法在实现上非常简单,但它的时间复杂度较高...【详细内容】
2023-05-06  Code404  今日头条  Tags:算法   点击:(23)  评论:(0)  加入收藏
随着ChatGPT的火爆,人们对于人工智能领域的发展产生了极大的兴趣。很多专家认为,一个人工智能的时代将随着软硬件技术的快速发展即将到来。那么,作为信息技术领域的先锋队,对于...【详细内容】
2023-05-06  活在信息时代  微信公众号  Tags:算法   点击:(21)  评论:(0)  加入收藏
一、概述马斯克收购了推特,但对其技术表示不满。认为主页速度过慢是因为有 1000 多个 RPC。先不评价马斯克所说的原因是否正确,但可以看出,互联网上为用户提供的一个完整的服务...【详细内容】
2023-05-04    DataFunTalk  Tags:算法   点击:(20)  评论:(0)  加入收藏
站内最新
站内热门
站内头条