由于服务器权限管理问题,不能安装类似gearman的异步任务管理器。
当前在实现的项目中存在许多可异步执行的处理,却要同步执行,影响使用方体验。
为了优化项目,选择使用这种比较土的办法实现异步功能。
机制描述:
在需要执行异步位置,启动一后台PHP进程执行异步任务。
异步任务的参数通过把当前的运行环境存储在临时文件,或者NoSQL中。
还需要把指定的任务名称及参数,可存储在各种常用队列中。
在启动异步任务进程时,把环境信息的路径或者key值作为进程参数传递过去。
异步任务进程启动后取出参数信息,恢复执行环境。
加载并执行指定的任务。
任务完成后将结果存储到指定的位置,或者不存储执行结果。
关键点:
统一的简单的调用接口。
统一的环境信息及参数信息存储。
统一的环境信息恢复机制。
结果保存机制。
优点:
不影响正常执行。
可复制当前的运行环境。
不经过web server层,执行效率好,并且不给web server带来额外压力。
部署简单,无额外依赖,现有的能运行LAMP架构皆可。
使用也很简单。
充分利用服务器资源。
利用进程池机制,防止系统过载。
任务队列保证任务确保任务不会丢失。
缺点:
注意在使用时不要搞死循环。
不能灵活指定运行机器。
实现:
本地文件锁+couchbase的队列
|