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

分布式:浅谈幂等

幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。

在编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和 setTrue()”函数就是一个幂等函数。简言之:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的。

一、幂等有哪些技术解决方案

1、查询操作

查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select 是天然的幂等操作。

2、删除操作

删除操作也是幂等的,删除一次和多次删除都是把数据删除。注意:可能返回结果不一样,删除的数据不存在,返回 0,删除的数据多条,返回结果多个。

3、唯一索引

防止新增脏数据。比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建多个资金账户,那么给资金账户表中的用户 ID 加唯一索引,所以一个用户新增成功一个资金账户记录。

要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可。

4、token 机制

防止页面重复提交。

业务要求:页面的数据只能被点击提交一次;
发生原因:由于重复点击或者网络重发,或者 nginx 重发等情况会导致数据被重复提交;
解决办法:
(1)集群环境,采用 token 加 redis(redis 单线程的,处理需要排队);
(2)单JVM环境,采用 token 加redis或token加 jvm 锁。

处理流程:
(1)提交前,向服务申请 token,token 放到 redis 或 jvm 内存,token设置有效时间;
(2)提交后,后台校验 token,同时删除 token,生成新的 token 返回。

token 特点:要申请,一次有效性,可以限流。
注意:redis 要用删除操作来判断 token,删除成功代表 token 校验通过。

5、 TraceId

操作时TraceId是唯一的。

二、对外提供的API如何保证幂等

举例说明: 银联提供的付款接口,为了支持幂等调用,需要接入商户提交付款请求时附带source 来源,seq 序列号。source+seq 在数据库里面做做联合唯一索引,这样当第三方调用时,先在本方系统里面查询一下,是否已经处理过,返回相应处理结果;没有处理过,进行相应处理,返回结果。

注意,为了幂等友好,一定要先查询一下,是否处理过该笔业务,不查询直接插入业务系统,会报错,因为实际已经处理。


http://www.kler.cn/news/293098.html

相关文章:

  • 浅谈城市地铁智能照明系统的能耗分析及节能措施
  • 深度学习应用 - 大规模深度学习篇
  • pytorch pyro 贝叶斯神经网络 bnn beyesean neure network svi ​定制SVI目标和培训循环,变更推理
  • 算法day16|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 救命!我已经彻底被最近的FLUX模型征服了
  • 东南大学研究生-数值分析上机题(2023)Python 3 线性代数方程组数值解法
  • 初始MYSQL数据库(2)——创建、查询、更新、删除数据表的相关操作
  • python语言读入Excel文件
  • C++复习day05
  • Selenium分布式测试和操作监听
  • AUTOSAR开源OS——Trampoline的编译与使用(一)
  • Hive的存储格式
  • 晨控CK-FR08与汇川5U系列PLC配置EtherNet/IP通讯连接手册
  • MySQL的知识阶段小总结
  • k8s服务发布Ingress
  • 【高级编程】万字整理集合框架 迭代器 泛型(含方法案例)
  • 使用 .NET 6 构建跨平台 Worker Service 服务:跨越平台的 C# 服务开发——解决Windows服务跨平台问题
  • typedef关键字讲解
  • List与ArrayList
  • XSS 漏洞 - 学习手册
  • 《响应式 Web 设计:纯 HTML 和 CSS 的实现技巧》
  • Spring Boot集成google Authenticator实现mfa
  • 企业数据治理之主数据--设备主数据
  • 设计模式之装饰器模式:让对象功能扩展更优雅的艺术
  • 基于智能巡检机器人的算力评估指标及其应用场景分析
  • EmguCV学习笔记 VB.Net 9.1 VideoCapture类
  • 如何通过Spring Cloud Consul增强微服务安全性和可靠性
  • C语言调用子函数时入/出栈(保护/恢复现场)全过程分析:以Cortex-M3为例
  • 【免费体验半价使用】ChatGPT的发展历程和重要节点,普通如何使用以及它能给我们带来什么?
  • 深度学习——强化学习算法介绍