7

我希望建立一个由几十台机器组成的分布式视频编码集群。我以前从未使用过消息队列,但我开始使用的两个是 Gearman 和 Beanstalkd。

Beanstalk 似乎比 Gearman 更简单易用,但功能却不如 Gearman。

我不明白的一件事是......你如何在所有服务器上产生新的工作人员?我打算用php。是否像在 CLI 中使用 "&" 运行 worker.php 并让它坐在那里等待工作一样简单?

我注意到 gearman 在工作完成后实际上并没有终止进程,但 Beanstalk 会,所以我必须在每台服务器上的每个工作之后重新启动脚本。

目前我更倾向于使用 Beanstalk,我计划的大致流程是:

在每台服务器上运行一个分钟的 cron 来检查是否有预定义数量的工作人员正在运行。如果它低于预期,则产生新的工作进程。每个过程大约需要 2-30 分钟。

也许我的逻辑在这里有缺陷?让我知道这样做的“更好”或“正确”方式是什么?

4

1 回答 1

0

我将使用的术语只是为了尝试清楚......有生产者和消费者的概念。生产者生成放入队列(即 beanstalk 服务)的作业,然后由消费者读取。

有多种方法可以编写消费者。您可以通过 cron 作业在每个 x 时间范围内运行任务,也可以让消费者通过 php(或您有什么)在 while 1 循环中运行。

在哪里安装服务实际上取决于您的目标。对我来说,我通常将服务安装在消费者或单独的盒子上(有时后者会根据您的需要过度杀伤)。

如果你想要队列端的持久性,那么你应该使用 Beanstalk 的 binlog 参数 (-b )。如果您的 beanstalk 服务出现问题,这将允许您在队列中的数据丢失最小的情况下重新启动(如果不是没有信息)。生产者方面的持久性可能来自有多个队列可供尝试。

于 2012-03-05T22:35:04.280 回答