实战~聊聊幂等设计,一文解决

本文为博客 VIP 文章,开通 VIP 后可阅读全文

开通 VIP

实战!聊聊幂等设计

前言

大家好,今天我们一起来聊聊幂等设计。

  1. 什么是幂等
  2. 为什么需要幂等
  3. 接口超时,如何处理呢?
  4. 如何设计幂等?
  5. 实现幂等的8种方案
  6. HTTP的幂等

1. 什么是幂等?

幂等是一个数学与计算机科学概念。

  • 在数学中,幂等用函数表达式就是:f(x) = f(f(x))。比如求绝对值的函数,就是幂等的,abs(x) = abs(abs(x))
  • 计算机科学中,幂等表示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同。

2. 为什么需要幂等

举个例子:

我们开发一个转账功能,假设我们调用下游接口超时了。一般情况下,超时可能是网络传输丢包的问题,也可能是请求时没送到,还有可能是请求到了,返回结果却丢了。这时候我们是否可以重试呢?如果重试的话,是否会多转了一笔钱呢?

转账超时

当前互联网的系统几乎都是解耦隔离后,会存在各个不同系统的相互远程调用。调用远程服务会有三个状态:成功,失败,或者超时。前两者都是明确的状态,而超时则是未知状态。我们转账超时的时候,如果下游转账系统做好幂等控制,我们发起重试,那即可以保证转账正常进行,又可以保证不会多转一笔

