高并发系统 - 接口幂等技术方案,高可用系统架构与技术选型

2023-09-20 08:06:30

幂等概念来自于数学,在计算机科学中,幂等表示一次后、或多次请求某一资源,应该有同样的影响效果。
在业务表现上一般是同样的数据效果,下面就常用的业务场景,来聊聊幂等的技术方案。

----------------- 数据层 -----------------

  1. 索引与事务
    根据业务需要,给表添加唯一索性或组合索引,防止产生脏数据。
    根据数据库隔离级别,比如可重复读,在操作多表数据时,使用事务,要求数据要么全部操作成功,要么全部失败。
  2. 悲观锁
    根据实际情况使用,查询指定数据时指定用于更新,注意根据主键或唯一索引查询。数据锁定时间可能会很长,会造成读取该数据的等待时间长。
  3. 乐观锁
    乐观锁只在更新数据的那一刻锁表,适用于并发冲突不是很高的场景,可配合业务重试机制。
    乐观锁的实现方式,一般通过版本号或时间戳来实现,其他条件也可。
    之前的文章『MySQL锁与应用场景』,有说乐观锁与悲观锁的SQL示范。

----------------- 业务层 -----------------

  1. 对外提供的接口
    对接外部系统时,使用来源、业务流水号等,作为联合唯一索引,或者生成分布式唯一ID,记录在数据库。
    来请求时,查询数据库流水号已存在,并处理成功,就是重复请求,直接返回。如果数据不存在,记录流水号,开始处理,插入数据成功,接着返回成功。
  2. 先查询再插入
    对于并发不高的业务,为了支持重复执行,简单的处理方式是,查询关键数据来判断&
更多推荐

华为HCIA(三)

链路本地地址接口标识64bit当STP端口到了Forwarding状态后,会转发流量,也处理报文在TCP/IP模型中,会话层,表示层和应用层,都规划成了应用层路由表包含目的地址和掩码,优先级,cost,下一跳和出接口。Destination(目的地)protocol(协议)学习进制!!!在NCP协商完成后,PPP保持通

第37章_瑞萨MCU零基础入门系列教程之DAC数模转换模块

本教程基于韦东山百问网出的DShanMCU-RA6M5开发板进行编写,需要的同学可以在这里获取:https://item.taobao.com/item.htm?id=728461040949配套资料获取:https://renesas-docs.100ask.net瑞萨MCU零基础入门系列教程汇总:https://b

前端实现PDF预览:简单而高效的方法

前言PDF是一种常用的文件格式,但在网页中直接预览PDF文件可能会带来一些挑战。本文将介绍一种简单而高效的前端方法,以实现PDF文件的预览。使用iframe标签嵌入PDF文件最简单的方法是使用iframe标签来嵌入PDF文件。代码如下所示:<iframesrc="/path/to/pdf/file.pdf"width=

HDMI协议Ver2.0a(学习笔记)

1简介本规范由HDMI论坛制定2.目的和范围本文件构成了高清多媒体接口2.0版规范(HDMI规范2.0版)。本规范通过引用纳入了HDMI规范1.4b版,并定义了附加和改进的功能。对Source、Sink、中继器和电缆的合规性所需的机械、电气、行为和协议要求进行了说明。3.TBD4.TBD5.概述HDMI规范2.0版(本

正则表达式相关概念及不可见高度页面的获取

12.正则概念:匹配有规律的字符串,匹配上则正确1.正则的创建方式构造函数创建//修饰符igm//i忽视ignore//gglobal全球全局//m换行varreg=newRegExp("匹配的内容","修饰符")varstr="thisisaBox";varreg=newRegExp("box","igm");con

win10系统 C++环境 安装编译GRPC

第一步下载源码、更新、cmake编译:为了依赖的成功安装,采用gitee进行下载与更新。记得需要安装git软件。安装命令:在自己指定的目录下,鼠标右键,选择gitBashHere打开命令行gitclone-bv1.34.0https://gitee.com/mirrors/grpc-framework.gitgrpc在

java中集合的List

集合的List可以存储重复元素以下情况使用ArrayList:频繁访问列表中的某一个元素。只需要在列表末尾进行添加和删除元素操作。以下情况使用LinkedList:你需要通过循环迭代来访问列表中的某些元素。需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。一.ArrayList可以保存重复元素,底层是数组实

runtime过程中,常见jar问题解决

sourcedownloadIntellijIDEA有时候不下载不了code,使用如下命令,在“terminal”下运行mvndependency:resolve-Dclassifier=sourcesio.nettyjava.lang.NoSuchMethodError:io.netty.buffer.PooledB

四、C#—变量,表达式,运算符(2)

🌻🌻目录一、表达式1.1什么是表达式1.2表达式的基本组成二、运算符2.1算术运算符2.1.1使用/运算符时的注意事项2.1.2使用%运算符时的注意事项2.2赋值运算符2.2.1简单赋值运算符2.2.2复合赋值运算符2.3关系运算符2.4逻辑运算符2.4.1逻辑运算符的使用场合2.4.2逻辑运算符的规则2.4.3&

[python 刷题] 49 Group Anagrams

[python刷题]49GroupAnagrams题目:Givenanarrayofstringsstrs,grouptheanagramstogether.Youcanreturntheanswerinanyorder.AnAnagramisawordorphraseformedbyrearrangingthelet

界面控件DevExpress WinForms HTML-CSS模板:预设计UI模板加速.NET应用开发

在过去的一年里,DevExpress官方引入了两个强大的功能来加速/简化.NET桌面应用的开发,当一起使用时,您可以创建优雅/个性化的用户界面,减少重复的代码,从而节省更多的项目时间。DevExpressWinForms有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。同时能完美构建

热文推荐