很早之前,就有关于“每台机器(machine)应该有多少个服务”的讨论。在我们继续之前,应该找一个比”机器”更好的术语。在前虚拟化时代,每个运行操作系统的主机与底层物理基础设施之间的映射形式有很多种。因此,我倾向于使用“主机”(host)这个词来做通用的隔离单元,也就是能够运行服务的一个操作系统。如果你直接在物理机上部署,那么一台物理机映射到一台主机。如果你使用了虚拟化,单个物理机会映射到多个独立的主机,并且每个都可用包含一个或者多个服务。
单主机多服务
- 优势:
首先,从主机管理的角度来看它更简单。在一个团队管理基础设施,另一个团队管理软件的模式下,管理基础设施团队的工作量通常与所要管理的主机量成正比。如果单个主角包含更多的服务,那么主机管理的工作量不会随着服务数量的增加而增加。
其次是成本。即使你有一个能够提供一些配置和更改虚拟主机大小等服务的虚拟化平台,虚拟化的基础设施本身也会占用一部分资源,从而较少服务可用的资源。
- 劣势:
首先,它会使监控变得更加困难。举个例子,当监控CPU使用率时,应该监控每个单独的服务还是整个机器呢?服务之间的相互影响也是不可避免的。如果一个服务的负载很高,那么它有可能会过多占用系统其他部分的资源。
服务的部署也会变得更复杂,因为很难保证对一个服务的部署不会影响其他的服务。
这个模型对团队的自治性也不理。如果不同团队所维护的服务安装在了同一台主机上,那么谁来配置这些服务所在的主机。
每个主机一个服务
PaaS(Platform-as-a-Service)平台