使用php + gearman + node.js

我正在考虑build立一个使用PHP的网站,但是它有几个方面,如果在node.js中做的话,性能会好很多。 同时,网站的大部分需要保留在PHP中。 这是因为很多function已经在PHP中开发出来了,而重新开发,testing等工作太大了,坦率地说,这些网站的这些部分在PHP中运行得非常好。

我正在考虑重buildnode.js中的部分,这将从node.js中运行最多的部分中受益,然后让PHP使用Gearman将请求传递给node.js。 通过这种方式,我通过启动更多的工作人员来扫描规模,并让齿轮人员处理负载分配。

我们的网站获得很多stream量,我担心,如果工人可以处理这个负载。 我不想让这个问题保持高效,所以我们主要关注以下几点:

  • 假设我们拥有内存(可能大约有3000个以上的排队工作,每秒处理几千个工作),齿轮人员可以处理我们所有的预期负载吗?
  • 如果我使用CURL将请求传递给node.js,那么运行情况会更好吗?如果是,node.js是否提供了将负载分配给给定脚本的多个实例的方法?
  • 齿轮人员可以configuration成没有单点故障的方式吗?
  • 在开发和扩展方面,你们可以看到哪些问题?

我正在处理这些广泛的问题,所以任何观看这篇文章的人都可以在一个地方收集各种信息,以便对彼此产生强烈的影响。

当然,我会testing所有这些,但是我想在可能进行这样的事情之前收集尽可能多的信息。

编辑:我使用齿轮的一个很大的原因不是因为它是非阻塞结构,而是因为它是纯粹的速度。

我只能在Gearman上提出你的问题:

假设我们拥有内存(可能大约有3000个以上的排队工作,每秒处理几千个工作),齿轮人员可以处理我们所有的预期负载吗?

:是的

:一切都有其限度。 如果你的工作有效载荷非常大,你可能会遇到问题。 Gearman将其队列存储在内存中。所以如果你的有效载荷超过Gearman可用的内存量,你将遇到问题。

齿轮人员可以configuration成没有单点故障的方式吗?

Gearman有一个插件/扩展/组件,可以使用MySQL作为持久性存储。 这样,如果Gearman或机器本身出现故障,您可以将它从正确的位置放回原位。 如果其他员工出现故障,多个员工服务器可以帮助他们继续工作。

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

nodejs-land中的一个常见体系结构是让你的节点谈论http,然后使用某种负载平衡方式,如http代理或服务注册 。 我确定其他地方差不多。 我对齿轮工人不太了解,如果这是“足够好”,但如果这是一般的想法,那么我会想象它会没事的。 至less,其他人会有兴趣听到它是如何去的我相信!

编辑:记住,数字运算会阻止节点的事件循环! 如果你仔细想一想,这一点就显而易见了,但是一定要记住。