基于本地php进程的web项目异步处理框架

发布: 2012-09-25 10:26


由于服务器权限管理问题,不能安装类似gearman的异步任务管理器。

当前在实现的项目中存在许多可异步执行的处理,却要同步执行,影响使用方体验。

为了优化项目,选择使用这种比较土的办法实现异步功能。

机制描述:

在需要执行异步位置,启动一后台PHP进程执行异步任务。

异步任务的参数通过把当前的运行环境存储在临时文件,或者NoSQL中。

还需要把指定的任务名称及参数,可存储在各种常用队列中。

在启动异步任务进程时,把环境信息的路径或者key值作为进程参数传递过去。

异步任务进程启动后取出参数信息,恢复执行环境。

加载并执行指定的任务。

任务完成后将结果存储到指定的位置,或者不存储执行结果。

关键点:

统一的简单的调用接口。

统一的环境信息及参数信息存储。

统一的环境信息恢复机制。

结果保存机制。

优点:

不影响正常执行。

可复制当前的运行环境。

不经过web server层,执行效率好,并且不给web server带来额外压力。

部署简单,无额外依赖,现有的能运行LAMP架构皆可。

使用也很简单。

充分利用服务器资源。

利用进程池机制,防止系统过载。

任务队列保证任务确保任务不会丢失。

缺点:
注意在使用时不要搞死循环。
不能灵活指定运行机器。

实现:

本地文件锁+couchbase的队列





原文: http://qtchina.tk/?q=node/688

Powered by zexport