使用 beanstalkd 进行 PHP 异步处理。你推荐吗?
-
06-07-2019 - |
题
解决方案
我在生产中使用了 Beanstalk,并且在测试时通过它发送了数百万条简单消息 - 通常是批量发送,但在我离开公司之前,生产系统已经处理了超过 100,000 个任务。它可能仍在运行,在这种情况下,现在的数量将达到数千万——或者更多,如果他们按照我的计划进一步扩展它的使用范围的话。
我会推荐它,因为它有很多优点。
- 命名管可用于限制正在交付的作业。我根据机器主机名观看一个管道,它限制了工作人员的运行位置 - 对于仅存储在特定服务器上的上传文件很有用)。
- 延迟可用于设置未来事件
- 最新版本的服务器还支持二进制日志记录,提供持久性,尽管它从未对我造成崩溃。
我完成的第一个任务是图像处理 - 在 Apache/mod_php 进程之外完成这项工作使我能够调整较大图像的大小而不影响服务器(破坏 Web 服务器)。由于队列负载较轻,它在上传后刷新页面之前就创建了缩略图。
还有许多其他潜在的任务也可以异步处理。
我遇到的唯一问题是确保工作人员顺利完成 - 或者捕获任何错误,以便可以“埋葬”作业,从而确保作业不会放回队列中再次运行(并让工人再次崩溃)。
让工作进程重新启动以清除内存也很有用,因为 PHP 不太适合长时间运行的进程。
不隶属于 StackOverflow