系统接口幂等设计
1、根据需求本身可以设计出幂等键。如发奖:幂等键可以设计为 订单号+订单状态+活动ID
2、新增表单页幂等性设计方案:
先解释下必要性:用户重复点击创建订单按钮,避免生成两个订单。即使前端做了防抖设计,但是由于网关、框架一般具有retry 功能,后端做防抖还是很有必要性的。
方案:ID生成服务 + 数据库主键唯一 来保证幂等。
用户进入生单页面时,请求 ID生成服务 生成幂等键,表主键设计为生成的ID,不使用自增ID,避免生成重复订单。
3、更新ABA问题。
ABA问题:
我举个例子你就明白了。比如说,订单支付之后,小二要发货,发货完成后要填个快递单号。假设说,小二填了一个单号666,刚填完,发现填错了,赶紧再修改成888。对订单服务来说,这就是2个更新订单的请求。 正常情况下,订单中的快递单号会先更新成666,再更新成888,这是没问题的。那不正常情况呢?666请求到了,单号更新成666,然后888请求到了,单号又更新成888,但是666更新成功的响应丢了,调用方没收到成功响应,自动重试,再次发起666请求,单号又被更新成666了,这数据显然就错了。这就是非常有名的ABA问题。
解决方案:DB增加version字段,更新时携带version字段,版本号相同时再进行更新。