在高并发场景中,如何有效防止数据重复出现?
- 内容介绍
- 文章标签
- 相关推荐
本文共计4678个文字,预计阅读时间需要19分钟。
前言+最近测试给我提出了一个bug,说之前提供的一个批量复制商品的接口,产生了重复的商品数据。+追踪原因后发现,这个事情没有想象中简单,可以说是一波多折。+1.需求+产品有一个需
前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。
追查原因之后发现,这个事情没想象中简单,可以说一波多折。
1. 需求产品有个需求:用户选择一些品牌,点击确定按钮之后,系统需要基于一份默认品牌的商品数据,复制出一批新的商品。
拿到这个需求时觉得太简单了,三下五除二就搞定。
我提供了一个复制商品的基础接口,给商城系统调用。
当时的流程图如下:
如果每次复制的商品数量不多,使用同步接口调用的方案问题也不大。
2. 性能优化但由于每次需要复制的商品数量比较多,可能有几千。
如果每次都是用同步接口的方式复制商品,可能会有性能问题。
因此,后来我把复制商品的逻辑改成使用mq异步处理。
改造之后的流程图:
复制商品的结果还需要通知商城系统:
这个方案看起来,挺不错的。
但后来出现问题了。
3. 出问题了测试给我们提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。
经过追查之后发现,商城系统为了性能考虑,也改成异步了。
他们没有在接口中直接调用基础系统的复制商品接口,而是在job中调用的。
本文共计4678个文字,预计阅读时间需要19分钟。
前言+最近测试给我提出了一个bug,说之前提供的一个批量复制商品的接口,产生了重复的商品数据。+追踪原因后发现,这个事情没有想象中简单,可以说是一波多折。+1.需求+产品有一个需
前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。
追查原因之后发现,这个事情没想象中简单,可以说一波多折。
1. 需求产品有个需求:用户选择一些品牌,点击确定按钮之后,系统需要基于一份默认品牌的商品数据,复制出一批新的商品。
拿到这个需求时觉得太简单了,三下五除二就搞定。
我提供了一个复制商品的基础接口,给商城系统调用。
当时的流程图如下:
如果每次复制的商品数量不多,使用同步接口调用的方案问题也不大。
2. 性能优化但由于每次需要复制的商品数量比较多,可能有几千。
如果每次都是用同步接口的方式复制商品,可能会有性能问题。
因此,后来我把复制商品的逻辑改成使用mq异步处理。
改造之后的流程图:
复制商品的结果还需要通知商城系统:
这个方案看起来,挺不错的。
但后来出现问题了。
3. 出问题了测试给我们提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。
经过追查之后发现,商城系统为了性能考虑,也改成异步了。
他们没有在接口中直接调用基础系统的复制商品接口,而是在job中调用的。

