概述与接口重试的问题

概述与接口重试的问题

  • 什么是幂等性
  • 幂等性涉及的核心思想
  • select、update、delete、insert和混合操作的接口幂等性

接口设计与重试机制引发的问题

接口幂等性

  • 提交订单按钮如何防止重复提交?
  • 表单录入页如何防止重复提交?
  • 微服务接口,客户端重试时,会对业务数据产生影响吗?

  • 幂等性:f(f(x)) = f(x)
  • 幂等元素运行多次,还等于它原来的运算结果
  • 在系统中,一个接口运行多次,与运行一次的效果是一致的

  • 什么情况下需要幂等性
  • 重复提交、接口重试、前端操作抖动等
  • 业务场景:用户多次点击提交订单,后台应只生成一个订单

  • 业务场景:支付时,由于网络问题重发,应该只扣一次钱
  • 并不是所有的接口都要求幂等性,要根据业务而定
  • 保证幂等性的策略有哪些?

  • 幂等性的核心思想:通过唯一的业务单号保证幂等
    就放入一个token,看token是否存在
  • 非并发情况下,查询业务单号有没操作过,没有则执行操作
  • 并发的情况下,整个操作过程加锁(分布式锁)

  • Select操作:不会对业务数据有影响,天然幂等
  • Delete操作:第一次已经删除,第二次也不会有影响
  • Update操作:更新操作传入数据版本号,通过乐观锁实现幂等性
  • Insert操作:此时没有唯一业务单号,使用Token保证幂等
  • 混合操作:找到操作的唯一业务单号,有则可使用分布式锁,没有可以通过Token保证幂等

你可能感兴趣的