系统接口幂等设计

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字段,版本号相同时再进行更新。

全部评论
隔行如隔山都不会
点赞 回复 分享
发布于 10-21 21:06 北京

相关推荐

10-21 17:42
酷酷的喜马拉雅山:你为什么发我的offer列表?
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务