分布式系统幂等性

一:引言
幂等性的重要性不言而喻。记得我第一次接触幂等性概念时,是在博主之前公司一个购买理财产品的业务中。场景就是重复购买了这只理财产品,至今记忆犹新。值得一提的是,保证幂等性也算是一种对重放攻击防御手段。对于其他的API安全性设计,请移步到博主的另一篇文章:http://blog.csdn.net/ruben95001/article/details/64441195

二:介绍
幂等性就是对于用户来说,重复的操作等到的结果必然是一致的。不会因为用户重复操作,产生一些附属效果。举个栗子:你在某宝上买了一台肾8,支付扣款成功,但是返回结果的时候网络异常,然后不明所以的你,拼命的点击付款按钮。如果你的账户多次扣款,交易记录也有多条,那么你就亏大了。这就是保证幂等性的重要性。

三:设计和运用
在大家平时的增删改查基本操作中,这些操作都会放入事务中,一旦发生了异常,事务回滚。但是在响应客户端的时候,也有可能出现网络中断或者异常等等不可描述的状况。当然对于删改查操作,幂等性的重要性不能得以体现,然而在新增操作时,幂等性体现的淋漓尽致。想想上面的买肾8的栗子,你就会不寒而栗。
这里我说说的我当时的解决方案:回到用户购买理财产品的场景,解决方案步骤如下:
1:异步请求获取购买理财产品的票据ticketId,该票据是唯一性的,而且是有时效性的30分钟。
2:调用购买理财产品的API,客户端传入票据ticketId,服务器端查询此票据是否存在,如果存在,则表示该操作是有效的,操作成功后删除服务器下票据。童鞋们也可以优化下,进行入库操作等等,不加于赘述。

可能童鞋们也想到了其他的更好的方案,例如加锁等,欢迎大家一起交流。欲想了解数据库的锁机制,移步到另一篇文章:http://blog.csdn.net/ruben95001/article/details/70199031

下一篇将介绍分布式事务,将处理分布式下,数据同步的难题。

完!

猜你喜欢

转载自blog.csdn.net/ruben95001/article/details/78365584