接口的幂等性设计

2023-11-20

    在高并发或者是安全要求下,后端接口会有多次执行的结果与一次执行的结果要一致的要求,这种接口就叫幂等性接口,需要用到幂等性的接口比较常见的就是用户下单支付等,防止出现重试时对业务造成巨大灾害的危险。下文为设计方案的各个要点。

前端幂等控制

  1. 按钮只能点击一次,如用户点击提交订单号,按钮变灰或页面显示loding状态。防止用户重复点击。
  2. 重定向机制,当用户提交了表单,跳转到另外一个等待处理的页面,然后后台处理完成后再跳转到成功或者失败的界面。这样避免用户按F5刷新浏览器导致重复提交。

全局唯一ID

    要做到幂等性,就需要借助一个唯一的ID来标志每次交易。唯一ID根据业务情况来定,在执行操作前先根据这个全局唯一ID是否存在,来判断这个操作是否已经执行。如果不存在则把全局ID,存储到存储系统中,比如数据库、redis等。如果存在则表示该方法已经执行。
    从工程的角度来说,使用全局ID做幂等可以作为一个业务的基础的微服务存在,在很多的微服务中都会用到这样的服务,在每个微服务中都完成这样的功能,会存在工作量重复。另外打造一个高可靠的幂等服务还需要考虑很多问题,比如一台机器虽然把全局ID先写入了存储,但是在写入之后挂了,这就需要引入全局ID的超时机制。

状态机制控制

    很多时候业务表是有状态的,比如订单表中有:1-下单、2-已支付、3-完成、4-撤销等状态。如果这些状态的值是有规律的,按照业务节点正好是从小到大,我们就能通过它来保证接口的幂等性。在更新表时判断状态字段是否符合即可,当数据库更新成功时会返回影响的行数,这样就可做后续的成功与否的逻辑处理。
    在作者另一篇文章提到了关于消息队列如何去重的文章里,提到的就是用状态机制来控制的方案,业界通常叫这种方式为重试机制,这里放个图。

分布式锁

    分布式锁的机制跟全局唯一ID是相似的,不过既然是锁,那就说明同时只能有一个线程执行同一种操作,对高并发场景是不太适用的,分布式锁分三种实现方式:数据库唯一索引、redission、zookeeper,感兴趣深入的可自行查找相关资料,这里就不扩展了。

消息队列

    将请求快速的接收下来,放入消息队列中,后续消费者服务可自行用逻辑去重。此方法优点是异步处理、高吞吐,不足是不能及时返回请求结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

