网站参考模板,商业网站开发教程,外贸公司做网站,高端定制开发网站分布式系统接口#xff0c;如何避免重复提交 1、基于Token的幂等设计原理实现步骤技术选型 2、基于Token的幂等设计原理实现步骤适用场景 3、幂等性设计原理实现方式 4、分布式锁原理实现方式适用场景 5、请求去重原理实现方式 6.前端防护原理实现方式适用场景 7.延迟队列原理… 分布式系统接口如何避免重复提交 1、基于Token的幂等设计原理实现步骤技术选型 2、基于Token的幂等设计原理实现步骤适用场景 3、幂等性设计原理实现方式 4、分布式锁原理实现方式适用场景 5、请求去重原理实现方式 6.前端防护原理实现方式适用场景 7.延迟队列原理实现方式 在分布式系统中 避免表单重复提交是一项重要的任务 尤其是在处理涉及资金交易、订单创建等敏感业务时。 以下是一些常见的解决方案
1、基于Token的幂等设计
原理 在接口请求前服务器生成一个唯一的 Token可以是 UUID 或其他唯一标识并将其下发到客户端。 客户端在请求接口时携带该 Token服务器校验该 Token 是否已经使用。 a.如果已使用则拒绝重复请求。b.如果未使用则处理请求并将 Token 标记为已使用。实现步骤 生成 Token a.在用户访问接口时生成一个唯一的 Token存储到 Redis 或数据库中并返回给客户端。校验 Token a.接口请求时服务器接收到 Token与存储的 Token 对比确保 Token 的唯一性。标识 Token a.请求处理完成后立即将 Token 标记为已使用避免再次使用。技术选型
使用 Redis 可以高效处理 Token可以为 Token 设置 TTL如 5 分钟避免长时间占用资源。
2、基于Token的幂等设计
原理
针对业务中存在唯一性约束的字段如订单编号、交易流水号在数据库中添加唯一索引。即使分布式系统中有重复的请求由于唯一索引的存在数据库会拒绝重复写入。
实现步骤
客户端生成一个唯一的业务编号如订单编号。服务端在数据库写入时依赖唯一约束来防止重复提交。如果数据库插入失败因唯一约束则返回错误提示。
适用场景
适用于有明确唯一性标识的业务场景例如订单号、交易号等。
3、幂等性设计
原理
确保请求的接口是幂等的即多个提交的结果一致常用手段包括状态机和更新操作。
实现方式
状态机更新操作
4、分布式锁
原理
针对同一用户或同一操作使用分布式锁来限制并发请求的处理。
实现方式 获取锁 a.使用 Redis 或 Zookeeper 创建分布式锁。锁的 Key 可以是用户 ID 或业务 ID。处理请求 a.如果获取到锁则处理请求如果未获取到锁则直接返回错误提示。释放锁 a.请求处理完成后释放分布式锁。适用场景
避免高并发场景下的重复提交。
5、请求去重
原理
对于每个请求计算唯一的签名如 MD5 或 SHA256用于标识请求内容。服务端根据签名判断请求是否已处理。
实现方式
1. 生成签名
a. 基于接口字段内容生成签名如String signature MD5Utils.generateSignature(接口参数);2. 存储签名
a. 服务端存储签名一般是放在 Redis 里边3. 校验签名
a. 适用于接口内容较复杂且需要精确去重的场景。6.前端防护
原理
利用前端技术手段减少重复提交的可能性。
实现方式
1.按钮防重复点击
在用户提交表单后立即禁用提交按钮避免多次点击。示例
document.getElementById(submit).disabled true;2.表单防回退提交
提交成功后清空或销毁表单数据。
适用场景
适用于用户误操作导致的重复提交但无法解决恶意重复提交。
7.延迟队列
原理
将接口提交请求放入消息队列中进行处理系统只接受队列中的唯一消息。
实现方式
1、消息入队
接口提交时将请求放入消息队列如 Kafka、RabbitMQ。
2、消息去重
在消息处理阶段服务端检查消息 ID 是否已处理。
3、延迟处理
设置延迟队列确保请求在短时间内不会重复处理。