node.js - 使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性

标签 node.js express nginx docker docker-compose

使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性

您好,我有一个关于我遇到的两种设置的性能、可靠性和增长潜力的问题。我远非 Docker 或集群专家,所以任何建议或提示将不胜感激。

应用程序

典型 MEAN stack web applicationNode v6.9.4 上运行。没什么花哨的,标准设置。

我发现的问题和可能的解决方案

a) 带有 NGINX(反向代理)和 NodeJS 的标准 Linux 服务器

b) 带有 NGINX(反向代理)和 NodeJS 的标准 Linux 服务器 簇。 Using Node's Cluster module

c) 使用 NGINX 的负载均衡器克隆了 3 次“Dockerized”NodeJS 应用程序(3 个容器)。 Credit for the idea goes to Anand Sankar

// Example nginx load balance config
server app1:8000 weight=10 max_fails=3 fail_timeout=30s;
server app2:8000 weight=10 max_fails=3 fail_timeout=30s;
server app3:8000 weight=10 max_fails=3 fail_timeout=30s;

// Example docker-compose.yml
version: '2'
services:
    nginx:
        build: docker/definitions/nginx
        links:
            - app1:app1
            - app2:app2
            - app3:app3
        ports: 
            - "80:80"
    app1:
        build: app/.
    app2:
        build: app/.
    app3:
        build: app/.

d) 一起。 “Dockerized”NodeJS 应用程序(多个容器),在 3 个容器内部和顶部配置了集群 - NGINX 的负载均衡器。

如果我理解正确的话,运行应用程序的 3 个 NodeJS 容器,其中每个应用程序副本都支持 NodeJS 集群,应该会带来令人难以置信的性能。

3 x 容器 x 4 worker ,应该意味着 12 个 Node 来处理所有请求/响应。如果这是正确的,那么唯一的缺点就是支持这一点的硬件和机器更强大。

无论如何,我的逻辑可能完全错误,所以我正在寻找任何意见或反馈!

目标

我的目标是准备好生产环境,稳定的环境可以承受一些负载。我们并不是说同时有数千个并发连接等。保持基础架构的可扩展性和灵 active 是一个很大的“+”。


希望这个问题是有道理的。很抱歉,这篇文章很长,但我想保持清楚。

谢谢!

最佳答案

根据我的经验,我认为选项 C 或 D 是最易于维护的,并且假设您在服务器 D 上拥有可用的资源可能是性能最高的。

也就是说,您有研究过 Kubernetes 吗?我发现有一点学习曲线,但它是一个很好的资源,它允许动态扩展、负载平衡,并提供比 Docker Compose 更流畅的部署选项。最大的问题是托管 Kubernetes 集群比单个服务器更昂贵。

关于node.js - 使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41986066/

相关文章:

mongodb - 没有 Mongoose 的 Express 和 MongoDB

python - 在 Django 的调试和生产中配置静态文件的最常见方法是什么

node.js - 谷歌文档的谷歌驱动器 API 中的 files.list() 和 files.get() 中缺少导出链接

javascript - 运行基本 Express 项目时出错

javascript - 可以在不使用中间件函数的情况下增强 express.js req 和 res 变量吗?

Nginx - 更改欢迎页面

html - 使用 HTML5 模式路由在 AngularJS 网站上爬行的 Google 机器人

javascript - 从数组中删除一个对象?

javascript - NodeJS MongoDB 连接字符串问题

javascript - Node.js exec 事件未在 Promise 内触发