324接口幂等性到底是什么意思,问什么接口幂等性解决方案都是解决并发的

Posted huoyingfans

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了324接口幂等性到底是什么意思,问什么接口幂等性解决方案都是解决并发的相关的知识,希望对你有一定的参考价值。

各位大佬,接口幂等性到底是什么意思,问什么接口幂等性解决方案都是解决并发的

感觉很多人把幂等和去重操作混淆,幂等就是一句话:参数相同的情况下,发一次请求和发N次请求,返回的结果都是一样的。

很多人喜欢把幂等和去重说在一起,但其实具体得看业务,有些去重接口直接给你一个重复请求的报错,难道这种叫幂等?

很明显只是一个去重动作,不幂等的接口。幂等解决方案和并发比较典型的场景就比如新建用户。

需要唯一键返回给用户,可以对入参hash,生成唯一键,然后用一张发号表或者增加redis来获取id,业务逻辑用消息队列异步处理。

这样拆开业务逻辑和唯一id生成,用唯一键来做幂等。应付高并发的写请求。

但是感觉这些场景压根不存在,都只出现在面试里面,现实里大多数项目qps能上两位数都不错了

tob估计qps10以内,还有几个是内部测试点的

供应链,比如oms的一个系统,里面接入了几百货主,上百仓库都是在这个系统中工作,qps也不小吧

oms流量是除了物流qps最大的,供应链的门户,再少不完犊子了

你对幂等的理解还只停留在接口的返回参数上,欠点火候

看量级的,我们产品线上总出现这种问题,幂等和去重都要做

多次操作返回结果一致?有啥区别吗?说说你理解嘛,学习下,光说问题,不说观点,要被误解的哦

接口幂等跟高并发关系真不大,主要是网络抖动重试

一般对幂等的理解有个误区,认为相同参数执行一次和多次返回结果一样就认为是幂等,其实不然,

幂等的含义确切说是,相同参数执行一次或者执行多次,对被调用的系统的作用效果是一样的,强调的是被调用系统不会因为多次相同调用受到额外的影响。

至于接口返回之前的处理结果,还是报错告知用户重复请求之类的信息,要看具体的场景设计。

数学上的概念 f(f(x)) = f(x),说白了就是同一个请求,发一次和发多次要求结果执行一次

如果fx执行多次,影响了zx的输出,那fx算密等吗

zx是一个无关的函数啊,比如假设zx是日志函数,输出的日志时间肯定不一样,但是fx本身是幂等的

某个时间内的操作只会产生一个结果。比如创建订单接口,可能因为网络或者其他原因,客户端重复请求接口,接口幂等处理就只会创建一个订单。

比如消息队列中,消费者可能出现重复消费问题,此时接口也是需要保持幂等的比如根据消息Id做一个去重。

幂等原始定义,就是说无论在何种情形下,但凡发生了重复操作,所有操作只会生效一次,后续操作不会产生效果和影响。

就好像1的n次幂还是1,n再怎么改也都是不会变化的

幂等分多种场景,其中一种是上下游系统交互的时候,下游接口超时了,上游系统认为本次任务执行失败,

需要重试,实际上下游接口还在执行,甚至执行完了,这时候要保证重试的结果返回成功,并且不会有重复的业务数据产生

同一个请求 请求多次和请求一次效果一样

避免重复执行或者避免重复执行导致的一致性

就是同一参数 请求同一接口多次,是否和请求一次结果一样,比如查询和删除就是幂等,新增数据就是非幂等

就跟消息消费幂等一样

可重入,对于统一幂等id的过程无论处理多少遍结果都是正确的。例如同一业务流水号调用两次转账10块余额只增加10块,并且都返回成功

跟并发没关系,主要是重试

啦啦啦啦啦啦a:比如消费者业务逻辑执行成功了,但是ack失败了。
broker重推,如果没做幂等就重复执行逻辑了

幂等是客户端携带token发起请求,防重则是服务端根据实际业务场景将请求报文中的某些信息作为token

我们这边幂等的场景就是提现在订单状态机上,调用特定状态转换的方法,无论调多少次最终的结果都是一样,比如1→2的成功之后,这个订单之后无论被调多少次都只能保持2了

以上是关于324接口幂等性到底是什么意思,问什么接口幂等性解决方案都是解决并发的的主要内容,如果未能解决你的问题,请参考以下文章

什么是接口的幂等性,如何实现接口幂等性?

什么是接口的幂等性,如何实现接口幂等性?一文搞定

TODO什么是幂等性?如何保证接口的幂等性?

324分布式系统中接口的幂等性

接口幂等性如何保证

幂等性学习及接口的幂等性