【分布式架构幂等性总结】

news2024/9/21 14:52:14

文章目录

    • 幂等性
    • 什么场景需要幂等设计?
    • 产生幂等性的原因
    • 解决重复操作,实现幂等性

幂等性

接口幂等性就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。比如:公交车刷卡,用户上车后刷码支付扣款成功,如果用户再次点击按钮刷卡并扣款成功,用户查询余额返发现多扣钱了,流水记录也变成了两条,这就没有保证接口的幂等性。因此,当你重复刷卡时,会提示:刷码重复。

什么场景需要幂等设计?

一般对数据要求比较高的场景,如:金钱交易、数据一致性至关重要的业务场景:
在线支付:当用户发起支付请求时,账户要避免重复扣款。
银行交易:确保同一笔交易不会因网络重试等原因被执行多次。
票务系统:在线购票平台在用户购票时,检查所选座位是否已被重复预订。
通信服务:如短信或通话服务,系统会检查是否已为相同内容的请求计费。
任务调度:在定时任务或批处理系统中,确保不会因为任务重启或重试而重复执行相同的操作。
用户注册:防止因重复提交表单而导致用户信息被创建多次。

产生幂等性的原因

1.网络问题:
在分布式系统中,由于网络延迟或不稳定,可能会导致请求被重复发送。
2.客户端重试:
客户端可能会因为各种原因(如超时、错误等)重试请求。
3.服务端重试:
服务端在处理请求时,可能会因为内部错误或依赖服务的问题而重试操作。
4.系统容错:
为了提高系统的容错性,系统设计时会考虑在失败时重试操作。
5.并发控制:
在多线程或多进程环境中,为了避免并发导致的数据不一致问题,需要保证操作的幂等性。
6.事务管理:
在事务处理中,为了保证事务的原子性,需要确保事务中的操作是幂等的。
7.缓存一致性:
在使用缓存系统时,为了保证缓存与数据库之间的一致性,缓存更新操作需要是幂等的。
8.分布式缓存:
分布式缓存中的节点可能会重复接收到相同的更新请求,需要保证操作的幂等性以避免数据不一致。
9.消息队列:
消息队列中的消费者可能会因为各种原因重消费消息,需要保证消息处理的幂等性。
10.负载均衡:
在负载均衡系统中,同一个请求可能会被分配到不同的处理节点,需要保证处理逻辑的幂等性。
11.服务降级:
在服务降级策略中,为了保证核心业务的可用性,可能会重复执行某些操作。
12.用户行为:
用户可能会不小心重复提交表单或点击按钮,需要保证系统的响应是幂等的。
14。第三方集成:
在与第三方服务集成时,第三方服务可能会重复发送相同的请求。
15.定时任务:
定时任务可能会因为调度问题而重复执行。

解决重复操作,实现幂等性

