架构思想之-不一样的幂等设计

什么是幂等?

简单一句话说,就是相同的请求,任何时刻,任何地点,任何次数。效果都是一样。
举例:订单支付接口,假设用户点击了两次,针对同一个订单,发了两次订单支付请求。我们就得保证订单支付接口幂等。只能保证一个请求生效,最终效果还是只付款了一笔订单。

为什么要保证幂等?

  1. 现在的微服务架构,由于网络分区。服务于服务之间不是在同机上。肯定存在网络问题,导致偶尔请求不同,那上游系统必定要重试
  2. 现在很多场景都用到消息中间件。大部分消息中间件都有重试机制,主要保证消息100%可达
  3. 等等其他场景。

上面这些场景,基本都是为了保证请求100% 或者 99% 可达。以冗余重试机制来保证。
那么有些写请求,也可能被重试。那么数据就可能被多次写入。导致商品超卖等等现象。

抛开问题看本质,解决幂等最关键是啥?

解决幂等有很多方法,这里说一种比较常用的利用分布式锁来实现。

其实我们看看这个问题的本质:其实我们只要把请求重试请求串行化+前置校验。不就可以了么?

加锁
{
	1、执行业务逻辑前判断,这条请求是否被处理过,如果处理过 直接return
	2、如果没有被处理过则继续执行
		logic。。。。。。。。
	3、标记该请求已处理过
}
解锁

串行化:主要是保证相同请求只允许放进来一个来处理业务逻辑
前置校验:放进来的请求,判断当次请求是否有效了。

串行化实现方式:通过分布式锁来实现。再此不去展开说,参见我下篇博客
前置校验实现方式:这里要结合业务来实现,例如我们就以订单支付接口为例

加锁
{
	1、根据订单id判断订单状态是否已支付
	2、如果订单未支付开始下面逻辑
		logic。。。。。。。。
	3、支付完成将订单状态修改为已支付
}
解锁

通过这个小例子希望大家能理解利用分布式锁,来实现幂等的思想。结合自己的业务去实现。
理解这类问题背后的根源问题。才能设计出更好的解决方案。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七层汉堡王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值