手机端小强原创文章,java小强个人博客站点
当前位置: 首页 >> 文章 >> 批量后台订单处理解决方案

批量后台订单处理解决方案

32920 文章 | 2015-11-5

电子商务网站,下单以后有很多订单需要在后台处理,那么如何高效的处理呢?

这是面试中的一个问题,当时我的实现就是多线程,分别从数据库搂数据,然后分别处理。涉及到会搂到相同的数据,我的实现的加锁,遇到加锁的跳过。涉及到会死锁,我的实现是监控。然后还涉及到部分线程会挂掉,我的说法仍是需要监控。

但后回来以后我发现,主路线就有问题,不能多个线程全部去搂数据,不然搂到相同的数据效率就有问题。此类问题,需要考虑的问题很多,但是策略基线如果按照我这样做,肯定是不对的。

后来我又想了一下,联想到以前涉及的一些场景,我觉得用分发比较好。实现是,有一个单独JOB-A来搂需要处理的订单ID,然后把订单ID再分发给子JOB-B来具体实现。那么JOB-A做的任务很简单,就是查订单ID和分发。那么此时就不涉及重复数据的问题,就不用因为订单处理加锁和解锁了,当然如果有其他业务场景需要加锁,可以在子JOB-B中来做,但是此时和我们的订单处理逻辑是没有关系的。


基本流程:

JOB-A查看是否有空闲JOB-B

查询需要处理的订单ID

将订单ID分发给JOB-B

JOB-B处理订单


那么后续肯定还有一些问题,比如只有一个JOBA-A是否满足要求,另外JOB-A挂掉整个网站等同挂掉了。

如果一个JOB-A不满足,可以把订单划分一下,比如服装的订单服装JOB-A来处理,食品的订单食品JOB-A来处理。而各个JOB-A后续都是独立的JOB-B。

至于担心JOB会挂掉的问题,目前我的解决方案就是监控,JOB每次遍历都去更新一个时间标量,根据时间标量来判断当前JOB是否有效运行中。

但是这个监控对于JOB-A来说还好,对于JOB-B来说,因为他执行的东西比较多,时间就会长一些,另外万一遇到订单卡住的情况,整个JOB-B就会被卡住,甚至产生僵尸订单


可以JOB-B每次遍历一个订单就更新时间标量,僵尸订单目前我看到的方案是,有独立的JOB去查,比如两个小时还没有处理的订单就是僵尸订单,直接废除掉。

但是对于JOB-B执行一个订单的时间就是太长,那么执行当前订单就会卡住分发到当前JOB的其他订单,这个需要衡量,但是基线是用分发的策略来做,起码比我面试中回答的策略好很多。

推荐您阅读更多有关于“ 面试 多线程 策略 订单处理 ”的文章

上一篇:电商网站抢购秒杀实现探讨 下一篇:TbViewer大量耗费CPU资源和内存的问题

猜你喜欢

发表评论:

个人资料
blogger

java小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 今日北京再次沙尘暴来袭,吃了几年细粮,终于能来口粗粮了,不过大早上看见这场景,还是吓我一跳,不过随后就平静了,毕竟是老朋友了。进公司又发现一股烤糊的味道,真是祸不单行啊,例外都是污染。发了两个口罩,开启保护模式。

    2017-05-04 10:16

  • 今天同学问我,最近还在写代码吗?我想了想,这个问题怎么回答呢,我好像确实很长时间,虽然写了一些,但是主要内容已经不是写代码了。然后再想想,自己也7年多了,这么多年了,我收获了什么,我的目标到底是什么。眼看就奔三了,人生啊,开启感叹模式。

    2017-03-30 22:52

  • 也许大家都已经注意到了,今年的房价,好多地方都是翻了一番,跟着就是,各地房东开始变相涨租。今年之所以搬走,就是为此,这两天同学也是如此。很多房东只认钱,别谈感情,伤钱。而对于这个城市来说,你怎么定位自己,你真把自己当成她的一份子?你来此为何?将来何去何从?自己掂量清楚。

    2016-12-05 10:03

  • 为什么一直不写了呢?因为当爸爸了,没空了。今年的冬天,有些寒冷,除了这寒冬带来的不适,更有因乐视公司遇到危机,而带来的同事别离。送别同事,看着空旷的工位,心中有些悲凉。临近年关,此时此刻,该怎么做,似乎不再是脑子一热那么简单了。

    2016-11-24 11:28

  • 已经请假,加上国庆,要很长一段时间不在北京了。919加班,搞的现在有点心累,胸闷,身体不适。看来,我要好好休息一下了。这几天有些冷,2016的冬天,一步步来了,各位亲友,记得添衣加粗啊。

    2016-09-23 17:29

  • 更多»

最新文章
热门文章
随机文章