【问题标题】:Distributed video encoding - Gearman vs Beanstalkd分布式视频编码 - Gearman vs Beanstalkd
【发布时间】:2012-03-13 01:53:48
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 请务必查看 Pheanstalk:github.com/pda/pheanstalk
  • 请原谅我的天真,但是对于这两个消息传递框架中的任何一个,“服务器”安装在哪里?在将处理卸载进程的远程机器上,还是在通知远程机器新作业的机器上?
  • 使用这些服务太贵了。

标签: php video-encoding gearman beanstalkd


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 2012-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    相关资源
    最近更新 更多