我们目前购买了一台新服务器,配备 64 GB RAM 和 8 个内核,支持超线程。我们将使用以下方式构建一个系统:
- nginx。
- 阿帕奇。
- mysql。
- php
因此,问题在于性能:如何最有效地使用内核?
是安装单个操作系统并调整各个应用程序更好,还是创建多个虚拟机,让每台机器利用其资源(例如核心)更好?
答案1
使用虚拟机的优点并不在于性能本身的提高。主要思想是,在许多情况下您希望系统隔离,即您不希望一个系统干扰另一个系统。这在云计算中起着重要作用,因为提供商可能为许多不同的客户托管设备,当然这些设备需要安全地分开。如果使用裸机方法,在这种情况下每个客户都有自己的机器,则系统可能无法充分利用。在一台物理机上托管许多虚拟机可以提高利用率,同时仍然提供安全的环境。
然而,托管虚拟机有其自己的高架。软件在虚拟化硬件上运行的效率可能不高,虚拟机必须从主机进行管理,并且虚拟机之间存在大量冗余。这会对性能造成惩罚,而不是奖励。
在您的情况下,出于安全或维护原因,您可能希望在单独的虚拟机中运行每个服务。如果您的一项服务受到损害,其他服务可能不会受到影响。此外,还可以轻松地为每个虚拟机创建快照,从而简化维护工作等。不过,我不会押注性能会有所提高。
VM 的替代方案是操作系统级虚拟化例如最近在 Linux 上流行的容器技术码头工人。它们允许多个独立的用户空间实例,无需运行多个成熟的操作系统,从而显着减少性能损失,同时提供虚拟机的许多优点。 Docker 容器易于部署并且还支持快照。
答案2
因此,问题在于性能 - 如何最有效地使用内核?
如果这个盒子上没有运行任何其他东西,我会进行简单的安装 - 尽管我不喜欢将所有内容都放在一个盒子上。几乎没有什么可以与“本地”运行相媲美。正如 @Benjamin B. 所说:Docker 是一个开销非常低的虚拟化级别。但除非您有理由进行虚拟化,否则我不会使用如此简单的设置来实现它。它至少会给您的项目增加额外的组织开销。
是创建一个单一操作系统并有效地调整我所描述的组件还是创建多个虚拟机并让每台机器利用其核心更好?
为什么这应该更好?假设您在机器上运行 Ubuntu,并使用 Ubuntu 安装虚拟机:为什么 Guest-Ubuntu 的行为与普通安装不同?
操作系统的构建是为了有效地管理资源,因此在简单安装上运行所有内容应该可以解决问题。
如果您打算轻松地启动和关闭实例/服务,那么虚拟化会很有趣;或者如果您需要更细粒度的隔离级别。
但是,由于它是您唯一的盒子,因此您可以进行简单安装。
OT:为什么使用 apache 和 nginx?