问题标签 [beanstalkd]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
242 浏览

php - 有 Zend_Queue_Adapter_Beanstalkd 吗?

在编写我自己的适配器之前,我正在寻找一个支持 beanstalkd 的现有 Zend_Queue 适配器。

Zend 框架中是否有用于 Beanstalkd 的开源适配器/实现?

到目前为止,我在网上找不到任何东西。

感谢大家阅读或回答!

0 投票
1 回答
2386 浏览

php - Pheanstalk(beantalk 的 PHP 客户端)- 连接如何工作?

我需要一些帮助来理解 pheanstalk(php beanstalk 客户端)的使用。我有一个 PHP 程序,当表单数据发送到它时,它会在服务器上执行。然后 PHP 程序应将表单数据打包为 JSON 结构并将其发送到后端服务器进程。

我不明白的是与 beanstalkd 服务器的连接。我是否应该在每次 PHP 程序执行时创建一个新的 Pheanstalk() 对象 - 在这种情况下,我是否会产生创建连接的成本。连接何时关闭(因为 pheanstalk 中没有 close() 方法)?

如果连接是持久的,它是否在 PHP 程序的所有执行之间共享,在这种情况下,在并发命中的情况下会发生什么?谢谢你的帮助。

0 投票
1 回答
387 浏览

apache-zookeeper - zookeeper队列延迟?

你们会建议什么是在zookeeper中实现队列的好方法,该队列能够延迟工作而不阻塞工作人员?

参考 beanstalkd 延迟作业选项。

0 投票
1 回答
4246 浏览

php - 分布式视频编码 - Gearman vs Beanstalkd

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

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

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

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

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

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

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

0 投票
1 回答
495 浏览

python - Queueing: N producers to N consumers

The requirement is as follows:

  • There are N producers, that generate messages or jobs or whatever you want to call it.
  • Messages from each procuder must be processed in order and each message must be processed exactly once.
  • There's one more restriction: at any time for any given producer there must be not more than one message that is being processed.
  • The consuming side consists of a number of threads (they are identical in their functionality) that are spread across a number of processes - it is a WSGI application run via mod_wsgi.

At the moment, the queueing on the consuming side is implemented as a custom queue, that subclasses Queue, but it has its own problems that I won't get into, the main one being that upon process restart its queue is lost.

