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

Posted

技术标签:

【中文标题】使用多个 Docker 容器 VS 标准节点集群时的性能和可靠性【英文标题】:Performance and reliability when using multiple Docker containers VS standard Node cluster 【发布时间】:2017-06-18 13:42:24 【问题描述】:

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

应用程序

典型的MEAN stack web application 在Node 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 工人,应该意味着 12 个节点来处理所有请求/响应。如果这是正确的,那么唯一的缺点将是在硬件方面更强大的机器来支持这一点。

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

目标

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


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

谢谢!

【问题讨论】:

任何个人反馈要添加到这里?我也有这个确切的问题 嘿,我找不到答案,但看起来 3 个 docker 实例的性能远远好于 3 个作为节点集群运行的标准应用程序。这可能没有多大意义,但这就是我的本地围攻测试(1k 并发连接和基准模式打开)显示的结果。 来发布同样的问题,完全找到了,谢谢:) 【参考方案1】:

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

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

【讨论】:

Docker swarm 和 Nomad 一样也是一种选择,但如果你运行的是单个服务器,那可能是矫枉过正?

以上是关于使用多个 Docker 容器 VS 标准节点集群时的性能和可靠性的主要内容,如果未能解决你的问题,请参考以下文章

浅述Docker的容器编排

浅述Docker的容器编排

ElasticSearch-02-使用Docker在Mac系统上搭建两个节点的ElasticSearch集群(并同时创建kibana,cerebro两个容器)

ElasticSearch-02-使用Docker在Mac系统上搭建两个节点的ElasticSearch集群(并同时创建kibana,cerebro两个容器)

在Docker中安装MarkLogic的2节点群集

K3s 集群内 containerd 跟 docker 的区别