【发布时间】:2017-05-05 11:14:13
【问题描述】:
我正在为 PHP 应用程序开发一个作曲家包。目标是在请求、队列作业和采取的其他操作之后发送一些数据。我最初(和工作)的想法是使用register_shutdown_function 来做到这一点。这种方法有几个问题,首先,这增加了页面响应时间,这意味着计算请求的开销以及通过我的 API 发送数据的开销。另一个问题是队列工作者等长时间运行的进程不会长时间执行此方法,因此数据创建时间与发送和处理时间之间可能存在巨大差距。
我的想法是我可以使用某种临时存储来存储数据,并让 cronjob 每分钟发送一次。这种方法我能看到的唯一问题是在高 IO 上管理并发。由于许多进程将每 (n) 毫秒写入文件,因此读取文件和删除已发送的行会出现问题。
我极力避免的另一个选择是使用客户端数据库。这可能会导致性能问题。
最好的方法是什么?
编辑:这个包本质上是一个监控代理。
【问题讨论】:
-
这就是 RabbitMQ 之类可以相当优雅地解决这个问题的地方。
-
它没有。这是一个不应依赖于客户端基础设施的作曲家包。
-
嗯好吧。那么是否要求每个请求都写入同一个文件?如果不是,则每次写入一个唯一文件并使用 cronjob 批量处理这些文件。这应该可以防止并发问题。
-
是的,我想过,但在高负载系统上,它会生成数千个文件,这似乎是一个非常混乱的解决方案,尽管它可能是一种方法。
标签: php concurrency storage monitoring