分布式接口幂等性解析

一、概述

幂等性定义:用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。【同一操作指的是同一个浏览器,发送相同的请求】。

常见场景:

  1. 提交订单接口。返回提交结果时网络出现故障,再次提交订单,出现同一订单多次提交问题;
  2. 支付订单接口。用户购买商品使用约支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,是有问题的。

注意:并不是所有接口都要求幂等性,要根据业务而定。

二、幂等性策略分析

核心思想:通过唯一的业务号保证幂等
通用实现方案:

1. 非并发情况下,查询唯一业务单号有没有操作过,没有则执行操作;
2. 并发情况下,整个操作过程加分布式锁。

三、不同行为幂等性分析

3.1 Select操作

不会对业务数据有影响,天然幂等。

3.2 Delete操作

存在唯一业务号场景:

  1. 第一次delete后,第二次继续delete,由于第一次已经删除,第二次直接delete会返回0,天然支持幂等;
  2. 第二次delete之前,先查询是否存在该数据,然后再进行删除。

不存在唯一业务号场景:

例如:批量删除审核未通过的商品
第一次删除之后,在第二次删除之前,又插入了一个条新的审核未通过的商品,是否删除,需要根据业务进行判断?如果需要保持幂等性,即不能删除新审核未通过商品,利用Token机制+分布式锁来解决

3.3 Update操作

存在唯一业务号场景:又分为两种场景:1.仅设置值场景2.设置自增值场景,每次执行都会导致某个字段+1

1. 设置值场景:天然幂等的;
2. 设置自增值场景:利用乐观锁增加版本号来解决

不存在唯一业务号场景:利用Token机制 + 分布式锁来解决。

3.4 Insert操作

存在唯一业务号场景:例如秒杀,订单ID+用户ID是唯一业务号

  1. 利用分布式锁,保证接口幂等;
  2. 将订单ID+用户ID在数据库层面设为唯一索引,这样保证了数据唯一性,也就保证了接口幂等性。

不存在唯一业务号场景:例如用户注册。利用Token机制 + 分布式锁来解决。

3.5 混合操作

业务过程中存在多个insert或update请求。总体上采用Token机制和分布式锁来解决。
存在唯一业务号场景:例如:秒杀,订单ID+用户ID是唯一业务号

利用分布式锁,保证接口幂等

不存在唯一业务号场景:利用Token机制 + 分布式锁来解决。

四、Token机制实现接口幂等性方案

利用分布式锁+Token机制保证了接口幂等性,Token主要用来保证来自同一个请求的。主要流程为:

  1. 首先调用获取Token接口。利用UUID生成Token,并以当前会话SessionId作为key,Token作为value放入到Redis中。设置超时时间;
  2. 其次,请求头或请求参数中传入获取的Token。根据当前SessionId去Redis获取存储的Token和请求传入的Token进行对比;
  3. 最后,获取Token时,可能存在并发情况,因此,需要加分布式锁。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/469211.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电子元器件行业发展势头强劲,钧崴电子IPO上市抢占市场份额

电子元器件处于电子信息产业链上游,是通信、计算机及网络、数字音视频等系统和终端产品发展的基础,对电子信息产业的发展起着至关重要的作用。近年来中国电子工业持续高速增长,带动电子元器件产业强劲发展。目前,我国许多门类的电…

linux系统------------Mysql数据库

目录 一、数据库基本概念 1.1数据(Data) 1.2表 1.3数据库 1.4数据库管理系统(DBMS) 数据库管理系统DBMS原理 1.5数据库系统(DBS) 二、数据库发展史 1、第一代数据库 2、第二代数据库 3、第三代数据库 三、关系型数据库 3.1关系型数据库应用 3.2主流的…

实现:mysql-5.7.42 到 mysql-8.2.0 的升级(rpm方式)

实现:mysql-5.7.42 到 mysql-8.2.0 的升级(rpm方式) 1、升级准备1、使用mysql-shell 检查工具检查兼容性 2、操作环境3、备份数据库、my.cnf文件,停止mysql服务(重要)4、上传、解压安装包5、查看已安装的my…

问GPT:将Excel中一行转换为一列的方法

问GPT:将excel中一行转换为一列的方法 函数: TRANSPOSE(A2:E2)

基于SpringBoot+MYSQL的课程作业管理系统

目录 1、前言介绍 2、主要技术 3、系统流程分析 3.1、操作流程 3.2、添加信息流程 3.3、删除信息流程 4、系统设计 5、数据库设计 6、数据表 6、运行截图(部分) 6.1、管理员功能模块 6.2、教师功能模块 7、源码获取 基于springboot的课程作业管理系统 1、前言介绍 …

VBA之Word应用:利用Bookmark属性返回选择区域的开始和结束位置

《VBA之Word应用》(版权10178982),是我推出第八套教程,教程是专门讲解VBA在Word中的应用,围绕“面向对象编程”讲解,首先让大家认识Word中VBA的对象,以及对象的属性、方法,然后通过实…