在这里插入图片描述
判断当前的token是否存在,存在业务继续,不存在,业务终端,表示重复提交。
2.唯一事务ID:
为每个事务或操作分配一个全局唯一的ID,使用此ID来识别和防止重复的事务。
账户操作,对同一笔操作,我们用流水来做唯一标识存到数据库中。
trace:唯一主键,业务线用uuid或者雪花算法生成
3.检查重复请求:
在执行操作之前,检查请求是否已经被处理过,例如,通过查找数据库中的记录或检查缓存中的标记。
4.状态模式:
使用状态模式来管理对象的状态,确保对象在某个状态下只能执行特定的操作。
我们只操作状态为初始的,执行完成后,将状态更新为已完成。
5.乐观锁:
使用版本号或时间戳来实现乐观锁,确保在读取和更新数据时,数据没有被其他事务修改。
5.悲观锁:
在操作执行期间使用悲观锁来锁定涉及的资源,防止其他操作同时修改同一资源。
6.分布式锁:
使用分布式锁来确保跨多个节点的操作幂等性。
7.消息队列的幂等性:
如果使用消息队列,确保消息消费者能够处理重复的消息,例如通过检查消息的唯一标识符。
8.操作重试策略:
设计重试机制时,确保操作是幂等的,即使重试也不会改变结果。
9.补偿事务:
在分布式事务中,如果操作失败,执行补偿操作(如撤销或回滚)以恢复到原始状态。
10.幂等性存储:
使用幂等性存储系统,如某些NoSQL数据库,它们支持幂等性写入操作。
11.业务逻辑保证:
在业务逻辑层面确保操作的幂等性,例如,通过检查业务实体的特定条件是否满足。
12.限流和降级:
在系统压力过大时,通过限流和降级策略来控制操作的执行,避免因重复操作导致的系统过载。
13.监控和报警:
实施监控机制,对操作的执行进行监控,并在检测到异常时触发报警。
14.事务性消息:
使用支持事务性消息的中间件,确保消息发送和处理的原子性。
15.最终一致性:
在分布式系统中,接受最终一致性模型,通过事件驱动或补偿机制来达到最终的一致状态。
16.服务编排:
使用服务编排工具管理分布式操作,确保幂等性。
17.缓存机制:
利用缓存来减少对数据库的直接访问,缓存可以存储操作的状态或结果,以避免重复计算。
18.API设计:
设计API时,确保操作的幂等性,例如通过使用HTTP的GET、PUT和DELETE方法。
19.数据一致性:
通过事务管理、日志记录、数据校验等手段,确保数据的一致性。
20.用户界面:
在用户界面层面,防止用户重复提交表单或点击按钮。

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

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

相关文章

.NET8 Web 利用BAT命令 一键部署 IIS - CI-CD基础

1. Windows Server 前置准备 1.1 IIS安装好 1.2 .NET8 Sdk 运行时 安装 官方下载地址:https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0 1.3 创建一个.NET8 WebMvc项目 生成发布包 微软MVC这个项目模板直接创建,发布 2. 利用 BAT 来一键部署…

特效与样式(5)——Timetables的使用

第一次使用timetables做学校课表的开发,里面的门道东西挺多的,比我想的要复杂很多。包括我现在也只是实现了课表的初级效果。 主要是标题部分,数据部分,还有颜色控制部分。每个表格都需要一个控制颜色,每次写数据的时候…

hyperf注解,自定义注解

注解是 Hyperf 非常强大的一项功能,可以通过注解的形式减少很多的配置,以及实现很多非常方便的功能。 结构 建立注解 在app下建立Annotation注解文件夹 在Annotation下建立Jim.php注解 下面的的Annotation 和 Target是全局注解,所以不需…

Go学习笔记(一)语法

标准库文档:Go语言标准库文档中文版 | Go语言中文网 | Golang中文社区 | Golang中国 B站课程:8小时转职Golang工程师(如果你想低成本学习Go语言) 课程作者语雀(首页有更多内容):8小时转职Golang工程师 语雀 代码仓…

C语言基础(二十)

链表是一种常见的数据结构,通常用来存储一系列元素,每个元素由一个节点来表示。在链表中,每个节点包含两部分:数据元素本身和指向下一个节点的指针。这种结构使得链表中的元素在内存中不是连续存储的,而是通过指针连接…

可拖拽表单设计器都有哪些突出特点?

为了提高效率、降低开发成本,利用低代码技术平台的优势特点可以实现这一目标。究竟什么是低代码技术平台?都有哪些值得夸耀的特点和优势?今天,我们就带着这些问题,一起来了解低代码技术平台、可拖拽表单设计器的多个优…

香港站群服务器优势

香港站群服务器因其独特的地理位置和网络连接优势,在SEO优化、网站群管理和网络营销等方面受到广泛关注。其优势主要体现在以下几个方面,rak小编为您整理发布。 地理位置优越 连接亚洲国际市场:香港作为亚太地区的重要经济中心,具…

华为2024年秋招-结构与材料工程师-结构方向-机试题(四套)(每套四十题)

