什么是幂等?
概念性的来说就是:一次操作执行多次所产生的效果或影响与一次执行的效果或影响相同。(一个操作随便执行多少次,就是相当于执行一次一样)
幂等的应用
「幂等」在数学和计算机领域的应用特别广泛。
我们大多数人接触「幂」这个概念是在数学领域开始,这个表达式肯定再熟悉不过了:
这就是我们认知中的「幂」的概念的起源。其中 n 为底数,m 为指数。整体 称为 n 的 m 次幂(n 的 m 次方)。
所以其实本身来说,「幂等」我把理解为,一个计算不管多少次的「幂」之后结果还是一样,其中我们知道 0 和 1 的随意次「幂」都是自己本身。
在计算机科学领域,「幂等」的概念是特别重要的,而且现在在我们的实际生活中是也是经常会接触到,用一个今天很容易接触到的一个实例。支付宝支付,我们正常情况应该是这样:
- 客户端开始发起支付
- 服务器收到你的请求
- 服务器验证你的请求
- 服务器处理的请求并返回处理结果
但是真实的网络情况是很复杂并且充满不可靠的一个地方,有些情况很常见,如下:
- 如果由于种种原因导致了你支付不成功,那么肯定第一反应肯定是重新尝试了。但是次数就会涉及到是否存在多次付费的情况?
- 如果在客户端用户多次提交了订单支付请求(不同设备上登录同一个账号,在数据未刷新的前提下,重复请求)。那么会不会多次付费呢?
此时「幂等」就显的如此重要,特别是涉及到金钱的问题时,应该会如此的重要。
幂等的实现
在计算机科学领域中,「幂等」的实现就是为了去重,实现去重的方式应该是有很多的。但是其中两个因素是需要着重考虑的。
- 操作标识的唯一性
在上面的支付宝支付中,我需要确保每个交易(指定义上的操作)来说都是具有唯一性的,每次处理的都是同一个交易。在细节上技术来说,需要在支付请求的时候有一个标识这个操作的唯一的标识码。 - 操作唯一性的确定机制
就是如何保证每个操作的标识是唯一的,这个机制需要一个指定的协议。这个实现机制一般是由支付发起端去做,确保这个唯一性是可以放在一个不同用户的高并发环境中也是唯一的。
如果能够实现并且考虑好以上两点,就基本达到了「幂等」的需求。但是在实际运用中还会出现许多不同的情况。