我正在寻找好的经验法则来了解何时不虚拟化机器。
例如,我知道对一个利用率接近 100% 的完全 CPU 密集型进程进行虚拟化可能不是一个好主意,但运行一个在大多数时间都利用“大量”(比如 40% 或 50%) CPU 的进程是否有意义呢?
另一个例子:如果我虚拟化了 1000 台机器,即使它们的利用率很低或中等,在只有 4 个核心的主机上运行它们可能也是很糟糕的。
有人可以根据机器工作负载或与主机资源相比的客户机数量总结一下有关虚拟化的提示吗?
我通常使用 VirtualBox 或 VMWare 在 Windows 主机上进行虚拟化,但我认为这是一个非常通用的问题。
答案1
磁盘子系统。这通常是最不共享的资源。当然还有内存,但这个很明显。
磁盘子系统限制是双向的。如果系统使用大量磁盘 I/O,其他客户机的速度就会变慢。如果此客户机正在生产中,则可能需要快速响应网络查询。这可能非常令人沮丧,也是不租用虚拟硬件的一个重要原因。您可以使用专用磁盘来最大限度地减少此问题。
在 Guest 中仅使用 512 MB 内存会将所有磁盘缓存放在主机上。而且这些缓存并未在 Guest 之间平均分配。
不用担心 CPU IO。这样虚拟化非常高效,通常与同一系统上仅运行多个进程有关。我很少看到多 Xeon 系统在 CPU 上运行 100%。
編輯:錯誤
答案2
我永远不会放入虚拟机的东西:
任何使用无法虚拟化的特定硬件的东西:通常是图形、相当多的硬件安全模块、任何具有定制驱动程序的东西(例如专用网络驱动程序)。
存在许可问题的系统。有些软件按物理 CPU 或核心收费,无论您分配给虚拟机的 CPU 或核心数量有多少。如果您的软件在 32 核服务器上的虚拟机中运行,且只针对单个核心进行了许可,那么您就会受到审计。
我不建议放入虚拟机的东西:
已经尽力利用商用硬件中的所有资源的软件。作为“大数据”工作的一部分(如 Hadoop)的机器通常设计为在裸机上运行。
任何需要精细调整才能充分利用资源的事物。当您真正开始调整数据库时,争夺资源的虚拟机确实会给工作带来麻烦。
任何已经存在巨大瓶颈的事物。它本身就无法很好地与自己相处,也不太可能与他人相处融洽。
安装虚拟机后,有些事情非常棒:
任何花费大量时间闲置的东西。邮件和 DNS 等实用程序主机很难在现代硬件上产生足够的负载以保证专用服务器。
无法很好地(或轻松地)自行扩展的应用程序。遗留代码经常属于此类。如果应用程序不会扩展以占用服务器,请使用大量小型虚拟服务器。
项目/应用程序从小处着手,但会逐渐发展。与从裸机开始相比,向虚拟机添加资源(以及迁移到更新、更大的硬件)要容易得多。
另外,我不确定您是否夸大了在单个主机上放置大量虚拟机的规模,但如果您尝试使用较大的虚拟机:硬件比率,则可能需要考虑使用 ESX、Xen 和 KVM。与在 Windows 上使用 VMware 或 virtualbox 相比,效果会好得多。
答案3
虚拟化性能有两点。
- 共享瓶颈
- 仿真
在共享瓶颈方面,还有谁在同一台机器上?如果您在虚拟化环境中共置,那么您非常依赖托管合作伙伴对您诚实。
我认为原始性能(尤其是交互性)的主要问题是虚拟化系统的哪些部分被模拟。这取决于设置。磁盘和网络是典型的候选对象。根据经验,模拟会使执行操作的性能“成本”翻倍,因此任何硬件延迟时间都应计算为两倍,任何吞吐量数字都应减半。
答案4
anttiR 的回答很好。
此外,时间关键型系统。我刚刚发现 Hyper-V 的 dime rot(虚拟机逐渐落后,虚拟机中的所有现代操作系统都是这样,经常重新同步)对于我正在开发的一些时间关键型应用程序来说并不好用。另外,我将在那里使用“大量” CPU,并计划在生产中为该应用程序购买一台 12 核机器。