分布式系统-幂等性解决方案

幂等操作:是其任意多次执行所产生的影响均与一次执行的影响相同(不用担心重复执行会对系统造成改变)

业务场景:
1.绑定银行卡发送短信接口。如果APP重复点击调用后台接口,后台重复调用第三方接口,造成用户收到多条短信,一般情况下控制在60s内再重发短信,如果不做控制,每一次调用第三方接口都会收费。
2.创建订单接口。如果APP端因网络问题用户重复点击多次,会生成多个订单号,会造成系统业务问题。

数据库操作幂等性介绍:
查询和删除业务,天然的具有幂等的特性; 
1. 查询操作 
在数据不变的情况下,查询一次和查询多次,查询结果是一样的; 
2. 删除操作 
删除一次和多次删除的结果都是把数据删除;

新增和修改业务,不具有幂等的特性;
带有新增和更新的业务接口,如果不做幂等性处理,很可能每调用一次,都会对系统的存储产生影响;

幂等性解决方案
1.数据库表加唯一索引,防止新增脏数据。比如对订单号进行加唯一索引,防止生成重复订单。
如果不加索引的后果是:当根据订单号去支付,支付表生成两条重复的订单号,然后去支付宝、微信、易宝支付去支付,付款完成后,第三方异步回调接口,本地接口首先根据订单号查询实体,发现查询到两条,系统就会抛出异常。
2.分布式锁
利用redis,在业务系统插入数据或者更新数据,获取分布式锁,然后做操作,之后释放锁,这样其实是把多线程并发的锁的思路
3.token机制,防止重复提交
(1). 数据提交前要向服务的申请token,token放到redis中,token有效时间 
(2). 提交后后台校验token,同时删除token,生成新的token返回 

 

你可能感兴趣的:(java)