分布式接口幂等性解析

news2025/5/22 22:26:09

一、概述

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

常见场景:

  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.coloradmin.cn/o/1528798.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何在小程序上搭建积分商城呢_小程序搭建积分商城的优势

小程序积分商城:打造你的数字营销新引擎 在数字化营销的时代,如何有效吸引并留住用户,成为了每个企业都面临的重大课题。小程序积分商城,作为一种新兴的营销方式,正在以其独特的魅力,帮助企业实现用户增长…

Python进程与线程开发

目录 multiprocessing模块 线程的开发 threading模块 setDaemon 死锁 线程间的通信 multiprocessing模块 运行python的时候,我们都是在创建并运行一个进程,(linux中一个进程可以fork一个子进程,并让这个子进程exec另外一个程序)。在pyt…

MySQL如何用phpMyAdmin创建定时任务事件来执行SQL语句删除_edit_lock和_edit_last?

前面跟大家分享了『WordPress如何批量删除wp_postmeta数据表无用的_edit_lock和_edit_last数据?』和『宝塔面板在计划任务中怎么执行SQL语句删除_edit_lock和_edit_last?』,但是有些站长并不是使用宝塔面板,那么我们如何时间定时删…

阅读基础知识1

一 网络 1. 三次握手四次挥手 三次握手:为了建立长链接进行交互即建立一个会话,使用 http/https 协议 ① 客户端产生初始化序列号 Seqx ,向服务端发送建立连接的请求报文,将 SYN1 同步序列号; ② 服务端接收建立连接…

走近 AI Infra 架构师:在高速飞驰的大模型“赛车”上“换轮子”的人

如果把大模型训练比作 F1 比赛,长凡所在的团队就是造车的人,也是在比赛现场给赛车换轮子的人。1% 的训练提速,或者几秒之差的故障恢复时间,累积起来,都能影响到几百万的成本。长凡说:“大模型起来的时候&am…

日本科技巨头富士通遭遇网络攻击,客户数据被窃

日本科技巨头富士通3月15日发布通告,宣称公司经历了一起网络攻击事件,客户个人数据已被黑客窃取。 富士通在一份通知中写道:“我们已经确认有几台商用计算机上存在恶意软件,并且经过我们的内部调查,发现包含个人信息和…

Linux权限维持后门及应急响应

本次应急响应实验用kali和centos7来充当攻击机和靶机 kali:192.168.10.130 centos7:192.168.10.155 前提: 用kali连接到centos7上面ssh root192.168.10.155 一、SSH软链接 任意密码登录即可发现程度:|||||| ln -sf /usr/sbi…

卓越巨人wzy

解法&#xff1a; 向下取整同理&#xff0c;f(n)20230416-n 当n20230416时&#xff0c;f&#xff08;n&#xff09;0&#xff0c;之后由于向上取整&#xff0c;结果恒为0. #include<iostream> #include<algorithm> #include<vector> using namespace std; …

网站如何搭建 网站搭建的详细步骤

网站如何搭建 网站搭建的详细步骤 一.领取一个免费域名和SSL证书&#xff0c;和CDN 1.打开网站链接&#xff1a;https://www.rainyun.com/z22_ 2.在网站主页上&#xff0c;您会看到一个"登陆/注册"的选项。 3.点击"登陆/注册"&#xff0c;然后选择"…

下拉树级带搜索功能

可以直接复制粘贴到自己的项目里,方法处把接口替换一下 <template><div><el-popoverplacement"bottom"width"200"trigger"click"><el-inputslot"reference"class"mrInput":placeholder"placehol…

巨细!Python爬虫详解

爬虫&#xff08;又称为网页蜘蛛&#xff0c;网络机器人&#xff0c;在 FOAF 社区中间&#xff0c;更经常的称为网页追逐者&#xff09;&#xff1b;它是一种按照一定的规则&#xff0c;自动地抓取网络信息的程序或者脚本。 如果我们把互联网比作一张大的蜘蛛网&#xff0c;那…

