概述
在分布式系统实践过程中,幂等性是一个很难绕开的话题,那么幂等性是什么呢,怎么样实践分布式系统中的幂等性呢,今天,我们一起来了解一下。
数学涵义
幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。
在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“setTrue()”函数就是一个幂等函数,无论多次执行,其结果都是一样的.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。
- 定义
在数学里,幂等有两种主要的定义。
在某二元运算下,幂等元素是指被自己重复运算(或对于函数是为复合)的结果等于它自己的元素。例如,乘法下仅有两个幂等实数,为0和1。
某一元运算为幂等的时,其作用在任一元素两次后会和其作用一次的结果相同。例如,高斯符号便是幂等的。
一元运算的定义是二元运算定义的特例
- 二元运算
设S为一具有作用于其自身的二元运算的集合,则S的元素s称为幂等的(相对于*)当
s ? s = s . s *s = s. s?s=s.
特别的是,任一单位元都是幂等的。若S的所有元素都是幂等的话,则其二元运算*被称做是幂等的。例如,联集和交集的运算便都是幂等的。
- 一元运算
设f为一由X映射至X的一元运算,则f为幂等的,当对于所有在X内的x,
f ( f ( x ) ) = f ( x ) f(f(x)) = f(x) f(f(x))=f(x)
特别的是,恒等函数一定是幂等的,且任一常数函数也都是幂等的。
注意当考虑一由X至X的所有函数所组成的集合S时。在f在一元运算下为幂等的若且唯若在二元运算下,f相对于其复合运算(标记为o)会是幂等的。这可以写成
f o f = f f o f = f fof=f
幂等编程
编程涵义
在程序设计方面,关于幂等性的解释就是代码可以被重复调用多次,不会业务数据产生不同的结果。
应用场景
-
表单重复提交
-
分布式环境中的多次重试
解决方案
- 梳理不幂等成立的条件
了解哪些情况下会出现不幂等。
- 针对不幂等场景设计幂等算法
幂等算法主要有以下几种:
(1)令牌算法
(3)乐观锁算法
(3)分布式锁算法