简单的幂函数 幂函数十六字口诀


对于开发人员而言,日常工作中不可避免地需要开发大量的接口,其中包括了读接口与写接口。特别地,对于写接口的开发,除了需确保其性能与可用性外,还需面临一个至关重要的议题——如何保障接口的幂等性。

幂等性详解

那么,何为幂等性?幂等(Idempotence)是数学与计算机科学中的概念,常见于抽象代数中。在编程语境下,一个幂等操作的特点是其无论执行多少次,所带来的影响与单次执行保持一致。具体而言,幂等函数或方法指的是使用相同参数重复执行后,能够获得相同结果的函数。这类函数的特点是不会改变系统状态,即便重复执行也不会对系统造成影响。

在百度百科的解释中,我们可以简化为:一个接口,无论调用多少次,只要参数不变,其结果应该保持不变。

实际工作中,我们讨论的幂等性通常分为两种类型:请求幂等业务幂等

请求幂等意味着当请求的参数相其结果应当是一致的。

业务幂等则是指同一业务请求在达到最终状态后,后续的请求应保证结果的一致性。在未达到最终状态前,每次请求需正常执行业务逻辑,直至推动至最终状态。

通常来说,我们讨论的幂等性大多指的是业务幂等。例如,在一次支付请求中,如果支付状态显示为处理中或系统异常等情况,我们需要进行重试调用,持续调用直至明确收到支付成功或无法成功的支付失败结果。

如何保障幂等性?

要保障接口的幂等性,一个简单的方法是在进行业务操作前先进行查验,判断该操作是否已执行过。若已执行则不再重复操作,否则继续执行。

这种方法在高并发场景下可能存在“幂等击穿”的问题。为了解决这一问题,我们需要做好并发控制。而谈及并发控制,首先想到的便是锁机制。

针对解决幂等问题,“请记住这个口诀:‘一锁定乾坤,二判定结果,三更新状态’。”

一锁:第一步需加锁以确保操作的互斥性。可以使用分布式锁或悲观锁等方式进行加锁。

二判定:第二步进行幂等性判断。这可以通过状态机、流水表或唯一性索引等方式来判断是否为重复操作。

三更新:第三步对数据进行更新并持久化。

以上三步需严格按照顺序执行:先成功加锁后进行数据查询与判断;通过幂等性判断后再进行数据更新;最后更新完成后释放锁。

以上操作的前提是第一步加锁与第二步判断时需有一个依据——即幂等号。通常需要与上游约定一个唯一ID作为幂等号。通过对该幂等号加锁并进行幂等判断即可实现幂等控制。

一锁过程的建议:推荐使用Redis实现分布式锁。因其是非阻塞的高效互斥锁,非常适合用于幂等控制场景。

二判过程的建议:若存在操作流水则建议基于操作流水进行幂等判断并将幂等号作为唯一性约束以确保唯一性。若没有流水则基于状态机进行判断亦可。