二、yocto 集成ros2(基于raspberrypi 4B)

yocto 集成ros2 yocto 集成ros21. 下载ros layer2. 编译集成ros3. 功能验证 yocto 集成ros2 本篇文章为基于raspberrypi 4B单板的yocto实战系列的第二篇文章。 一、yocto 编译raspberrypi 4B并启动 本节我们将ros2机器人操作系统移植到我们的yocto系统里面。 1. 下载ros laye…

Ansible基本介绍与模块使用

目录 引言 一、Ansible简介 &#xff08;一&#xff09;基本概述 &#xff08;二&#xff09;主要特点 二、Ansible安装及基本组件 &#xff08;一&#xff09;yum安装 &#xff08;二&#xff09;编译安装 &#xff08;三&#xff09;基本配置信息 1.主配置文件 2.主…

v-bind 绑定 class 与 style 基础用法

使用 v-bind 指令绑定 class 和 style 时语法相对复杂一些&#xff0c;这两者是可以互相替代的&#xff0c;均用于响应更新HTML元素的属性&#xff0c; v-bind 绑定 class 属性可以改写成绑定 style 属性&#xff0c;只是 css 属性位置变了而已。 1. 绑定 class 属性 1.1 数组…

GPT-4与Claude3、Gemini、Sora:AI领域的技术创新与突破

【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】 2023年随着OpenAI开发者大会的召开&#xff0c;最重磅更新当属GPTs&#xff0c;多模态API&#xff0c;未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义&#xff0c;不亚…

考研失败, 学点Java打小工_Day3_卫语句_循环

1 编码规范——卫语句 表达异常分支时&#xff0c;少用if-else方式。   比如成绩判断中对于非法输入的处理&#xff1a; /*>90 <100 优秀>80 <90 良好>70 <80 一般>60 <70 及格<60 不及格*/Testpu…

行业领袖齐聚香港,共襄区块链盛宴——Symbiosis 联合创始人Nick Avramov确认出席Hack.Summit() 2024区块链开发者大会

随着区块链技术的飞速进步和广泛应用&#xff0c;一场区块链行业的重量级盛会即将在香港数码港隆重举行。由Hack VC主办、AltLayer和Berachain协办&#xff0c;并得到Solana、The Graph、Blockchain Academy、ScalingX、0G、SNZ和数码港等机构的合作支持&#xff0c;由Techub N…

【全开源】JAVA姓氏头像情侣头像家庭头像赚钱签名头像谐音顽埂头像设计小程序头像大全系统源码支持微信小程序+微信公众号+H5|博纳软云

一、功能介绍 用户端&#xff1a;查看近期生成的头像&#xff0c;我的团队&#xff0c;分享好友&#xff0c; 姓氏头像&#xff0c;情侣头像&#xff0c;亲子头像&#xff0c;家庭头像 选择模板&#xff0c;个人资料&#xff0c;修改资料&#xff0c;注销账号。 我们技术使用…

你真的会做抖音小店吗?你做抖店的方法是正确的吗?教学分享

大家好&#xff0c;我是电商花花。 新的一年&#xff0c;不少做抖店的商家都会产生一个疑问&#xff0c;2024年抖音小店无货源还能继续做吗&#xff1f; 做无货源模式还会被处罚吗&#xff1f; 先说答案&#xff0c;2024年抖音小店无货源能做&#xff0c;不仅能做且仍然是抖音…

简明 FastAPI 并发请求指南

在当今的数字化世界中&#xff0c;网络用户对于高速响应和持续连接的诉求日益显著。这促使了基于 Python 构建的 FastAPI 框架受到广泛关注&#xff0c;它不仅现代化且效率极高&#xff0c;而且简化了并行请求的处理。本篇文章旨在探讨 FastAPI 如何处理这类请求&#xff0c;并…