【◐系统架构】分布式系统接口,如何避免表单的重复提交?

使用分布式的好处

很多时候,我们为了更好的承载更多请求,或者稳定的为更多的用户提供服务,那么我们一般会把服务部署多份。以保证服务的高可用,高并发。

但是一项事务有它的好处也有它的坏处,比如分布式服务就要解决幂等性的问题。

幂等性问题

幂等性定义

一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同。

保持幂等性的最终目的

  • 对一个未发生改变的资源,需要无论多少次请求,只要它不改变,返回的结果都一样
  • 避免各种原因的重复提交,导致强求业务的重复处理(因为重复处理,会浪费服务器处理时间、也可能浪费存储空间,还有可能会使相关逻辑业务发生错误)。

如何防止重复提交

对于幂等性问题无非是对增删改查进行幂等性保证处理。

查操作幂等性处理

一般高性能分布式服务都会有缓存,如果只要保证缓存和数据库一致就能解决幂等性问题。

删操作幂等性处理

也和查操作一样,对于高性能服务器,只要保证缓存和数据库一致就可以。

新增和修改幂等性处理

新增要避免重复新增,修改要避免无效修改。

这个处理的时候,需要前端配合。

新增和修改提交时,前端(在某一段时间内,如3秒内,3秒内不允许重复提交)传一个唯一的AddOrUpdateId到后端,后端接收到这个标志,我们把它存入缓存如redis,key为AddOrUpdateId,值为要返回的Value(如 false)。

当有同样的请求访问时,直接返回AddOrUpdateId 对应的Value。

什么时候更新Value,业务完成了就更新Value的值,比如从false变为true(代表添加或者修改成功)

那么 这个缓存的生存周期是多少呢? 你不想用户多长时间内重复提交时间就是多长,2s、3s。

 

posted @ 2023-03-16 13:58  残城碎梦  阅读(38)  评论(0编辑  收藏  举报