Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如果我们将nodejs进程放在docker容器中,对性能有什么影响?_Node.js_Docker - Fatal编程技术网

Node.js 如果我们将nodejs进程放在docker容器中,对性能有什么影响?

Node.js 如果我们将nodejs进程放在docker容器中,对性能有什么影响?,node.js,docker,Node.js,Docker,我的后端是一个运行在ubuntu linux上的nodejs应用程序。当有来自客户端的请求时,它需要生成一个nodejs子进程。子过程通常需要不到20秒的时间来完成。如果有许多并发请求进入,则需要管理这些进程。我正在考虑将spawn进程移动到docker容器中。这意味着如果有来自客户端的请求,将创建一个新的docker容器来运行该流程。通过这种方式,我可以使用kubernetes来管理这些docker容器。我不确定这是否是一个好的设计。将进程放在docker容器中是否会导致任何性能问题 我之所以

我的后端是一个运行在ubuntu linux上的nodejs应用程序。当有来自客户端的请求时,它需要生成一个nodejs子进程。子过程通常需要不到20秒的时间来完成。如果有许多并发请求进入,则需要管理这些进程。我正在考虑将spawn进程移动到docker容器中。这意味着如果有来自客户端的请求,将创建一个新的docker容器来运行该流程。通过这种方式,我可以使用kubernetes来管理这些docker容器。我不确定这是否是一个好的设计。将进程放在docker容器中是否会导致任何性能问题


我之所以考虑使用docker容器而不是spawn,是因为kubernetes提供了管理这些容器的所有功能。例如,如果有太多请求,则自动缩放,限制docker容器、调度程序、监控等的cpu和内存。如果使用spawn,则必须实现这些逻辑

docker实际上只是linux本身核心功能的包装器,所以并没有重大影响——它只是容器中的分离过程。所以问题更多的是关于主机中的虚拟化级别。如果是windows中的linux,或者是windows中的docker,它可能会以某种方式影响你的应用程序,而虚拟化是一种沉重的方式。docker允许您分离依赖项,而几乎不会对性能产生任何影响。

docker实际上只是linux本身核心功能的包装器,所以没有重大影响-它只是容器中的分离过程。所以问题更多的是关于主机中的虚拟化级别。如果是windows中的linux,或者是windows中的docker,它可能会以某种方式影响你的应用程序,而虚拟化是一种沉重的方式。docker允许您分离依赖项,而几乎不会对性能产生任何影响。

您可以自己轻松测量开销:获取任何基本docker映像,例如Debian基本映像并运行

time bash -c true
time docker run debian bash -c true
每次运行几次,忽略第一次运行

这将为您提供启动和清理成本。在实际运行期间,可以忽略不计/没有进一步的开销


Kubernetes本身可能会增加一些额外的开销,这也是最好的测量方法。

您可以自己轻松测量开销:获取任何基本的docker映像,例如Debian base映像并运行

time bash -c true
time docker run debian bash -c true
每次运行几次,忽略第一次运行

这将为您提供启动和清理成本。在实际运行期间,可以忽略不计/没有进一步的开销

Kubernetes本身可能会增加一些开销,这也是最好的衡量方法。

来自:

与默认网桥模式相比,主机模式提供了显著更好的网络性能,因为它使用主机的本机网络堆栈,而网桥必须通过docker守护进程进行一级虚拟化。当容器的网络性能至关重要时,建议在此模式下运行容器,例如,生产负载平衡器或高性能Web服务器

因此,说没有显著性能差异的答案是不正确的,正如Docker文档本身所说的那样

这只是网络的例子。访问磁盘、内存、CPU或其他内核资源时可能会有影响,也可能不会有影响。我不是Docker上的导出者,但对于这个问题还有其他很好的答案,例如,详细介绍Docker特定性能问题的博客

最终,它将取决于您的应用程序所做的事情以及它受到的影响。最好的建议是,如果您非常关心性能,那么您应该设置自己的基准,并在您的环境中进行自己的测试。这不能回答你的问题,因为没有一般的答案。不过,重要的是,几乎没有任何影响似乎是不正确的。

来自:

与默认网桥模式相比,主机模式提供了显著更好的网络性能,因为它使用主机的本机网络堆栈,而网桥必须通过docker守护进程进行一级虚拟化。当容器的网络性能至关重要时,建议在此模式下运行容器,例如,生产负载平衡器或高性能Web服务器

因此,说没有显著性能差异的答案是不正确的,正如Docker文档本身所说的那样

这只是网络的例子。访问磁盘、内存、CPU或其他内核资源时可能会有影响,也可能不会有影响。我不是Docker上的导出者,但对于这个问题还有其他很好的答案,例如,详细介绍Docker特定性能问题的博客

最终,它将取决于您的应用程序所做的事情以及它受到的影响。最好的建议永远是,如果您非常关心性能,那么您应该设置自己的基准,并在中进行自己的测试
你的环境。这不能回答你的问题,因为没有一般的答案。不过,重要的是,几乎没有任何影响似乎不正确。

您确定要在每个请求上生成一个新容器吗?对我来说,这看起来像是开销,因为启动它可能已经需要一些时间了。这么复杂的设置到底需要什么?不产生任何东西的问题在哪里?我想管理这些过程。如果我使用docker,kubernetes将为我提供所有管理功能,所以我不需要实现它。你说的管理是什么意思?为什么不运行请求而不生成所有内容?如果子请求完成,生成的进程不会终止吗?我已经更新了我的问题。管理意味着限制子进程使用的cpu/内存资源,如果有太多请求,则自动缩放,等等。您确定要在每个请求上生成新容器吗?对我来说,这看起来像是开销,因为启动它可能已经需要一些时间了。这么复杂的设置到底需要什么?不产生任何东西的问题在哪里?我想管理这些过程。如果我使用docker,kubernetes将为我提供所有管理功能,所以我不需要实现它。你说的管理是什么意思?为什么不运行请求而不生成所有内容?如果子请求完成,生成的进程不会终止吗?我已经更新了我的问题。管理意味着限制子进程使用的cpu/内存资源,如果有太多的请求,则自动缩放,等等。