幂等性,这个概念在系统设计中出现的越来越频繁,有些新手同学在某个软件中初次学习后,就会认为它是这个软件的特定功能。这样,就把这个概念理解得窄了,在后续工作中无法融会贯通。所以,今天,我们就来讲讲什么是幂等性。
我们翻译一下,就是变量x经过f函数多次处理所得到的结果和经过1次处理的结果是完全相同的。
幂等性让人赞叹的地方是它将理论世界和现实世界联系在了一起。很多时候,数学在理论世界与现实世界是有距离的,就像我们永远无法绘制一个绝对的“圆”,也不存在绝对意义上的”点”。就上文中的公式而言,f(x)这一计算过程的实现,存在着成功、失败和未知三种可能性,而未知就是现实世界与理论世界间最大的鸿沟。
与现实世界的所有事物一样,IT系统存在来自多方面的不确定性,硬件故障和软件问题都有,尤其在分布式系统大规模应用后,网络传输更是放大了不确定性。所以,无论是基础软件还是应用软件都会在关键环节利用幂等性原理进行设计,保证处理的确定性。
举个例子,这样一个场景,A系统调用B系统的接口,为B系统的某个账户增加100元余额。场景的实现方式可以有幂等和非幂等两种。
非幂等方式:
B系统提供一个增加100元的接口,A系统调用这个接口,完成增加100元操作。但是,调用过程中可能因为网络抖动,B系统操作成功,但A系统没有得到接口返回结果。这是如果A系统因为超时,再次调用B系统接口且又成功,那么B系统这个账户上最终增加了200元余额。显然这是不符合设计预期的。
幂等方式:
B系统提供两个接口,一个(S1)用来查询账户余额,另一个(S2)用来设置账户余额。A系统先调用S1获得指定账户余额N1,再调用S2设置新的余额(N1+100)。那么,在A系统调用S1和S2的过程中,即使存在未知状态,但是无论A系统重试多少次,直到A系统获得返回结果,B系统的账户只会增加100元余额。
通过这个场景,我们可以提炼出更通俗的解释。幂等性,就是执行任意多次操作产生的结果和执行一次操作产生的结果保持一致。
在幂等性的加持下,我们可以无数次尝试,直到最终获得那个预期的结果。从这个意义上说,幂等性是在这个充满不确定性的世界中,帮助我们寻找确定性的微光。莫名的,有点感动了,哈哈哈。
最后总结一下,幂等性就是”执行任意多次操作产生的结果和执行一次操作产生的结果保持一致“,一定要记住本文开头的公式。我们以应用软件间接口调用为例,用比较朴素的设计解释了幂等性概念,其实在各类系统中它的实现方式也有很大差异,也有更为精巧的设计,我们找时间再聊。
原文作者:金融数士;如有侵权,请联系管理员删除。