Is there a product, that will make it possible to fulfill the requirements I've outlined above? Support for persistency would've been great, though that is not so important (since the queue will not reside in the worker process' memory any more).

0 投票
2 回答
581 浏览

php - 支持作业批处理的排队系统(例如,一次为 1 个工人提供多个作业)

我正在寻找一个可以支持以下场景的排队系统:

  • 客户添加了一项工作 - 检查特定 url (URL1) 有多少 Facebook 喜欢;
  • 客户端添加另一个工作 - 检查 URL2 的相同信息;
  • [……]

  • 一个工作人员从队列中挑选 1 到 50 个工作(url)(例如,如果只有 5 个 - 它挑选 5 个,如果有 60 个 - 挑选 50 个,将其他工作留给另一个工作人员),并向 Facebook 发出请求API(允许每个请求有多个 url)。如果成功,所有作业都会从队列中取出,如果失败 - 所有作业都会保留。

我正在使用 PHP,我研究了GearmanBeanstalkd,但没有找到任何类似的功能。是否有任何(免费)排队系统可以支持这种“批量出队”?

或者,也许,任何人都可以提出处理此类问题的替代方法?我已经考虑在排队系统之外保留一个“要检查”的 url 列表,然后将它们添加到最多 N 个项目的捆绑中,并使用每 X 个周期运行的 cron 作业。但这有点建立自己的队列,这违背了整个目的,不是吗?

0 投票
2 回答
337 浏览

python - 组织无限循环工作队列的最佳方式是什么?

我有大约 1000-10000 个工作,我需要每分钟左右持续运行。有时会有新工作进来或需要取消其他工作,但这种情况很少见。工作被标记并且必须在工人之间受到干扰,他们每个人只处理特定类型的工作。

现在我想使用 cron 并在某个代理中加载整个作业数据库——RabbitMQ 或 beanstalkd(虽然还没有决定使用哪一个)。

但是这种方法对我来说似乎很难看(使用计时器来模拟无穷大,加载整个数据库等)并且有缺点:例如,如果某种作业的处理速度比添加到队列中的速度慢,它可能会不堪重负并且消息代理会吃掉所有内存,交换,然后停止。

还有其他可能吗?我在工作中没有使用正确的模式吗?(可能是我不需要排队或其他什么......?)

ps如果这很重要,我正在使用python。

0 投票
3 回答
6777 浏览

php - 长时间运行的 php 脚本的内存注意事项

我想使用 Zend Framework 2 控制器在 php 中为beanstalkd编写一个 worker。它通过 CLI 启动并将永远运行,像这个示例一样从 beanstalkd 请求工作。

在简单的伪类代码中:

这里当然$job有一个__invoke()方法。但是,这些作业中的某些内容可能会运行很长时间。有些可能会使用大量内存运行。有些人可能已经注入了$beanstalk对象,自己开始新的作业,或者有一个Zend\Di\Locator实例来从 DIC 中提取对象。

从长远来看,我担心生产环境的这种设置,因为可能会发生循环引用,并且(此时)我没有明确地“做”任何垃圾收集,而这个操作可能会持续数周/数月/数年 *。

*) 在 beanstalk 中,reserve是一个阻塞调用,如果没有可用的作业,这个 worker 将等待直到它从 beanstalk 得到任何响应。

我的问题:php 将如何长期处理这个问题,我应该采取任何特殊的预防措施来防止它被阻塞?

我确实考虑过这一点并且可能会有所帮助(但如果我错了,请更正并尽可能添加更多内容):

  1. 在开始循环之前使用gc_enable()
  2. 在每次迭代中使用gc_collect_cycles()
  3. $job在每次迭代中取消设置
  4. __destruct()从 a中显式取消设置引用$job

(注意:从这里更新)

我确实对任意作业进行了一些测试。我包括的工作是:“简单”,只需设置一个值;“longarray”,创建一个包含 1,000 个值的数组;“生产者”,让循环注入$pheanstalk并将三个 simplejobs 添加到队列中(因此现在有一个从 job 到 beanstalk 的引用);“locatoraware”,其中Zend\Di\Locator给出了 a 并且所有作业类型都被实例化(尽管没有被调用)。我将 10,000 个作业添加到队列中,然后将所有作业保留在队列中。

“simplejob”的结果(每 1,000 个作业的内存消耗,使用memory_get_usage()

随机挑选一份工作,测量同上。分配:

记忆:

上面的执行代码更新为:

正如每个人都注意到的那样,内存消耗在 php 中没有被利用并保持在最低限度,但随着时间的推移而增加。

0 投票
1 回答
930 浏览

php - 如何确定 Pheanstalk 作业是否已完成

我目前正在使用 Pheanstalk (beanstalkd) 来处理多个使用多个工人的作业。我想知道是否有一种通用的方法来确定所有作业是否都已完成,因为工作人员是异步运行的。

我曾考虑在发布的最后一份工作中添加一个“已完成”标志,并使用工作人员检查该标志。问题是最后一份工作并不总是工人完成的最后一份工作。工人可能会被挂断,崩溃等。

0 投票
1 回答
232 浏览

ruby-on-rails - 生产中的宝石追踪者

我正在使用 Stalker 与生产服务器上的 beanstalkd 交互。我的工作文件如下所示:

我正在尝试通过发出以下命令来启动 stalker:

但是在加载环境文件时,Rails 会尝试访问开发数据库,​​而不是生产数据库,从而发出错误。有谁知道如何解决这个问题!?

谢谢!