使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性
您好,我有一个关于我遇到的两种设置的性能、可靠性和增长潜力的问题。我距离 Docker 或集群专家还很远,所以任何建议或提示将不胜感激。
The app
Typical MEAN 堆栈 Web 应用程序 https://meanjs.org/运行于Node v6.9.4
。没什么花哨的,标准设置。
我发现的问题和可能的解决方案
a) 带有 NGINX(反向代理)和 NodeJS 的标准 Linux 服务器
b) 带有 NGINX(反向代理)和 NodeJS 的标准 Linux 服务器
簇。使用Node的Cluster模块 https://nodejs.org/dist/latest-v6.x/docs/api/cluster.html#cluster_cluster
c) 使用 NGINX 的负载均衡器克隆“Dockerized”NodeJS 应用程序 3 次(3 个容器)。这个想法归功于 Anand Sankar http://anandmanisankar.com/posts/docker-container-nginx-node-redis-example/
// 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 个工作线程,应该意味着 12 个节点来处理所有请求/响应。如果这是正确的,那么唯一的缺点就是在硬件方面需要更强大的机器来支持这一点。
无论如何,我的逻辑可能完全错误,所以我寻找对此的任何评论或反馈!
Goal
我的目标是拥有生产就绪、稳定的环境,可以承受一些负载。我们并不是在谈论同时数千个并发连接等。保持基础设施的可扩展性和灵活性是一个很大的“+”。
希望这个问题是有道理的。很抱歉这篇文章很长,但我想保持清晰。
谢谢你!