问题标签 [gearman]

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 投票
4 回答
3303 浏览

queue - 排队系统 - 启动多个工人的好方法是什么?

  • 您如何为面向队列的系统设置一个或多个工作脚本?
  • 您如何根据需要安排启动 - 并在必要时重新启动 - 工作脚本?(我正在考虑诸如 init.d/、基于 Ruby 的“上帝”、DJB 的 Daemontools 等工具)

我正在开发一个异步队列/工作系统,在这种情况下使用 PHP 和BeanstalkdD(尽管实际的语言和守护进程并不重要)。任务本身并不太难——将带有命令和参数的数组编码为 JSON,以便通过 Beanstalkd 守护程序进行传输,然后在工作脚本中提取它们以根据需要对其进行操作。

还有许多其他类似的队列/工作者设置,例如StarlingGearmanAmazon 的 SQS和其他更多面向“企业”的系统,例如 IBM 的 MQ 和 RabbitMQ。如果你运行 Gearman 或 SQS 之类的东西 - 你如何启动和控制工作池?问题在于最初的工人启动,然后能够添加额外的额外工人,随意关闭它们(尽管我可以通过队列发送消息以关闭它们 - 只要一些“观察者”不会自动重新启动它们)。这不是 PHP 问题,它是关于直接设置一个或多个进程以在启动时运行的 Unix 进程,或者向池中添加更多工作人员。

循环脚本的bash 脚本已经到位 - 这会调用 PHP 脚本,然后从队列中收集并运行任务,偶尔退出以便能够自行清理(它也可以在失败时暂停几秒钟,或通过计划的活动)。这很好用,在此基础上构建工作进程一点也不难。

获得一个好的工作控制器系统是关于灵活性的,在机器启动时自动启动一个或两个,并且能够在队列繁忙时从命令行添加更多,在不再需要时关闭额外的。

0 投票
3 回答
886 浏览

ruby-on-rails - Gearman 架构查询

我是 Gearman 的新手。我对优化的 Gearman 使用有以下疑问:

1)我认为工人期望工作是一个“字符串”。我可以将数组或哈希作为作业发送给工人吗?如果不是,JSON 是发送 Array/Hash 的最佳作业格式吗?

2) 我可以将 rails 应用程序路由附加为 Job Server 的工作人员吗?

3)你如何检查一个工人是否正在运行?是否有任何管理工具可用于 Job Server 和 Worker stats?

4) 我可以构建一个 ROR 系统,让每个请求都通过 Gearman 作业服务器吗?我有多个使用相同数据库的应用程序(其中一些是 iPhone 应用程序、Android 应用程序、网站)。我的主要目标是使用所有这些应用程序的通用 API 访问内容。还是 Gearman 更适合后台进程?

谢谢。

0 投票
2 回答
2041 浏览

php - 使用 Gearman 进行后台处理的 PHP 工作池的属性

我做了一些关于 Gearman 的阅读,我想知道它是否可以用作后台处理的工作池。我对具有以下属性的 PHP 工作池感兴趣:

A. 工人应该能够同时运行

也就是说,我应该能够拥有一个工作池,并且我期望 gearman 在单独的线程中分派多个工作人员。我可能需要一个工人池管理器来管理等待新工作的工人数量。

gearman可以提供吗?我错过了重点吗?

任何帮助表示赞赏。

0 投票
4 回答
295 浏览

logic - 为什么这个循环在使用 && 而不是 'and' 时返回 1?

给我猜个谜……在while($row = mysql_fetch_assoc($result) and $runningOK)循环中,如果使用 PHP&&运算符代替andthen 会mysql_fetch_assoc严重失败,并且1在运行时只返回数字。

我已经尝试mysql_fetch_array()并到位,但我仍然有1问题。只有当且仅当我用&&and当前while语句类似的语句替换时,才会返回正确的行。

我在之前、内部和之后放置了调试语句以确保这一点。我想知道这是 PHP 怪癖还是我无法解释的问题。

0 投票
12 回答
15435 浏览

php - 很好地停止齿轮工人

我有许多 Gearman 工作人员不断运行,保存用户页面查看记录等内容。有时,我会更新 Gearman 工作人员使用的 PHP 代码。为了让工人切换到新代码,我为工人杀死并重新启动 PHP 进程。

有什么更好的方法来做到这一点?据推测,当我杀死其中一个工作进程时,我有时会丢失数据(尽管不是非常重要的数据)。

编辑:我找到了一个适合我的答案,并将其发布在下面。

