当前位置: 首页 > news >正文

业务幂等性技术架构体系-接口幂等

接口幂等

   对于幂等的考虑,主要解决两点前后端交互与服务间交互。这两点有时都要考虑幂等性的实现。从前端的思路解决 的话,主要有三种:前端防重、PRG模式、Token机制。

前端防重

   通过前端防重保证幂等是最简单的实现方式,前端相关属性和JS代码即可完成设置。可靠性并不好,有经验的人员 可以通过工具跳过页面仍能重复提交。主要适用于表单重复提交或按钮重复点击。

PRG模式

    PRG模式即POST-REDIRECT-GET。当用户进行表单提交时,会重定向到另外一个提交成功页面,而不是停留在原 先的表单页面。这样就避免了用户刷新导致重复提交。同时防止了通过浏览器按钮前进/后退导致表单重复提交。 是一种比较常见的前端防重策略。

token机制

  借助redis单线程和incr是原子性的特点。当第一次获取token时,以token作为key,对其进行自增。 然后将token进行返回,当客户端携带token访问执行业务代码时,对于判断token是否存在不用删除,而是对其继 续incr。如果incr后的返回值为2。则是一个合法请求允许执行,如果是其他值,则代表是非法请求,直接返回。

   那如果先删除token再执行业务呢?其实也会存在问题,假设具体业务代码执行超时或失败,没有向客户端返回 明确结果,那客户端就很有可能会进行重试,但此时之前的token已经被删除了,则会被认为是重复请求,不再进 行业务处理。

这种方案无需进行额外处理,一个token只能代表一次请求。一旦业务执行出现异常,则让客户端重新获取令牌, 重新发起一次访问即可。推荐使用先删除token方案

   但是无论先删token还是后删token,都会有一个相同的问题。每次业务请求都回产生一个额外的请求去获取 token。但是,业务失败或超时,在生产环境下,一万个里最多也就十个左右会失败,那为了这十来个请求,让其 他九千九百多个请求都产生额外请求,就有一些得不偿失了。虽然redis性能好,但是这也是一种资源的浪费。


推荐阅读

业务幂等性技术架构体系

记一次线上SQL死锁事故:如何避免死锁

相关文章:

  • 时序数据异常检测-综述
  • 【蓝桥杯】赛前练习
  • STM32 模块化开发指南 · 第 3 篇 环形缓冲区 RingBuffer 模块设计与单元测试
  • WHAT - React 安全地订阅外部状态源 - useSyncExternalStore
  • 我的Hexo自动Webhook部署方案
  • tree-sitter 的 grammar.js 编写方法
  • 如何进行预算考核
  • Ubuntu22环境下,Docker部署阿里FunASR的gpu版本
  • 【力扣hot100题】(085)单词拆分
  • P8647 [蓝桥杯 2017 省 AB] 分巧克力
  • 智能配电保护:公共建筑安全的新 “防火墙”
  • 大模型评估框架-----OpenCompass模型评估简介
  • js触发隐式类型转换的场景
  • 5. 蓝桥公园
  • TCP/UDP的连接和数据发送过程详解
  • 【模拟电路】稳压二极管/齐纳二极管
  • SGLang实战:从KV缓存复用到底层优化,解锁大模型高效推理的全栈方案
  • vue实现在线进制转换
  • 自定义排序注意点
  • 解决:AttributeError: module ‘cv2‘ has no attribute ‘COLOR_BGR2RGB‘
  • 在centos上做网站/推广注册app赚钱平台
  • 网站建设一年能收入多少钱/网站目录提交
  • 国外做美食视频网站有哪些/今日短新闻20条
  • 团建拓展网站建设需求分析/网站快速排名推荐
  • 网站建设逻辑/怎么进行seo
  • 做企业网站设计/厦门关键词排名推广