【问题标题】:Using php + gearman + node.js使用 php + gearman + node.js
【发布时间】:2012-05-25 19:33:09
【问题描述】:

我正在考虑使用 php 构建一个站点,但是如果在 node.js 中创建,它的几个方面的性能会好得多。同时,网站的大部分内容需要保留在 PHP 中。这是因为很多功能已经用 PHP 开发了,重新开发、测试等工作量太大,坦率地说,网站的这些部分在 PHP 中运行得非常好。

我正在考虑重建 node.js 中的部分,这将受益于在 node.js 中运行,然后让 PHP 使用 Gearman 将请求传递给 node.js。通过这种方式,我通过启动更多的工作人员进行横向扩展,并让 Gearman 处理负载分配。

我们的网站访问量很大,我担心 gearman 能否处理这种负载。我不想让这个问题保持高效,所以让我们主要关注以下可解决的问题:

  • 假设我们有内存,gearman 能否处理我们所有的预期负载(一次可能有大约 3000 多个排队的作业,每秒处理数千个作业)?
  • 如果我只是使用 CURL 将请求传递给 node.js,这是否会运行得更好?如果是这样,node.js 是否提供任何方法来将负载分配到给定脚本的多个实例上?
  • 能否以没有单点故障的方式配置 gearman?
  • 你们发现在开发和扩展方面出现了哪些问题?

我正在解决这些广泛的问题,以便查看这篇文章的任何人都可以在一个地方收集关于相互强烈影响的事项的广泛信息。

当然我会测试所有这些,但我想在可能进行此类操作之前收集尽可能多的信息。

编辑:我使用 gearman 的一个重要原因不是因为它的非阻塞结构,而是因为它的绝对速度。

【问题讨论】:

  • gearman 可以处理我们所有的预期负载吗? 这是一个字符串长度的问题,取决于你有多少工作服务器可用,您的队列填满的速度,以及每个项目需要多少精力来处理。如果您可以在一台服务器上每秒处理数千次,并且您没有以更高的恒定速率将它们排队,我认为您会没事的。顺便说一句,Gearman 可用于阻塞和非阻塞模式,绝对值得一试。

标签: php node.js gearman


【解决方案1】:

我只能回答你关于 Gearman 的问题:

假设我们有内存,gearman 能否处理我们所有的预期负载(一次可能有大约 3000 多个排队的作业,每秒处理数千个)?

:是

:一切都有其极限。如果您的工作负载非常大,您可能会遇到问题。 Gearman 将其队列存储在内存中。因此,如果您的有效负载超过 Gearman 可用的内存量,您将遇到问题。

能否以没有单点故障的方式配置 gearman?

Gearman 有一个插件/扩展/组件可用于将 MySQL 用作持久性存储。这样,如果 Gearman 或机器本身出现故障,您可以将其立即恢复到停止的位置。如果其他工作人员出现故障,多个工作服务器可以帮助保持工作。

【讨论】:

  • 谢谢。这回答了我对 Gearman 的一些关键点。我会测试这些东西,看看它是否适合我们的实现。
【解决方案2】:

Node 有一个cluster module,可以对 n 个进程进行基本的负载平衡。您可能会发现它很有用。

nodejs-land 中的一个常见架构是让您的节点与 http 通信,然后使用某种负载平衡方式,例如 http proxyservice registry。我敢肯定它在其他地方或多或少是一样的。我对 gearman 的了解还不够,无法说它是否“足够好”,但如果这是一般的想法,那么我想它会很好。至少,我敢肯定,其他人会有兴趣听听它的进展情况!

编辑:记住,数字运算会阻塞节点的事件循环!如果您考虑一下,这有点明显,但绝对要牢记。

【讨论】:

  • 谢谢。对于 node.js,这似乎是一个可行的负载平衡选项。我将不得不研究它如何分配负载,以及可用的冗余和持久性类型。
  • 另外,我应该在我的帖子中澄清事件阻塞不是我主要关心的问题,因为我使用 node.js 主要是为了它的速度。我已经更新了我原来的帖子,以使这一点更清楚,。
  • 虽然这对您的网站来说可能还为时过早,但您可能对 Node 到 PHP 的这个端口感兴趣:nodephp.org
猜你喜欢
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-16
相关资源
最近更新 更多