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

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

35880 文章 | 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小强
没有思考,人生的路会越走越难!

搜索
分类
最新微语
  • 8月1日,我已离开奋斗多年的北京。不知道是暂时的离开,还是永久的离别,反正已经离职在家,告别每日上班,每天苦累的煎熬,过一段属于自己的生活。以前是专职工作,现在专职生活。

    2017-08-18 12:47

  • 又弄完一个项目,累成狗,但是感觉又进步不少,除了很多坑已经踩过,做起来也是轻车熟路。同时也认识到,程序不在于你多牛逼,而是在乎你的细节把控度,而细节的关注,是一个优秀程序员必须要注意的。另外,要相信自己,勇敢向前,没人生下来就是成功的,而且,成功的路,比成功本身更重要。

    2017-06-30 09:46

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

    2017-05-04 10:16

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

    2017-03-30 22:52

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

    2016-12-05 10:03

  • 更多»

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