0 投票
2 回答
37267 浏览

message-queue - Rabbitmq 或 Gearman - 选择作业队列

在工作中,我们需要构建一个工作服务器,用于发送电子邮件、构建 PDF、处理一些数据等。显然,我们希望构建某种通用排队系统。我对 Gearman 很熟悉,而这正是它试图解决的问题:将工作放在一个队列中,让工人来接他们。但是,我看到很多提到 Rabbitmq 并且不清楚它在这种情况下是如何使用的。

Rabbitmq 是一个很好的框架来构建分布式作业系统吗?

0 投票
1 回答
1210 浏览

php - 使用 RabbitMQ 构建 gearman 类型的应用程序

我正在寻找最佳实践的一般概述,以使用 RabbitMQ 消息系统来实现像 Gearman 这样的“作业分配”系统。

所以基本上我会有一些阅读队列和分叉的东西?运行作业的实例?

任何见解都值得赞赏。

0 投票
2 回答
2977 浏览

message-queue - 具有延迟的简单可扩展工作/消息队列

我需要设置一个作业/消息队列,并可以选择为任务设置延迟,以便空闲工作人员不会立即接收它,而是在一定时间后(可能因任务而异)。我研究了几个 linux 队列解决方案(rabbitmq、gearman、memcacheq),但似乎没有一个提供开箱即用的功能。

关于如何实现这一目标的任何想法?

谢谢!

0 投票
1 回答
2947 浏览

ruby-on-rails - Resque 或 Gearman - 为后台作业选择合适的工具

我们正在开发一个 Web 应用程序,其中大约 50% 的写入请求,我们最终将数据推送到多个数据存储,并在这些数据存储中插入和更新大量记录。为了提高响应时间,我们希望在后台异步处理此类请求。

我们的 Web 应用程序是用 Ruby on Rails 编写的。

我倾向于的两个解决方案是 Resque 和 Gearman。

Resque:这里有更多信息:http: //github.com/blog/542-introducing-resque Resque 似乎非常适合 Ruby,它专门用于后台作业处理。“后台作业可以是响应执行的任何 Ruby 类或模块。您现有的类可以轻松转换为后台作业,或者您可以创建专门用于工作的新类。”

Gearman:它不仅仅适用于异步处理的后台作业,但它绝对可以做到这一点。显然更健壮,或者看起来如此。Gearman 的另一个优点是,虽然您的客户端代码可能在 Ruby 中,但工作代码可能在 PHP 中。虽然现在我们完全是 Ruby on Rails 应用程序,但谁知道将来我们是否可能想要使用 PHP 或其他东西,这取决于手头的工作。

你会推荐什么?你有这两者中的任何一个的经验吗?在两者之间进行选择时,我应该记住哪些现实生活中的生产挑战?我什至在这里比较苹果和苹果吗?

0 投票
1 回答
1079 浏览

django - 用 Gearman 模拟 Google Appengine 的任务队列

我最喜欢 Google 的任务队列的特点之一是它的简单性。更具体地说,我喜欢它接受一个 URL 和一些参数,然后在任务队列准备好执行任务时发布到该 URL。

这种结构意味着任务总是执行最新版本的代码。相反,我的 gearman 工作人员都在我的 django 项目中运行代码——所以当我实时推送新版本时,我必须杀死旧工作人员并运行一个新工作人员,以便它使用当前版本的代码。

我的目标是让任务队列独立于代码库,这样我就可以在不重新启动任何工作人员的情况下推送新的实时版本。所以,我开始思考:为什么不让任务像谷歌应用引擎任务队列一样通过 url 执行?

该过程将像这样工作:

  1. 用户请求进来并触发了一些不应阻塞的任务。
  2. 每个任务都有一个唯一的 URL,因此我将一个 gearman 任务排入队列以 POST 到指定的 URL。
  3. gearman 服务器找到一个 worker,将 url 和 post 数据传递给一个 worker
  4. 工作人员只需将数据发布到 url,从而执行任务。

假设如下:

  1. 来自 gearman worker 的每个请求都以某种方式签名,以便我们知道它来自 gearman 服务器而不是恶意请求。
  2. 任务被限制在 10 秒内运行(不会有可能超时的长任务)

这种方法的潜在缺陷是什么?这是我担心的一个:

  • 服务器可能会同时受到许多由先前请求触发的请求的冲击。因此,一个用户请求可能需要 10 个并发 http 请求。我想我可以在每次请求限速之前让一个工作人员睡觉。

有什么想法吗?