接口的幂等性设计 的相关文章

  • 处理大并发之一 对异步非阻塞的理解

    处理大并发之一 对异步非阻塞的理解 在研究nginx和node js的时候常会遇到异步 非阻塞等 之前自己也经常使用epoll 对其同步与阻塞 异步与非阻塞有了一定的认识 现对参考资料总结下 首先讨论下使用事件驱动 异步编程的优点 充分利用
  • 记一次Elasticsearch节点状态red的整改过程

    文章目录 问题起因 Round 1 Round 2 Round 3 Round 4 总结 问题起因 自己负责审计日志模块的管理功能 同事突然对我说 写入的日志数据全部不能用了 我立即答复 回怼 不可能 说罢 还是去登录系统查看 能查出数据
  • 基于self-attention的BIGRU时间序列预测Python程序

    基于self attention的BIGRU时间序列预测Python程序 特色 1 单变量 多变量输入 自由切换 2 单步预测 多步预测 自动切换 3 基于Pytorch架构 4 多个评估指标 MAE MSE R2 MAPE等 5 数据从e
  • paddlepaddle(四)训练与预测验证

    目录 1 内置高级API封装训练 1 1使用paddle Model 封装模型 1 2用Model prepare 配置模型 1 3用Model fit 训练模型 1 4用Model evaluate 评估模型 1 5用Model pred
  • vue父子组件通信方式哪几种

    第一种 props和 emit parent vue
  • Unity打开工程时卡住的问题

    自从Unity升级了一个版本后 Unity打开工程卡住的问题越来越严重了 具体表现为 选择工程后 Unity窗口消失 但进程还在 有时候等个几分钟能出来 有时候等10分钟都不见得能出来 直观感受上看 似乎是Unity加载工程的时候某一步卡了
  • C++抽象工厂模式:Abstract Factory Pattern

    抽象工厂模式是工厂方法模式的升级版本 工厂方法模式只有一个抽象产品类 而抽象工厂模式有多个 工厂方法模式的具体工厂类只能创建一个具体产品类的实例 而抽象工厂模式可以创建多个 案例 在上一章节工厂方法模式的基础上 将披萨的各种原料生产抽象成一
  • Object-C Cocoapods

    已安装Cocoapods 为项目自动更新配置第三方SDK 在终端中操作如下 1 一般cd到 xcodeproj文件所在目录 cd 空格 路径回车 2 创建Podfile文件 pod init 3 打开Podfile文件并输入 target
  • EnableAutoConfiguration Attributes should be specified via @SpringBootApplic

    在排除数据源加载时 发现这个注解 EnableAutoConfiguration exclude DataSourceAutoConfiguration class 会飘红 这是因为在 SpringBootApplication中已经有 E
  • Qt开发入门教程-创建项目

    入门Qt开发教程 版本 QT 5 15 2 创建项目 1 工程类型选择 Qt Widgets Application 传统的c 不适合移动端开发 QtWidgets 使用QPainter依次为每个界面元素渲染 不断地重复渲染状态 每次打开都
  • 面经-Bosch博世无锡&UL美华

    工作总算有所眉目了 太多的总结暂时还没有太多心情来理清楚 先来两个面经 给可能现在或以后需要的人们1 Bosch 博世无锡柴油系统博世公司 业内的人都知道 汽车部件的巨无霸 最近几年才来到中国 虽然比起德尔福有些稍晚 但发展前景值得期待 无
  • R语言读取Excel的神器——openxlsx

    作为非程序猿的各位同志们 可能最擅长的数据整理软件或者统计软件就是 嗯 没有错 它就是集万千宠爱于一身的E X O 咳咳咳 好了 隆重推出我们的主角 Excel 事实上 Excel是个super强大的软件 基本上用它已经能完成大量的统计分析
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • 软件工程实验:银行储蓄系统

  • Eclipse 导入Maven项目,提示Project .. already exists Add a version or custom suffix using “Name template“

    今天从svn 上检出项目至本地的Eclipse workspace 工作空间 提示如下截图错误 Project already exists Add a version or custom suffix using Name templat

