后端存储实践一

该系列课程都是以电商的的场景为例子,来讲解后端存储的一些实例。

因为网络、服务器等原因,重试成了我们必不可少的一种手段,这时就需要你提供的服务是幂等的。具有幂等的服务就可以完美克服重试导致的数据错误。

1、订单的存储如何实现幂等?

这不是前端应该做的嘛?幼稚了,哈哈哈,我们通常使用的 rpc 或者网关都有重试的功能,如果这种请求打到后端,还是会生成重复订单。

那要怎么认定重复订单呢?同一个用户信息?不可能啊,同一个用户可以下多次订单怎么办?

主键 id ?这个是每次插入生成的。

通常做法是这样的,创建订单的时候,前端页面先生成一个订单号,这样如果重复提交同一个订单号在后端数据库只能有一条记录,可以利用数据库的这个特性,实现记录的幂等性。

具体实现种有个需要注意的点:如果是因为重复创建导致的错误不要抛给前端,返回订单创建成功好了。

2、如何完美解决 ABA 的问题

先来陈述下这个问题:大概产生流程就是 记录从原始状态更新为 A ,

但是这个response 并没有成功触达调用方。导致调用方的重试,但是

这期间另一个请求已经将状态修改为了 B , 再次发起的 A更新操作当然会将

记录的状态更新为A 了。那么如何避免这个问题呢?

想必,你想到了,就是类似乐观锁的的操作,每次更新操作带上 version 字段,这就当然需要你数据库增加一列 version , 返回给调用方的查询结果也是带上 version ,这样更新操作就会带上这个字段执行更新操作。如果版本不对,就更新失败。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容