引言:
微服务中,网络调用随处可见,也带来了很多问题,对于底层搬砖程序员,最明显的影响就似乎分布式事务、网络波动异常等。接口可重入以及接口无状态往往是解决这些问题的关键。
1. 什么是“可重入”
一般情况下,可重入指的是接口(函数)可以重复调用且不发生异常。
个人认为,与幂等相比,可重入是一个业务概念。
幂等指的是相同输入必定有相同输出,而可重入不一定要保证每次都是相同输出,只要保证逻辑正确即可。
比如登录接口,第一次登录成功后进行重复登录,若返回“登录成功”此时是幂等的(也是可重入的),若返回“您已登录”此时是可重入的但非幂等。
个人觉得没必要纠结幂等与可重入的概念细节差异。
注:重入问题和不可重入问题和可重入问题,都是同一个问题,都是指:可能存在不可重入的情况,但是想要保证可重入。
2. 可能出现重入问题的接口
非幂等接口必定存在重入问题,但该粒度不是本文分析重点。
2.1 单个网络调用
单个网络调用也会发生不可重入问题,这是极其容易被忽视的情况。
举一个简单的例子,以mysql为例。
需求:给张三的余额增加10元&#x