基于幂等表思想的幂等实践

2023-01-14  本文已影响0人  Java程序员YY

一、为什么需要幂等

二、幂等方式

不同的场景下(常见的是【界面和后端接口交互场景】和【接口于接口交互场景】),幂等方式有很多并且各不相同,都各有一些局限性和缺点!!!

三、幂等设计原则

一个具有幂等性的服务,要求无论重复请求在多么极端的情况下发生,都要表里如一,此时必须满足:

四、常见幂等场景例子

五、幂等实践

1、设计流程

  1. 调用放发起请求,请求到达服务提供方

  2. 获取指定的业务key作为唯一的幂等键,构建幂等记录(此时幂等记录status为处理中(processing)),然后尝试将幂等记录写入存储介质(可以是Redis也可以是MySQL或其他存储介质)

  3. 如果幂等记录写入成功,则执行业务逻辑

  4. 业务逻辑执行完毕,通过唯一键修改幂等记录的status为成功(success

  5. 如果幂等记录写入失败,则说明幂等记录已存在(该业务key对应的数据,之前有被执行过),需要进行如下处理:

  6. 通过幂等唯一键查询幂等记录,并且判定幂等记录的status

    1. 如果status为成功(success),则说明上次已经执行过该业务了,本次无需再重复执行,获取上次执行的结果(如果有需要的话)幂等返回即可

    2. 如果status为处理中(processing),则说明已经有其他线程正在处理业务数据 或者是 极端情况下应用宕机导致的异常情况。此时需要判定【请求处于处理中(processing)状态的时长】,并且结合应用配置的【允许的最大业务执行时长】进行判断

      • 处于processing状态的时间已经超过配置的【允许的最大业务执行时长】,则尝试以乐观锁的方式重新修改幂等记录,如果修改成功则执行业务逻辑,反之则抛出并发异常。
      • 处于processing状态的时间没有超过配置的【允许的最大业务执行时长】,那么直接抛出并发请求异常

2、问题思考

关于上述的幂等实现流程中,极端情况下,有如下几点需要思考和注意的问题点

上一篇 下一篇

猜你喜欢

热点阅读