我的系统中有2个进程P1和P2,它们通过TCP进行非常频繁的通信。出于这个原因,它们都托管在同一个VM上。我正在考虑消除VM,而是将我的系统托管在物理机器上的容器中。如果我将系统停靠,我有两个选择:
请指导我以上两种方法的优点和缺点 方法1中通信延迟方面的开销是多少?
答案 0 :(得分:2)
一个容器中的多个进程的主要问题是信号管理:你如何(干净地)阻止所有你的进程?
这就是“PID 1 zombie reaping issue”,这就是为什么每当您需要管理多个流程时,像phusion/baseimage-docker
这样的基本图片都可以提供帮助。
更普遍的问题是微服务解耦:如果P1和P2都是有状态的并且相互依赖,那么将它们保存在同一个容器中是有道理的。
通信延迟方面涉及的开销是多少
这取决于所涉及的进程类型,但由于两个进程都在同一个docker主机上运行(即使它们位于不同的容器中),因此开销很小。
答案 1 :(得分:1)
这也是缩放问题。如果你想在P1的使用率超过某个阈值(堆,吞吐量)时自动缩放P1,只需一个容器方法,你就会复制P2,尽管可能不需要。
因此,一个容器一个进程,可以更好地扩展,并提供精细的管理(编排)控制。
就延迟而言,它实际上取决于容器的部署体系结构。如果两个容器都托管在同一台机器上,则延迟将是微不足道的,同时,如果它们位于2个不同的AWS区域,它就会开始产生影响。