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

2023-12-23

使用多个 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

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


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

谢谢你!


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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Ogre3D、多显示器和鼠标光标

    我正在开发一个需要在 OpenGL 中进行多头渲染的应用程序 现在 我可以渲染到多个屏幕 但鼠标光标的移动仅限于单个屏幕 但是 我希望能够在所有渲染的屏幕上使用鼠标光标 有人遇到过同样的问题吗 如果有 你是如何解决的 我为此找到了一个可行的
  • SVG 和 div 之间的白色间隙

    这不是我能找到的任何当前问题的重复 我已经尝试过诸如向 SVG 元素添加 block flex 之类的答案 但我相信这是一个不同的 如果有任何相关的话 我正在使用 Tailwind 这是存在此问题的多个不同 SVG 之一
  • Java 命令在 NLTK 斯坦福 POS Tagger 中失败

    我请求您帮助解决 Java 命令失败 错误 每当我尝试标记大小为 2 MB 的阿拉伯语语料库时 该错误就会不断抛出 我搜索了网络和 stanford POS tagger 邮件列表 但是 我没有找到解决方案 我读了一些关于类似问题的帖子 有
  • 等待多个异步下载任务

    我想同时下载一些文件 例如 100 个文件 所以我决定将我的下载线程添加到调度队列中 GCD 将调整同时运行的线程数量 这里的问题是 dispatch async将立即完成 因为task将在另一个线程上运行 因此 如果urls的长度是100
  • Flex 自定义组件不接受脚本:“String”类型的默认属性“text”的多个初始值设定项值

    我正在使用 Flex 4 和 Flash Builder 4 我只是想学习创建组件 我创建了一个 mxml 组件 如下所示并将其包含在我的应用程序中
  • 如何在 VB.NET 中引发事件之前检查订阅者

    在 C 中 您可以执行以下操作 if Changed null Changed this EventArgs Empty 但是您在 VB NET 中做什么呢 有RaiseEvent but is RaiseEvent Changed Me
  • 更改按钮文本和操作 - Android 开发

    我无法弄清楚如何更改按钮的文本和操作 我想要做的是有一个带有文本 播放 的按钮 单击它会播放一首歌曲并将文本更改为 暂停 然后 当您再次单击它时 它将暂停歌曲并将文本更改为 播放 我知道如何使用媒体播放器 编码 只是不知道如何以这种方式编码
  • 线程完成工作后如何返回值?

    假设我们有一个简单的例子 public Example extends Thread String temp public Example Override public void run temp a value public stati
  • 鞍点的位置

    我有以下问题 假设我们有一个9 8的矩阵 如果矩阵位于某个位置 则称其具有 鞍点 是其行中的最小值和其列中的最大值 在符号 中 a i j 是鞍点 如果 a i j min a i k max a k k 1 lt k lt 8 1 lt
  • 使用Python的正则表达式将浮点数替换为“dot”

    我想替换 出现在我的字符串中带有 点 的浮点数中 反之亦然 Example t I am coder I work in Google I earn 98748 85 Expected output I am coder I work in
  • R 中的字符编码

    我正在尝试阅读csv由 Sql Server Management Studio 生成并编码为的文件UTF 8 我保存时选择了该选项 到R版本 3 0 1 x64 至read csv2 我无法让 R 正确显示特殊字符 如果我设置fileEn
  • 从字符串中获取整数月份值

    我正在解析来自 AWS 的 cron 字符串 如下所示cron 0 7 13 November 2019 有没有一种干净的方式可以从November回到11使用 Go 的内置类型 这time Month类型允许映射int to string
  • 从亚马逊 s3 存储桶子文件夹获取文件

    我正在尝试从亚马逊 S3 存储桶子文件夹中获取所有文件 并使它们可以在网页中下载 我有一个名为图像的桶 在那个桶里我还有一些其他文件夹 现在我试图获取该子文件夹内的所有文件并将其显示在页面中 S3 桶 图片 图像 测试1 图像 测试2 图像
  • SQL 声明变量

    谁能看一下我的发言 DECLARE tblName varchar MAX strSQL varchar MAX SET tblName SELECT DISTINCT o name as TableName FROM sysobjects
  • 如何将 SQL Server 2005 数据传输或导出到 Excel

    我有一个简单的 SQL 选择 查询 我想将结果转储到 Excel 文件中 我只能另存为 csv 并转换为 xls 会产生一些超级丑陋的输出 无论如何 据我所知 使用谷歌 这似乎并不那么简单 任何帮助将不胜感激 SSIS 做这样的事情是轻而易
  • 如何更改 NsdManager 使用的 Android 设备名称?

    我正在使用 NsdManager 在本地网络上注册 Web 服务 我的问题是设备名称称为 android 因此我可以从笔记本电脑上以 android local 身份访问手机 我怎样才能改变这个名字 我想要一些更独特的东西 您无法更改此设置
  • 使用 www::mechanize 时的 Iconv::IllegalSequence

    我正在尝试做一些网络抓取 但 WWW Mechanize gem 似乎不喜欢编码并且崩溃 post 请求导致 302 重定向 机械化遵循 到目前为止一切顺利 并且生成的页面似乎使其崩溃 我用谷歌搜索了很多 但到目前为止还没有找到如何解决这个
  • 如何更改 QPlainTextEdit 中选项卡的宽度

    When using the QPlaintextEdit in PyQt5 if I press the Tab button on my keyboard I get a tab space which is equal to size
  • Django 管理员未对用户密码进行哈希处理

    我在用AbstractBaseUser and UserCreationForm与我的 Django 应用程序 通过我的应用程序注册用户时 密码以哈希格式保存并保存在数据库中 但是当我尝试使用 Django 管理站点执行相同的操作时 密码会
  • 使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性

    使用多个 Docker 容器 VS 标准 Node 集群时的性能和可靠性 您好 我有一个关于我遇到的两种设置的性能 可靠性和增长潜力的问题 我距离 Docker 或集群专家还很远 所以任何建议或提示将不胜感激 The app Typical