当前位置:网站首页>11. 分布式系统接口,如何避免表单的重复提交?
11. 分布式系统接口,如何避免表单的重复提交?
2022-07-18 07:02:00 【Jasonakeke】
关于怎么实现承载更多用户量的系统,一直是我重点关注的一个技术方向。改造架构提高承载力,通常来讲分为两个大方向,互相配合实现。
硬件架构改进,主要是使用阿里云这种多组件的云环境:通过负载均衡SLB,模版克隆的云服务器ECS,云数据库RDS,共享对象存储OSS等不同职责的云产品组合实现。
软件架构优化,主要是软件代码开发的规范:业务解耦合,架构微服务,单机无状态化,文件存储共享等
在分布式系统的学习途中也不断见识新的知识点,今天要说的就是软件开发时候对于接口服务的“幂等性”实现!
幂等性
效果:系统对某接口的多次请求,都应该返回同样的结果!(网络访问失败的场景除外)
目的:避免因为各种原因,重复请求导致的业务重复处理
重复请求场景案例:
客户端第一次请求后,网络异常导致收到请求执行逻辑但是没有返回给客户端,客户端的重新发起请求
客户端迅速点击按钮提交,导致同一逻辑被多次发送到服务器
简单来划分,业务逻辑无非都可以归纳为增删改查!
对于查询,内部不包含其他操作,属于只读性质的那种业务必然符合幂等性要求的。
对于删除,重复做删除请求至少不会造成数据杂乱,不过也有些场景更希望重复点击提示的是删除成功,而不是目标不存在的提示。
对于新增和修改,这里是今天要重点关注的部分:新增,需要避免重复插入;修改,避免进行无效的重复修改;
幂等性的实现方式
实现方法:客户端做某一请求的时候带上识别参数标识,服务端对此标识进行识别,重复请求则重复返回第一次的结果即可。
举个栗子:比如添加请求的表单里,在打开添加表单页面的时候,就生成一个AddId标识,这个AddId跟着表单一起提交到后台接口。
后台接口根据这个AddId,服务端就可以进行缓存标记并进行过滤,缓存值可以是AddId作为缓存key,返回内容作为缓存Value,这样即使添加按钮被多次点下也可以识别出来。
这个AddId什么时候更新呢?只有在保存成功并且清空表单之后,才变更这个AddId标识,从而实现新数据的表单提交
边栏推荐
- 01. Introduction to machine learning
- 【PCB开源分享】STC32G12K128/STC8H8K64U开发板
- How to write a custom annotation
- 上汽荣威rx5max满意度测试,彰显国产品牌实力
- OD窗口修改
- 旅行商的背包(二进制优化多重+0/1背包枚举体积))
- Load properties file
- Traveling salesman's knapsack (binary optimized multiple +0/1 knapsack enumeration volume))
- 原厂直销MOS管 KNL42150 3A/1500V 可提供样品
- Single arm routing and layer 3 switching
猜你喜欢
运用滤波反投影的方法对图像进行重建matlab仿真
80、【backtrader基金策略】实现上证50ETF和创业板ETF轮动交易策略(2022-07-17更新)
尚学堂-软件测试(1)软件测试课程体系,优势,学习建议,了解软件,软件测试和缺陷,软件测试流程,调试与测试,测试与开发单元测试,集成测试,系统测试
Getting started learning Nacos
Sentinel current limiting rules (flow control mode: direct, associated, link)
Shufflenet series (1): explanation of shufflenet V1 theory
The original direct selling MOS tube knl42150 3a/1500v can provide samples
【愚公系列】2022年7月 Go教学课程 012-强制类型转换
力扣刷题231. 2 的幂
60种特征工程操作:使用自定义聚合函数
随机推荐
VMware PAGE_FAULT_IN_NONPAGED_AREA (蓝屏??)
Shrimp Shope get commodity list API return value description according to keywords
查询一个表得某字段,在另外一个表某字段中包含
Phantomjs browser download, installation, configuration of environment variables and use tutorial
Fully Pipelined Bloom Filter Architecture论文总结
The branch and circular structure of the basic knowledge of C language
Viterbi维特比译码误码率仿真,调制为QPSK,信道为高斯白噪声
web中间件日志分析脚本2.0(shell脚本)
MySQL-CRUD的基础操作
云计算导论课后习题第四章
原厂直销MOS管 KNL42150 3A/1500V 可提供样品
UE4/5中实现跟随Actor移动的控件:以NPC头顶上的血条为例
dp(数字三角形模型) 方格取数
Rust之泛型特化
CV-Model【4】:ResNet-34
2022_SummerBlog_011
Sentinel-流控效果
【PCB开源分享】STC8A8K64D4开发板
Oracle Data Guard服务、进程与保护模式
Introduction to cloud computing after class exercises Chapter 4