我的系统中有两个进程P1和P2,它们通过TCP频繁地相互通信。因此,它们都托管在同一个VM上。我正在考虑消除VM,而是将我的系统托管在物理机器上的容器中。如果我篡改了我的系统,我有两个选择:
请指导我上述两种方法的优点和缺点。
在方法1中,通信延迟所涉及的开销是什么?
发布于 2016-05-17 07:14:43
一个容器中的几个进程的主要问题是信号管理:如何(干净地)停止所有进程?
这就是"PID 1 zombie reaping issue",这就是为什么每当您必须管理多个进程时,像phusion/baseimage-docker这样的基本映像可以提供帮助。
更普遍的问题是微服务解耦问题:如果P1和P2都是有状态的,并且相互依赖,那么将它们保持在同一个容器中是有意义的。
在通信延迟方面所涉及的开销是什么?
这取决于所涉及的进程类型,但是开销是最小的,因为两个进程都运行在同一个码头主机上(即使它们位于单独的容器中)。
发布于 2016-05-18 04:10:51
这也是一个缩放的问题。如果您想要自动缩放P1,假设P1的使用跨越了某个阈值(堆,吞吐量),使用单个容器方法,您也将复制P2,尽管这可能不是必需的。
因此,一个容器--一个进程,扩展得更好--并提供细粒度管理(编排)控制。
就延迟而言,它实际上取决于您对容器的部署架构。如果两个容器都托管在同一台机器上,那么延迟将是微不足道的,同时,如果它们位于两个不同的AWS区域,则会开始产生影响。
https://stackoverflow.com/questions/37268790
复制相似问题