单个容器与多个容器

时间:2016-05-17 06:35:19

标签: docker

我的系统中有2个进程P1和P2,它们通过TCP进行非常频繁的通信。出于这个原因,它们都托管在同一个VM上。我正在考虑消除VM,而是将我的系统托管在物理机器上的容器中。如果我将系统停靠,我有两个选择:

  1. 容器1包含P1,容器2包含P2。这两个容器将被链接。 P1和P2之间的通信将跨越容器边界。
  2. 一个容器将包含P1和P2。通讯将保留在容器内。
  3. 请指导我以上两种方法的优点和缺点 方法1中通信延迟方面的开销是多少?

2 个答案:

答案 0 :(得分:2)

一个容器中的多个进程的主要问题是信号管理:你如何(干净地)阻止所有你的进程?

这就是“PID 1 zombie reaping issue”,这就是为什么每当您需要管理多个流程时,像phusion/baseimage-docker这样的基本图片都可以提供帮助。

更普遍的问题是微服务解耦:如果P1和P2都是有状态的并且相互依赖,那么将它们保存在同一个容器中是有道理的。

  

通信延迟方面涉及的开销是多少

这取决于所涉及的进程类型,但由于两个进程都在同一个docker主机上运行(即使它们位于不同的容器中),因此开销很小。

答案 1 :(得分:1)

这也是缩放问题。如果你想在P1的使用率超过某个阈值(堆,吞吐量)时自动缩放P1,只需一个容器方法,你就会复制P2,尽管可能不需要。

因此,一个容器一个进程,可以更好地扩展,并提供精细的管理(编排)控制。

就延迟而言,它实际上取决于容器的部署体系结构。如果两个容器都托管在同一台机器上,则延迟将是微不足道的,同时,如果它们位于2个不同的AWS区域,它就会开始产生影响。