聊架构:使用Redis队列解决商品数据大批量上传问题

2017-03-22 07:15:51 admin ...

前言:记得有一位架构师说过,一切脱离业务谈架构,都是耍流氓。所以我们在谈架构都是为了解决业务而存在的。

架构依附业务而生,说白了,架构就是一种解决实际业务的技术方案而已。因此,好的架构就是适应业务的要求的方案,没有最好,只有合适。人力,物力,工期都合适的架构就是好架构。

当然,架构也是会根据业务变化而升级或者重构的。

个人理解,废话居多,哈哈。

说业务场景:

业务上,运营人员需要往某个平台上新增商品,使用excel表格的形式以sku为一行批量上传,运营人员上传操作是不定时的。
技术上,商品是按照一个一个spu上传。因为涉及到商品图片处理和上传,所以单个商品sku的上传时间在30秒左右。一个spu的sku数量不定,因此一个spu上传总时间不定。
spu是指一种商品,比如华为m7手机
sku是指某一种商品的不同型号,如华为m7手机-32G-土豪金。
聊架构:使用Redis队列解决商品数据大批量上传问题

说说解决方案:

1、运营上传excel文件,程序获取商品sku的数据,按照spu进行归类,并逐个以spu为单位存入redis队列。存储完成后,提示完成入队,请运营耐心等待。
2、PHP写一个死循环方法,循环去队列里取spu,每次取一个,如果有数据,则处理上传,注意将处理结果记下来。如果没有数据,则等待。
3、使用命令行方式启动上面的PHP文件。根据资源可以启动多个PHP进程。
4、使用shell写一个检查PHP进程是否存在,不存在则启动。
5、将shell脚本放到定时任务中,可以设置每五分钟执行一次检查PHP进程是否存在。

上述流程相当于这样一个例子:一个人A不定时往桶里(队列)放东西,另一个人B(PHP死循环)一直守在桶边,桶里有东西,就处理。还有一个人C(shell)负责监督B,防止其偷懒。

聊架构:使用Redis队列解决商品数据大批量上传问题
当然这个方案还有改进的地方,不多说,留给大家思考。
再说一句,其实这套思路架构可以用在好多地方,比如,使用队列在数据库前做挡箭牌,减轻数据库压力,也请大家自己脑补。

相似文章