小小任务系统发挥的大作用

今天被我姐叫出去吃饭,聊天的时候又聊到为什么宅了。还能为什么,当然是因为本人是个重度懒癌患者咯 /傲娇脸

今天又懒得写代码了,给大家分享一个我们现在在用的小小任务系统。

为什么需要任务系统呢?

其实无非是两方面,一方面就是这个功能的处理时间较长必须使用异步来处理,比如订单导出,订单导入发货。另一方面就是为了实现业务逻辑的解耦。

什么叫解耦以及为什么需要解耦?

可以想象一下用户支付成功之后都需要进行哪些业务逻辑需要处理。
1.检查是否是待支付状态,不是则判定为支付超时进行退款操作。
2.记录支付信息并修改订单状态
3.计算销量及库存
4.释放库存锁
5.发送短信和微信通知用户购买成功

可以看到,支付成功之后少说也有5步,如果再有积分系统还得加入计算积分的逻辑。而且随着业务的不断扩展,这里的逻辑会越来越复杂。最可怕的是,因为都在这一个步骤里,每次增减这里的业务代码都会对整个系统造成影响,只要有一步出现问题都会导致整个接口不可用。一般这种场景我们就说这里的业务逻辑耦合度太高了。

如何解耦?

当然就是利用消息队列异步的去处理这些逻辑。还拿支付这里举例。解耦之后这个接口只需要处理支付成功必须的业务逻辑,然后发送一个消息告诉任务系统就可以了,比如支付超时的退款操作、计算销量及库存、发送通知都可以由任务系统去完成。

一个简单任务系统

系统架构

如图,这个系统由以下几部分组成。
1.Jobpool,即任务池,是由key-value组成的任务数据
2.Ready队列,由Redis的队列做为实时处理队列
3.Delay队列,由Redis的有序集合做为延迟处理队列
4.Server,负责接收外部系统发送来的消息,采用Hprose实现的RPC服务
5.Worker,负责消费实时队列中的任务,采用Swoole的多进程模块实现
6.Timer,负责消费延迟队列中的任务,采用Swoole的定时器模块实现

举例说明一个任务的生命周期

1.Server接收到事件通知后将会去查询该事件注册的任务有哪些,然后将这些任务根据注册信息扔到对应的队列中,如果有延迟时间则丢到Delay队列中,如果没有则丢到Ready队列中。
2.如果是延迟任务,那么将等待Timer的扫描,当到了执行时间时Timer会将该任务丢到Ready队列中。
3.Worker会阻塞Pop实时队列中的任务,当拿到一个任务时就会启动一个子进程去处理该任务。
4.处理完成后将处理结果写入数据库。

结尾

今天我们只从系统架构上来了解一下这个系统,具体的底层实现基础有兴趣的可以阅读我之前的文章http://www.jianshu.com/p/54ffd360454f

写这篇文章的时候这个系统的第一个版本还没做完呢,当时是刚确定了方案的可实施性。现在这个小系统经过几次迭代已经可以稳定的运行了,平均每个月处理的任务数量大概有三四百万个。

最近我们又筹备升级了,准备将Redis替换成RabbitMQ,下次再跟大家分享有关RabbitMQ的技术。GoodNight~


**** 我是闫大伯,一只进化中的野生程序猿 ****

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容