摘要:有些接口可以天然的实现幂等性,比如查询接口,对于查询来说,你查询一次和两次,对于系统来说,没有任何影响但对于有写库操作的增删改接口,多次调用就会对系统有多次影响。
写在前面:之前在设计接口时因经验尚浅,并未过多考虑幂等性,但这两天出现的一个线上问题让我认识到了某些情况下接口幂等性的重要性;
非幂等场景:
服务A将单据A信息通过RPC远程过程调用传给下游服务B接口(非幂等接口)用于生成关联单据B,服务B接口会校验是否已经接收过单据A,如果已接收过,会报错『重复的单据』,如果未接收过,则生产关联单据B并写库,将结果返回服务A,服务A收到结果后修改此单据状态,将结果返回客户端。简化流程图如下所示:
非幂等出现的问题:
服务A调用服务B后,服务B生成关联单据B写库成功,返回成功给服务A;但由于网络抖动,服务A未接收到服务B返回的响应,默认认定失败,返回客户端失败;业务人员重试,但由于服务B已接受过此单据A,会抛出异常『重复单据A』,对于此单据A就永远无法接受到单据B的成功响应,永远为『处理失败』状态,与实际状态不一致;(出现此问题后,首先确认单据A的关联单据B已生成,然后手动修复服务A里单据A的状态为『处理成功』)
幂等性解决:
为了解决以上问题,就需要保证下游服务B接口对单据A维度做幂等性;判断再次接受到单据A之后,不做任何操作,直接返回成功即可,服务A接受到成功后即可修改单据A状态为『处理成功』;
接口的幂等性实际上就是接口可重复调用,在调用方多次调用的情况下,接口最终得到的结果是一致的。有些接口可以天然的实现幂等性,比如查询接口,对于查询来说,你查询一次和两次,对于系统来说,没有任何影响;但对于有写库操作的增删改接口,多次调用就会对系统有多次影响。
实现幂等性的关键在于识别重复的请求,对重复的请求返回成功即可,无需再对系统造成影响;
实现幂等性后的简化流程图:
写在最后:幂等性应用的场景还有很多,实现也有很多方式,更有很多需要考虑的问题,随着工作学习的深入,理解也一定会越来越深入的,加油!
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/28491.html
摘要:解决幂等问题的三部曲,也是作者的思考框架。这是解决幂等问题的第二部曲列出并减少副作用的分析维度。所以在并发执行的维度,将并发重复执行变成串行重复执行是最好的幂等解决方案。 纲要 文章目的:本文旨在提炼一套分布式幂等问题的思考框架,而非解决某个具体的分布式幂等问题。在这个框架体系内,会有一些方案举例说明。文章目标:希望读者能通过这套思考框架设计出符合自己业务的完备的幂等解决方案。文章内容...
摘要:而纯函数,主要强调相同的输入,多次调用,输出也相同且无副作用。对于组合可能不返回值的函数很有用在其它的一些地方,也称为,也称为,也称为 参考文档1 参考文档2 函数式编程术语 高阶函数 Higher-Order Functions 以函数为参数的函数 返回一个函数的函数 函数的元 Arity 比如,一个带有两个参数的函数被称为二元函数 惰性求值 Lazy evaluation 是...
阅读 2430·2021-11-23 09:51
阅读 483·2019-08-30 13:59
阅读 1796·2019-08-29 11:20
阅读 2517·2019-08-26 13:41
阅读 3221·2019-08-26 12:16
阅读 717·2019-08-26 10:59
阅读 3304·2019-08-26 10:14
阅读 577·2019-08-23 17:21