【◐系统架构】分布式系统接口,如何避免表单的重复提交?
使用分布式的好处
很多时候,我们为了更好的承载更多请求,或者稳定的为更多的用户提供服务,那么我们一般会把服务部署多份。以保证服务的高可用,高并发。
但是一项事务有它的好处也有它的坏处,比如分布式服务就要解决幂等性的问题。
幂等性问题
幂等性定义
一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。
保持幂等性的最终目的
- 对一个未发生改变的资源,需要无论多少次请求,只要它不改变,返回的结果都一样
- 避免各种原因的重复提交,导致强求业务的重复处理(因为重复处理,会浪费服务器处理时间、也可能浪费存储空间,还有可能会使相关逻辑业务发生错误)。
如何防止重复提交
对于幂等性问题无非是对增删改查进行幂等性保证处理。
查操作幂等性处理
一般高性能分布式服务都会有缓存,如果只要保证缓存和数据库一致就能解决幂等性问题。
删操作幂等性处理
也和查操作一样,对于高性能服务器,只要保证缓存和数据库一致就可以。
新增和修改幂等性处理
新增要避免重复新增,修改要避免无效修改。
这个处理的时候,需要前端配合。
新增和修改提交时,前端(在某一段时间内,如3秒内,3秒内不允许重复提交)传一个唯一的AddOrUpdateId到后端,后端接收到这个标志,我们把它存入缓存如redis,key为AddOrUpdateId,值为要返回的Value(如 false)。
当有同样的请求访问时,直接返回AddOrUpdateId 对应的Value。
什么时候更新Value,业务完成了就更新Value的值,比如从false变为true(代表添加或者修改成功)
那么 这个缓存的生存周期是多少呢? 你不想用户多长时间内重复提交时间就是多长,2s、3s。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
2022-03-16 组合模式
2022-03-16 门面模式
2022-03-16 适配器模式
2022-03-16 装饰器模式
2022-03-16 代理模式
2022-03-16 原型模式
2022-03-16 建造者模式