其实除了转账这个例子,日常开发中,还有很多很多例子需要考虑幂等。比如:

  • MQ(消息中间件)消费者读取消息时,有可能会读取到重复消息。(重复消费
  • 比如提交form表单时,如果快速点击提交按钮,可能产生了两条一样的数据(前端重复提交

3. 接口超时了,到底如何处理?

如果我们调用下游接口超时了,我们应该怎么处理呢?

两种方案处理:

  • 方案一:就是下游系统提供一个对应的查询接口。如果接口超时了,先查下对应的记录,如果查到是成功,就走成功流程,如果是失败,就按失败处理。

拿我们的转账例子来说,转账系统提供一个查询转账记录的接口,如果渠道系统调用转账系统超时时,渠道系统先去查询一下这笔记录,看下这笔转账记录成功还是失败,如果成功就走成功流程,失败再重试发起转账。

  • 方案二:下游接口支持幂等,上游系统如果调用超时,发起重试即可。

两种方案都是挺不错的,但是如果是MQ重复消费的场景,方案一处理并不是很妥,所以,我们还是要求下游系统对外接口支持幂等

4. 如何设计幂等

既然这么多场景需要考虑幂等,那我

实战,实现等的8种方案! 等是一个数学与计算机科学概念。。比如求绝对值的函数,就是等的,。计算机科学中,示一次和多次请求某一个资源应该具有同样的副作用,或者说,多次请求所产生的影响与一次请求执行的影响效果相同。 阅读详情

相关推荐

【面试】等性问题的思考和总结,防重、等,常用解决方案,解决方式

1、等性 等性:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。 等性接口:是指可以使用相同参数重复执行,并能获得相同结果的接口。 数学中:在一次元运算为等时,其作用在任一元素两次后会和其作用一次的结果相同;在二次元运算为等时,自己重复运算的结果等于它自己的元素。 计算机学中:等指多次操作产生的影响只会跟一次执行的结果相同,通俗的说:某个行为重复的执行,最终获取的结果是相同的,不会因为重复执行对系统造成变化。 防重和等的区别: 防重设计主要为了避免产生重复数据

做技术,贵在学习与坚持! 8539

设计详解

本文从研发视角探讨了系统设计等性的重要性及实现方法。文章首先通过电商下单、银行转账等业务场景说明等问题产生的背景,指出重复请求可能导致严重后果。随后分析系统架构各层职责,指出等处理应集中在DAO层实现。针对数据库CRUD操作,详细阐述了如何确保每种操作的等性:查询天然等,插入需业务防重,更新应使用绝对值,删除要避免范围操作。最后列举了页面token、乐观锁、悲观锁、去重等常见等实现方案。文章强调,保证接口等性是基本技术要求,开发者应深入理解其本质以避免业务陷阱。

250

一文说清工业控制PCB的热设计基本原则

深入讲解工业控制PCB的热设计要点,结合实际应用环境,确保散热性能与系统稳定性。内容涵盖pcb设计规则中的布局、走线与热管理策略,提升产品可靠性。

weixin_35734408的博客 470

等校验是什么意思_阿里面试官:接口的等性怎么设计

一、什么是等?看一下维基百科怎么说的:等性:多次调用方法或者接口不会改变业务状态,可以保证重复调用的结果和单次调用的结果一致。二、使用等的场景1、前端重复提交用户注册,用户创建商品等操作,前端都会提交一些数据给后台服务,后台需要根据用户提交的数据在数据库中创建记录。如果用户不小心多点了几次,后端收到了好几次提交,这时就会在数据库中重复创建了多条记录。这就是接口没有等性带来的 bug。2、接...

weixin_29337315的博客 1446

一文简单聊聊protobuf

protobuf的全称是Protocol Buffer,是Google提供的一种数据序列化协议。Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。结构化数据是最为常见和熟悉的数据形态,它由明确定义的信息组成,并以高度组织化的格或数据库进行存储和管理。正如字面上达的,就是带有一定结构的数据。

一个菜鸡的博客 327

聊聊运动控制和规划控制需要掌握的技术栈~

作者|过河卒编辑| 自动驾驶之心原文链接:https://zhuanlan.zhihu.com/p/11734783085点击下方卡片,关注“自动驾驶之心”公众号戳我-> 领取自动驾驶近15个方向学习路线>>点击进入→自动驾驶之心『规划控制』技术交流群本文只做学术分享,如有侵权,联系删文1、ROS的通信方式李是Lyapunov的李:谈谈ROS的通信机制话题通信和服务通信,...

CV_Autobot的博客 436

对线面试官:一文搞懂常用设计模式!

磊哥《Java 面试提高课(2023版)》(戳我加入)正式上线了,里面包含了 20 万字的最新 Java 面试题(问答形式),并配有 Spring Cloud、MQ、设计模式等内容,以及简历辅导、面试辅导、复习规划、一对一答疑等服务,期待你的加入哦~平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了。如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代...

磊哥聊Java 497

2022精心整理的C语言学习宝藏,值得收藏~

C 语言可以零基础入门,它的语法是很多高级编程语言的基础,比如说 Java、C++;并且起到承上启下的作用,向上可以学习高级编程语言,向下可以学习计算机组成原理、操作系统等等偏基础的计算机基础知识。 C语言相关电子书: 推荐书籍: 第一本书《阿哈C语言》的写书风格个人认为比较风趣幽默,对于培养兴趣,基础学习还是很不错的 《C程序设计语言》,机械工业出版社,作者Brian W. Kernighan / (美)Dennis M. Ritchie。C 语言之父写的,入门经典书籍。 《

编程与实战的博客 2446

为什么计算机需要操作系统?(一文详解~

我们从三个方面来简单聊聊为什么计算机系统操作系统这个话题。

youzhangjing_的博客 1485

一文带你清楚知道项目经理都在干什么?

“资源永远是少的,时间永远是不够的,需求永远是变化的,客户永远是不成熟的。”这话虽然有些夸张,但的确体现了PM的真实工作状态。很多项目经理都是技术出身,但懂技术不一定能做好项目管理。 做项目真的很辛苦,常年出差在外,经常没日没夜也没有周末,整天围着项目转。项目经理不仅是个脑力活,更是累人的体力活。 一:全方位管理 作为项目经理,我的工作重点分为9个方面: 1.总体管理 为了保证项目有效、有序进行,需要做好项目的整体管理和总体计划的制定和执行,并对变更进行管理和控制。 2.范围管理 为了保证项目

qq_40307352的博客 3912

一文搞懂Spring,堪称Spring源码终结者

源码中我们可以学到很多东西,学习别人高效的代码书写、学习别人对设计模式的熟练使用、学习别人对整个架构的布局,等等。如果你还能找出其中的不足,那么恭喜你,你要飞升了!会使用固然重要,但知道为什么这么使用同样重要。从模仿中学习,从模仿中创新。如果你在读Spring源码的过程中有什么疑惑跟不解,那么这两份文档跟这些学习视频一定会对你有所帮助,如果有需要的朋友【直接点击此处】即可免费获取~

mxt51220的博客 873

一文搞懂企业架构与DDD融合

TOGAF(The Open Group Architecture Framework)是一个广泛采用的企业架构(Enterprise Architecture, EA)框架,由开放组(The Open Group)开发和维护。它为组织设计、规划、实施和治理企业信息架构提供了系统化的方法和工具。TOGAF旨在帮助企业通过高效的架构管理,实现业务目标、优化资源利用和增强灵活性。

汤师爷的博客 847

等性 详解

文章介绍了等的数学概念、业务概念和概述,然后从应用场景出发,提出5种解决方案。

suge大帝的博客 1万+

接口请求超时问题的排查及解决优化方案详细介绍

访问网站或请求接口过程中出现接口超时,该如何排查?如何处理解决?

东东先生的博客 2万+

等处理

等处理(每天看过思考过的内容记录一下,) idepotence defination: Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is the same as for a single request. 按照我的理解,等校验就是为了保证请求不会重复处理,

wzshengdian的博客 2950

四种等性解决方案

四种等性解决方案

这个人很懒,什么都没有留下。 3182

等概念以及非等的解决方案

我们在对外暴露接口时,这个接口往往会被调用多次,而多次被调用和被调用一次所造成的影响一样的话,这个现象就称为等。等函数,等接口,或等方法,是指可以使用重复执行,并能获得相同结果的函数,对数据的影响是一样的。

weixin_52938172的博客 3608
上一篇: 这个反编译工具真正强大,绝逼Java 开发神
下一篇: 初识 JVM(带你从不同的视角认识 JVM)
司腾
博客等级 码龄5年 1815粉丝 333原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值