随机推荐

  • 解决方案不显示分类的

    解决方案无法显示头文件 源文件等分类 现象 正常显示 错误显示 原因 对应解决方案的filters文件里有不匹配的标签
  • 题目描述001

    题目描述001 入职后 导师会请你吃饭 你选择了火锅 火锅里会在不同时间下很多菜 不同食材要煮不同的时间 才能变得刚好合适 你希望吃到最多的刚好合适的菜 但你的手速不够快 用m代表手速 每次下手捞菜后至少要过m庙才能在捞 每次只能捞一个 那
  • 基于TensorFlow2实现的宠物识别系统(爬虫、模型训练和调优、模型部署)

    目录 开发环境 0 项目准备 1 数据集准备 2 数据预处理 3 构建模型 4 模型训练及验证 5 模型部署 6 项目地址 开发环境 作者 嘟粥yyds 时间 2023年8月25日 集成开发工具 PyCharm Professional 2
  • 关于vue.config.js中配置前端代理

    写在前边 注意开发环境的本地代理或者测试环境的代理 在部署到正式上时 一定要换成线上的IP地址 不然 数据拿不到哦 代理配置 esay mock新地址 模拟接口地址 就以第一个进行说明怎么配置和使用了 只说代理配置部分 其它不再说明 新建项
  • Response响应方法详解

    Response 响应 服务器把请求的处理结果告知客户端 在B S架构中 响应就是把结果带回浏览器 响应对象 在项目中用于发送响应的对象 常用状态码 状态码 说明 200 执行成功 302 它和307一样 都是用于重定向的状态码 只是307
  • M3U8文件简介及在线播放器

    m3u8文件格式 M3U8是Unicode版本的M3U 用UTF 8编码 M3U 和 M3U8 文件都是苹果公司使用的 HTTP Live Streaming HLS 协议格式的基础 这种协议格式可以在 iPhone 和 Macbook 等
  • QSpinBox修改样式 去掉上下键

    1 找到QSpinBox控件 右键 改变样式表 将以下代码粘贴进去 QSpinBox border 1px solid 242424 QSpinBox up button QSpinBox down button width 0px 修改前
  • Dev-C++之开启装逼效果

    Dev C 是个不错的C IDE 在10年前 它是很不错 在现在 它是个以界面丑陋和调试像吃粑粑这两点著称 如下图 实在是丑到离谱 丑到无法忍受 可是没办法呀 人家CCF规定比赛用这个 你个小蒟蒻吵什么 我现在就来讲讲怎么把你的Dev C
  • 【Android -- 面试】Android 知识点(四大组件)

    目录 文章目录 目录 Activity Fragment Service Broadcast Receiver ContentProvider Activity 1 说下 Activity 的生命周期 参考回答 在 Activity 的生命
  • Syntax Error: Error: PostCSS received undefined instead of CSS string

    Syntax Error Error PostCSS received undefined instead of CSS string Module Error from node modules sass loader dist cjs
  • 异步Buck和同步Buck的特点

    1 介绍 随着时代的发展 工业 车载 通信 消费类等产品都提出了小型化 智能化的需求 相应的 对于这些系统中的电源模块提出了小型化的要求 目前 市场上依然存在很多异步Buck电源管理芯片使用的场景 针对这些应用 采用同步Buck电源管理芯片
  • 今日热榜前 5 的 GitHub 项目

    今日开源热榜 Top5 项目目录 1 纪念左耳朵耗子 2 你的第二大脑 3 大模型开发人员需要记住的数 4 短链接管理工具 5 StableStudio 01 纪念左耳朵耗子 MegaEase 创始人兼 CEO 陈皓 网名 左耳朵耗子 于上
  • VSCode搭建ARM(STM32开发环境)

    目录 需要用到的工具 软件安装 下载安装 Visual Studio Code 下载安装 STM32Cubemx 下载安装 ARM GCC交叉编译工具链 下载安装 Msys2 下载安装 OpenOCD 下载安装 Make 开发环境配置 ms
  • 虚拟机扩容,解决虚拟机磁盘根目录不足

    当你打开虚拟机时会提示 你的磁盘根目录不足 这表明你需要对自己的虚拟机进行扩容 详细步骤如下 第一步 你需要将自己的虚拟机关机 即关闭电源 第二步 右键你需要扩容的虚拟机 然后点击设置 第三步 点击硬盘 第四步 点击右边进行扩容 将磁盘容量
  • 小米手机无法调试应用解决Installation failed with message Failed to establish session.

    小米手机性价比高 有些问题也很尖锐 比如我的5S用了黑科技 试验品 超声波指纹解锁 识别率就很低 每次解锁都要哈口气 真后悔 而且最近又遇到新问题 我的小米5S无法通过android studio调试应用 卖批啊 但即使这样也比蓝绿工程的O
  • Java集合之单列集合

    分类 集合分为单列集合 Collection 和双列集合 Map 单列集合的体系结构 List集合和Set集合的区别 List系列集合 添加元素是有序的 添加的顺序 而非数据的大小顺序 可重复 有索引 Set系列集合 添加的元素是无序的 添
  • erlang escript使用

    Erlang scripting support 让erlang可以向unix script 一样做脚本使用 script name script arg1 script arg2 escript escript flags script
  • 使用Flask+mysql开发一套自己的搜索引擎(附源码)

    使用Flask mysql开发一套自己的搜索引擎 附源码 前言 主要是针对在内网办公的朋友 可以把这一套部署到单机或者公司服务器 做一些名词查询 语言翻译的功能 如果需要的话可以扩展一下 搞成一套类似于内网网盘的软件 这个我们下期再讲 这期
  • 手游幻想神域服务器显示,幻想神域手游最详细攻略介绍

    幻想神域 是一款公测于2018年的动漫手游 是角色扮演类的游戏 游戏凭借二次元的日系风格 Q萌的人物画风 饱满的人物设定而吸引了很多玩家 游戏玩得多的人得心应手 但是玩得比较少的可能会有点摸不着头脑 那么接下来就给大家介绍一下 幻想神域 的
  • 接口的幂等性设计

    在高并发或者是安全要求下 后端接口会有多次执行的结果与一次执行的结果要一致的要求 这种接口就叫幂等性接口 需要用到幂等性的接口比较常见的就是用户下单支付等 防止出现重试时对业务造成巨大灾害的危险 下文为设计方案的各个要点 前端幂等控制 按钮