华为2024年招聘-结构与材料工程师-结构方向-机试题(四套)(每套四十题) 岗位——结构与材料工程师 岗位意向——结构 真题题目分享,完整版带答案(有答案和解析,答案非官方,未仔细校正&#xff…

详细了解如何设计和实现一个SSO系统?

一、SSO系统有什么好处? 1、用户角度:一次登录多次使用,无需记录多套用户名和密码,省事省心。 2、系统管理员角度:管理员只需要维护好一个统一的账号中心就可以了,方便 3、新系统开发角度:新系统…

(二十六)STL vector容器(动态数组)

动态数组vector是标准模版库(STL, Stardard Template Library)中的模版,它有着节省空间和使用方便的优势,我们用一个形象的例子来说明: 开学了,有40个学生来报名,想要存储每个同学的姓名&#…

数字验证:一文弄懂UVM的factory机制

如果我们用SystemVerilog构建验证平台,构建好了之后,想改变平台中的某个组件,例如将driver改成driver_new,我们需要重新定义一下driver_new,当然也可以直接从driver继承。但是我们还需要在driver对象例化的地方将drive…

PHP同城派送多区域运营配送小程序源码

🚚💨「同城派送多区域运营小程序」——让每一份需求快速触达!🌈🚀 🔥 开篇燃爆:同城生活新风尚,一键速达不是梦! Hey小伙伴们,你还在为找不到合适的同城服务…

WEB渗透Win提权篇-PowerUp

提权工具合集包(免费分享): 夸克网盘分享 往期文章 WEB渗透Win提权篇-提权工具合集-CSDN博客 WEB渗透Win提权篇-RDP&Firewall-CSDN博客 WEB渗透Win提权篇-MSSQL-CSDN博客 WEB渗透Win提权篇-MYSQL-udf-CSDN博客 WEB渗透Win提权篇-Acc…

02-03:原理图与PCB交互以及快速模块化

1原理图与PCB交互 ①在PCB界面,点击工具, 勾选交叉选择模式 ②过滤器只选择元器件 2.按页快速模块化 配合F9快捷键

运放阻抗和噪声(同相放大器的输入/输出阻抗 + 电压跟随器阻抗 + 噪声 +信噪比)

2024-8-27,星期一,21:03,天气:阴雨,心情:晴。培训终于结束啦,开始轮岗了,看了两天PPT,加油加油,继续学习。 今天继续学习第六章运算放大器,主要学…

修改SpringBoot项目中MyBatis的mapper.xml文件的位置

由于MyBatis默认的mapper.xml的扫描位置是resource文件下,但是不可能整个项目的mapper.xml文件都放在resource下,如果文件较少还行,但是如果文件比较多,虽然有插件可以点击跳转,但是每次都这样也太麻烦了,所…

浙商之源——龙游商帮丨龙游商帮的具象文化符号之建筑篇

编撰者:袁勇 [三门源村] 三门源村位于浙江省龙游县石佛乡北部,距县城约28公里。因为进出村庄要经过三道屏障,且穿村而过的溪水又为塔石溪的源头,故称三门源。三门源群山环绕,仅有南面与金衢盆地相接,一泓溪…

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能

无人机 PX4 飞控 | ROS应用层开发:指令(字符串)订阅功能 指令(字符串)订阅功能代码测试 指令(字符串)订阅功能 为了通过键盘触发mavros 的不同功能,需要实现一个订阅字符串的功能 该…

【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现

Socket套接字 现有计算机网络体系结构有三种划分形式:OSI七层协议、TCP/IP四层协议结构、五层协议结构。具体介绍参考:【嵌入式开发之网络编程】网络分层、OSI七层模型、TCP/IP及五层体系结构 网络的体系结构 (Network Architecture) 是计算机网络的各…

MySQL索引(二)

MySQL索引(二) 文章目录 MySQL索引(二)MySQL有哪些索引?MySQL的主键是聚簇索引吗?聚簇索引和非聚簇索引的区别什么是覆盖索引什么是回表主键问题 外键约束什么是外键什么是外键约束外键带来的问题 联合索引最左匹配原则如何建立联合索引索引下推 学习地址…