ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2022-01-27 10:33:31  阅读:153  来源: 互联网

标签:返回 请求 重复 接口 并发 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,执行
来源: https://blog.csdn.net/huoyingfans/article/details/122713212

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有