5

我正在考虑使用 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 的一个重要原因不是因为它的非阻塞结构,而是因为它的绝对速度。

4

2 回答 2

4

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

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

:是的

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

可以以没有单点故障的方式配置 gearman 吗?

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

于 2012-05-25T20:01:04.793 回答
1

Node 有一个集群模块,可以对 n 个进程进行基本的负载平衡。你可能会发现它很有用。

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

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

于 2012-05-25T20:04:01.280 回答