分布式视频编码 - Gearman vs Beanstalkd

7 php video-encoding beanstalkd gearman

我正在寻找构建几十台机器的分布式视频编码集群.我之前从未使用过消息队列,但是我开始玩的那个是Gearman和Beanstalkd.

Beanstalk似乎比Gearman更简单,更容易使用,但它的功能并不像.

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

我注意到在完成一个工作后,gearman实际上并没有杀死进程,但是Beanstalk会这样做,所以我必须在每个服务器上的每个作业之后重启脚本.

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

在每台服务器上运行一个微小的cron,检查是否有预先定义的工作量正在运行.如果它不应该是,产生新的工作进程.每个过程大约需要2-30分钟.

也许我的逻辑存在缺陷?让我知道这样做的"更好"或"适当"的方式是什么?

小智 0

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

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

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

如果您希望队列端具有持久性,那么您应该使用 Beanstalk 的 binlog 参数 (-b )。如果您的 beanstalk 服务发生问题,这将允许您重新启动,同时队列中的数据损失最小(如果不是没有信息)。生产者端的持久性可能来自于有多个队列可供尝试。