2024年新算法:基于牛顿-拉夫逊优化器NRBO的城市三维无人机路径规划(复杂地形三维航迹路径规划)

摘要:本文提出了一种利用牛顿-拉夫逊优化器(Newton-Raphson-based optimizer,NRBO)来解决城市环境下无人机三维路径规划问题的方法。这种方法将复杂的无人机航迹规划任务转化为一个优化问题,然后运用牛顿-拉夫逊优化器…

文件包含漏洞之包含SESSION(CTF题目)

这次使用的环境是ubuntunginxphpmysql 首先四个文件源码在以下链接中: 一道CTF题:PHP文件包含 | Chybeta 我们注册一个用户名111密码111,然后登录查看cookie和linux的session,因为我们的de服务器 是手动搭建的,所以…

论文阅读:Face Deblurring using Dual Camera Fusion on Mobile Phones

今天介绍一篇发表在 ACM SIGGRAPH 上的文章,是用手机的双摄系统来做人脸去模糊的工作。这也是谷歌计算摄影研究组的工作。 快速运动物体的运动模糊在摄影中是一个一直以来的难题,在手机摄影中也是非常常见的问题,尤其在光照不足,…

第十三届蓝桥杯省赛真题 Java C 组【原卷】

文章目录 发现宝藏【考生须知】试题 A: 排列字母试题 B: 特殊时间试题 C: 纸张尺寸试题 D: 求和试题 E : \mathbf{E}: E: 矩形拼接试题 F: 选数异或试题 G: GCD试题 H: 青蛙过河试题 I: 因数平方和试题 J \mathrm{J} J : 最长不下降子序列 发现宝藏 前些天发现了一个巨牛的人…

关于防火墙

文章目录 一、安全技术和防火墙1、安全技术2、防火墙的分类2.1 按保护范围划分2.2 按实现方式划分2.3 按网络协议划分2.3.1 包过滤防火墙2.3.2 应用层防火墙 二、Linux 防火墙的基本认识1、Netfilter2、防火墙工具介绍2.1 Iptables2.2 Firewalld2.2.1 软件包2.2.2 管理工具 2.3…

【超图】白模数据如何与抽屉效果结合,展示白膜内部结构

作者:taco 最近在支持的过程中,客户在看别的项目中,发现白模是可以抽插的。而非单独一个白色模型建筑。那么如何使用SuperMap产品来实现抽插的效果呢?本篇文章结合SuperMap iDesktopX产品以及SuperMap iClient for Cesium产品进行…

大数据开发--01.初步认识了解

一.环境准备 1.使用虚拟机构建至少三台linux服务器 2.使用公有云来部署服务器 二.大数据相关概念 大数据是指处理和分析大规模数据集的一系列技术、工具和方法。这些数据集通常涉及海量的数据,包括结构化数据(如关系型数据库中的表格)以及…

mysql部署(1)单节点安装卸载

以8.0.36版本为例 一、下载安装 1、准备工作 (1)查看系统版本 cat /etc/redhat-release(2)查看是否安装了 MySQL rpm -qa | grep mysql查看是否有安装 mariadb,该软件与 MySQL 数据库有冲突,需要手动卸…

【C++庖丁解牛】继承的概念及定义 | 继承中的作用域 | 继承与友元继承与静态成员 | 复杂的菱形继承及菱形虚拟继承

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.继承的概念及定义1.1继…

(2024,EBGAN,扩散,变分近似)通过扩散过程改进基于能量的对抗模型

Improving Adversarial Energy-Based Model via Diffusion Process 公和众和号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 2. 相关工作 3. 去噪扩散对抗 EBM 3.1. 具有去噪扩散过程…

JavaScript中a++和++a的区别是什么?

在JS中,a 和 a 都是对变量 a进行自增操作,但是他们在执行的行为和结果上有些不同: a (前缀自增): 首先是将a的值增加1,然后返回 a 增加后的值。这意味着,表达式的其余部分使用 a的时候, a 的值…

人大金仓携手中国大地保险上线核心超A系统

2023年底 中国大地保险 卡园三路59号办公室里 一群技术精英们正忙碌着 他们的眼中闪烁着对即将到来的胜利的期待 这是大地保险超A系统 项目上线的关键时刻 也是通过科技创新 引领行业服务新趋势的一场征程 项目现场 一次颠覆:改变传统保险服务模式 超A平…

微信小程序项目实战遇到的问题

我们以学生成绩平台来作为例子。这是我们想得到的效果。 以下是完整代码: index.js // index.js Page({//页面的初始数据data: {hello: 欢迎进入微信小程序的编程世界,score: 80,userArray: [{name: 张三,score: [66, 77, 86, 70, 90]},{name: 李四,score: [88, 7…

中国传统游戏-幻方-c/c++实现

幻方(Magic Square)是一种将数字安排在正方形格子中,使每行、列和对角线上的数字和都相等的方法。 幻方也是一种中国传统游戏。旧时在官府、学堂多见。它是将从一到若干个数的自然数排成纵横各为若干个数的正方形,使在同一行、同…
最新文章