幂等校验逻辑

2023-07-08 15:58:29 浏览数 (1)

幂等校验逻辑

团队分享的一篇幂等逻辑文章,感觉挺好的,分享出来大家参考

概念:在编程中一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。

幂等在财经适用的场景:多次同样的请求可以推进流程的,对于同步耗时不敏感的,整个链路都满足上述条件的比如:代扣、提现、转账、退款、分账、计费、回调、账户类操作等

关键考虑点:

  1. 幂等接口落单前参数校验失败不能返回失败,如果要设置为失败则必须落单之后才能置为失败,让业务修改参数后使用原单号重试;
  2. 上次请求和本次请求参数可能不一致
  3. 两次请求可能是同时过来的 幂等实现的一般逻辑:
  4. 对于幂等比例高的,比如超过5%,可以采用查询主库,看数据是否存在,然后幂等校验。
  5. 对于幂等比例低的,比如小于1%,可以直接插入,如果数据存在,那么幂等。

以提现场景为例:

  1. 业务调用接口中一点要有标示请求的唯一键,如(merchantId outrade_no)
  2. 收到业务请求后根据线上情况(一般提前判断好)如果insert duplicate 非常多建议先查询一下主库DB,如果不多建议不用查直接插入;
  3. 如果是查询订单不存在那么继续插入DB;
  4. 如果插入DB出现 duplicate 错误说明已经有这一订单了,或者之前查询订单存在也说明有了;那么需要进行订单幂等性校验,一般是校验关键参数(出款方&收款方信息,金额等),看业务情况是否要校验全部参数;
  5. 如果幂等校验失败了那么直接返回幂等参数失败,注意不要返回具体是哪个参数失败了,当然日志里可以打印出来;
  6. 如果没有出现insert duplicate的情况,说明插入时没有重复的请求,那么可以正常推进流程调用下游出款接口;
  7. 如果订单已经存在了那么请务必用原始订单信息去请求下游,请求下游时要根据下游接口情况进行选择:
  8. 如果下游接口支持幂等,那么直接调用相关接口,然后正常推进流程;
  9. 如果下游接口不支持幂等,那么我们需要调用其相关查询接口,来获取信息,根据查询结构进行业务逻辑判断返回;注意下游返回订单不存在不要返回失败,需要看处理时长超过多长时间才能返回失败(一般30min )

0 人点赞