TypechoJoeTheme

王子博客

用户名
密码
用户名
邮箱
搜索到 2 篇与 高并发 的结果 ———
2021-08-31

高并发下如何防重?

高并发下如何防重?
前言最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一波多折。1. 需求产品有个需求:用户选择一些品牌,点击确定按钮之后,系统需要基于一份默认品牌的商品数据,复制出一批新的商品。拿到这个需求时觉得太简单了,三下五除二就搞定。我提供了一个复制商品的基础接口,给商城系统调用。当时的流程图如下:如果每次复制的商品数量不多,使用同步接口调用的方案问题也不大。2. 性能优化但由于每次需要复制的商品数量比较多,可能有几千。如果每次都是用同步接口的方式复制商品,可能会有性能问题。因此,后来我把复制商品的逻辑改成使用mq异步处理。改造之后的流程图:复制商品的结果还需要通知商城系统:这个方案看起来,挺不错的。但后来出现问题了。3. 出问题了测试给我们提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。经过追查之后发现,商城系统为了性能考虑,也改成异步了。他们没有在接口中直接调用基础系统的复制商品接口,而是在job中调用的。站在他们的视角流程图是这样的:用户调用商城的接口,他们会往请求记录表...
王子
2021-08-31

Java,高并发

112 阅读
0 评论
2021年08月31日
112 阅读
0 评论
2021-08-30

高并发下如何保证接口的幂等性?

高并发下如何保证接口的幂等性?
前言接口幂等性问题,对于开发人员来说,是一个跟语言无关的公共问题。本文分享了一些解决这类问题非常实用的办法,绝大部分内容我在项目中实践过的,给有需要的小伙伴一个参考。不知道你有没有遇到过这些场景:有时我们在填写某些form表单时,保存按钮不小心快速点了两次,表中竟然产生了两条重复的数据,只是id不一样。我们在项目中为了解决接口超时问题,通常会引入了重试机制。第一次请求接口超时了,请求方没能及时获取返回结果(此时有可能已经成功了),为了避免返回错误的结果(这种情况不可能直接返回失败吧?),于是会对该请求重试几次,这样也会产生重复的数据。mq消费者在读取消息时,有时候会读取到重复消息(至于什么原因这里先不说,有兴趣的小伙伴,可以找我私聊),如果处理不好,也会产生重复的数据。没错,这些都是幂等性问题。接口幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。这类问题多发于接口的:insert操作,这种情况下多次请求,可能会产生重复数据。update操作,如果只是单纯的更新数据,比如:update user set status=1 wher...
王子
2021-08-30

Java,高并发

154 阅读
0 评论
2021年08月30日
154 阅读
0 评论