「星球精选」如何保证幂等机制
Posted 服务端思维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「星球精选」如何保证幂等机制相关的知识,希望对你有一定的参考价值。
回顾「知识星球」在「2018年的第13周」的分享内容。同时,欢迎加入「后端群」与「知识星球」共同探讨,一起进步,文末扫描关注。
星球回顾
星球精选 - 如何保证幂等机制
摘自于「服务端思维」知识星球(2018-03-19)
幂等机制的核心是保证资源唯一性,例如客户端重复提交或服务端的多次重试只会产生一份结果。支付场景、退款场景,涉及金钱的交易不能出现多次扣款等问题。事实上,查询接口用于获取资源,因为它只是查询数据而不会影响到资源的变化,因此不管调用多少次接口,资源都不会改变,所以是它是幂等的。而新增接口是非幂等的,因为调用接口多次,它都将会产生资源的变化。因此,我们需要在出现重复提交时进行幂等处理。
那么,如何保证幂等机制呢?事实上,我们有很多实现方案。其中,一种方案就是常见的创建唯一索引。在数据库中针对我们需要约束的资源字段创建唯一索引,可以防止插入重复的数据。但是,遇到分库分表的情况是,唯一索引也就不那么好使了,此时,我们可以先查询一次数据库,然后判断是否约束的资源字段存在重复,没有的重复时再进行插入操作。注意的是,为了避免并发场景,我们可以通过锁机制,例如悲观锁与乐观锁保证数据的唯一性。这里,分布式锁是一种经常使用的方案,它通常情况下是一种悲观锁的实现。但是,很多人经常把悲观锁、乐观锁、分布式锁当作幂等机制的解决方案,这个是不正确的。除此之外,我们还可以引入状态机,通过状态机进行状态的约束以及状态跳转,确保同一个业务的流程化执行,从而实现数据幂等。
事实上,并不是所有的接口都要保证幂等,换句话说,是否需要幂等机制可以通过考量需不需要确保资源唯一性,例如行为日志可以不考虑幂等性。当然,还有一种设计方案是接口不考虑幂等机制,而是在业务实现的时候通过业务层面来保证,例如允许存在多份数据,但是在业务处理的时候获取最新的版本进行处理。
推荐阅读
「服务端思维」知识星球订阅
邀请您的加入,微信扫描,加入星球。一起交流,一起成长。
以上是关于「星球精选」如何保证幂等机制的主要内容,如果未能解决你的问题,请参考以下文章