Docker与Node.js集群的比较

3

我正在学习Node.js,并了解了一些使用Node来扩展应用程序的方式。基本上有两种方式:集群化和工作线程。所以,我想问一个关于Node.js可扩展性的问题。据我所知,集群化有助于创建几个Node.js应用程序实例,从而帮助处理更多的请求。但问题是我们不能通过Docker实现相同的效果吗?即,将一个Node.js应用程序包装起来并创建克隆副本,然后在它们前面使用负载均衡器。这样做是否可行?

1个回答

3

您可以同时进行两者操作,但这取决于您如何设计应用程序架构。如果每个实例相对独立,则可以启动N个容器,每个容器都有一个Node进程。如果它们相互依赖,则可能希望在一个容器中使用一个分叉的进程管理器。

请记住,许多集群化工具都是为解决Docker本身解决的相同问题而构建的,因此这里的功能将有重叠部分。


谢谢你的回答,我只想要独立的克隆体可以准备好为大量请求提供服务。如果你处于我的位置,你会使用Docker还是集群化?抱歉,这只是一个旁问:关于使用Node.js构建大型后端的问题。有了工作线程的可用性,我们真的可以使用Node.js创建大型后端系统,而不是使用Java(Spring)或Asp.net吗?我只想完全专注于Node.js并尝试做些什么)) - ooopp
根据我的经验,群集化从未很好地工作。我一直使用Nginx和Passenger的组合来进行进程管理。最近,我转向使用Docker + Kubernetes来实现相同的功能,每个容器一个节点进程。 - tadman
由于容器的成本在很大程度上与其中的进程成比例,因此具有每个容器一个进程和具有N个进程的一个容器在资源使用方面实际上是相同的。不同之处在于,多个容器可以更容易地通过Kubernetes进行管理,这只是您可以随时更改的数字,并且它使滚动部署成为可能。 Docker(和Docker Swarm)没有相同的自动化功能,但如果您的应用程序成功,您可能最终会迁移到类似Kubernetes的东西,因此最好做好准备。 - tadman
好的,那我就集中精力学习 Docker + Kubernetes 并避免使用集群了。抱歉,我觉得你可能没看到我的上一个问题:)那个问题是关于在大型企业应用程序中使用 Node.js 的。我们能否使用它来替代 Java(Spring)呢?因为Node.js基本上被用作BFF而不是真正的后端。现在我们有工作线程来帮助卸载事件循环,所以我们可以将它作为真正的后端使用吗?谢谢)) - ooopp
1
在后端方面使用Node或Java都没有问题,两者都能够胜任。我唯一认为使用它们所面临的障碍是文化抵制或团队知识的缺乏。不要忘记,如果需要进行一些重型计算,否则会阻塞事件循环并破坏异步模型,Node具有WebWorkers。这些虽然不完全等同于线程,但解决了同样的问题。 - tadman
1
如果您想了解更多关于在“企业”环境中使用Node的信息,您可能需要查看有关此类事情的存档Node conf讲座。 - tadman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接