前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >延迟执行的,PHP最优解决方案

延迟执行的,PHP最优解决方案

作者头像
wangxl
发布2018-03-08 15:37:40
1.4K0
发布2018-03-08 15:37:40
举报
文章被收录于专栏:PHP在线PHP在线

讲一下我们公司的业务吧。

我们公司是当前市面上最火热,最热辣的O2O。为了解决这一块问题,我们公司针对附近3.5KM的任务来进行派活。如果5分钟内,有附件的商家在接活这个活就是商家的。

如果附件的商家没有接活呢?这样用户体验不就很不好吗?所以说,我们有专门的派单的业务员。只要5分钟没人接的活,会有专门的跑腿 业务员来完成对应的工作。

所以,转换成技术语言就变成这样了:

用户派出一个活,通过IM(即时通信)系统发给商家。如果这个活被人接了,接单请求给到API。进入至交易状态。

如果这个活没有被人接,用户也没有给出反馈,怎么办?难道用线程去解决。如果中间服务器挂了呢?所以这种方案不可考。

我们想了几套不同的实线方案:

1,自己写时间服务器,缺点周期长,不好维护不同的一致性hash

2,用zookeeper来维护一致性,做好时间服务器,在指定时间后执行指定的脚本。

3,用redis 配合python或者lua来实现

4,有没有分布式的延迟队列系统

最后的讨论结果如下:

1,自己写服务器方案这个项目周期太短,方案1和方案2淘汰【淘汰】

2,用redis配合python或者是lua来实现的话效率太低【淘汰】

3,最后我们选择了aliyun的MQS,具有分布式和延迟通知的特点。当然你不想花钱的话,也可以自己架具有延迟、分布式功能的队列服务【选择】

最终实现的过程:

1,用户派单后,向队列中写入一个任务,将队列中延迟执行设为5分钟

2,商家接单了,反向通知API,将队列中的延迟任务删除

3,如果商家没有接单,到达5分钟客户端就自然结束显示

4,服务器端到达了5分钟,开始执行延时队列里面的任务,向自己公司的派单元派单,并且在客户界面中推送接单成功的消息。

完美解决。

PHP学院网友投稿,转载请注明来源。http://www.phpxy.com

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-06-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 php 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档