虚拟机 (VM) 是物理计算机的虚拟表示或仿真,虚拟机使用软件而不是硬件来运行程序和部署应用程序。
通过使用单个物理机的资源(如内存、CPU、网络接口和存储),虚拟机允许企业在单个设备上虚拟运行具有不同操作系统的多台计算机。
虚拟机通常称为“客户机”,一个或多个客户机运行在被称为“主机”的物理机上。虚拟机技术包括虚拟服务器、虚拟服务器实例 (VSI) 和虚拟专用服务器 (VPS)。
根据 Global Market Insights (GMI) 报告,2023 年虚拟机市场规模已超过 95 亿美元。GMI 预测,在稳步采用云计算的推动下,该市场将在 2024 至 2032 年间以约 12% 的复合年增长率 (CAGR) 不断扩张。随着企业迁移到云端以实现可扩展性、灵活性和成本效益,云供应商会继续集成虚拟机和其他关键技术(例如容器),以便提供一致的 IT 基础设施。
虚拟化可以更高效地使用物理计算机硬件,而且是云计算的基础。
虚拟化是通过虚拟机管理程序(也称为虚拟机监视器 (VMM))来实现的。当虚拟机彼此并行运行时,该轻量级软件层负责对其进行管理。
虚拟化的诞生可追溯到 1964 年,当时 IBM 设计并推出了 CP-40,这是 IBM System/360 的一个实验性分时研究项目。后来,CP-40 依次演变为 CP-67 和 UNIX,且可提供能支持多个并发用户的计算机硬件,为虚拟机奠定了基础。
1972 年 8 月 2 日,IBM 推出了被很多人视为首个虚拟机的 VM/370 以及首个支持虚拟内存的 System/370 大型机。
1998 年,VMware(ibm.com 外部链接)开发了 x86 操作系统,该操作系统可以将一台计算机分成多个虚拟机,每个虚拟机都有自己的操作系统。1999 年,该公司推出了 VM Workstation 1.0,这是首款允许用户在单台电脑上将多个操作系统作为虚拟机运行的商业产品。
如今,虚拟化已成为企业级 IT 基础设施的标准实践,也是云计算经济的驱动力,使企业能够提高容量利用率并降低成本。可以虚拟化所有 IT 基础设施,包括桌面环境、操作系统、存储硬件、数据中心等等。
虚拟化依赖虚拟机管理程序技术。此软件层被置于物理计算机或服务器(也称为 裸机服务器)上,这样,物理计算机就能够将其操作系统和应用程序与其硬件相隔离。这些虚拟机可以独立运行它们的操作系统和应用程序,同时仍然共享由虚拟机管理程序管理的服务器的原始资源(内存、RAM、存储等等)。从本质上讲,虚拟机管理程序就像一名交通警察,负责为虚拟机分配资源,并确保它们不会相互干扰。
虚拟机监控程序主要有两种类型:
除根据虚拟机管理程序管理进行分类外,虚拟机主要可分为两大类:系统虚拟机(也称为全虚拟化计算机)和流程虚拟机。
系统虚拟机允许在不同的虚拟机之间共享底层物理机资源,且每个虚拟机均运行自己的操作系统。相比之下,流程虚拟机(也称为应用程序虚拟机)则会在操作系统内运行应用程序并支持单个流程。Java 虚拟机(可运行用 Java 编译的程序)是流程虚拟机的一个示例。
较之传统物理硬件,虚拟机具有众多优势。
由于多个虚拟机在一台物理计算机上运行,客户无须在每次要运行其他操作系统时购买新的服务器。如此一来,他们便可从已拥有的每个硬件中获得更多回报,从而大幅降低与资本支出和运营支出相关的 IT 成本。
由于虚拟机是基于软件的,因此极易启动新的虚拟机,且与预配基于硬件的新环境相比,可以更快地实现纵向扩展以满足新的工作负载要求。
企业可根据需要在网络中的物理计算机之间重新定位虚拟机。此功能可以将工作负载分配给具有备用算力的服务器。虚拟机甚至可以在本地与云环境之间迁移,这样,它们对于在数据中心与云服务提供商之间共享计算资源的混合云场景非常有用。
创建虚拟机比在物理服务器上安装某一 OS 速度更快也更容易,因为您可以克隆已安装此操作系统的虚拟机。开发人员和软件测试人员可按需创建新环境,以便处理出现的新任务。
与直接在硬件上运行的操作系统相比,虚拟机能以多种方式提高安全性。通过使用外部程序,可以扫描虚拟机文件是否存在恶意软件。可以随时创建虚拟机的快照,并在虚拟机感染恶意软件时将其还原到该状态,从而有效地及时恢复虚拟机。此外,通过快速、轻松地创建虚拟机,还可快速删除并重新创建受到感染的虚拟机,从而加快从恶意软件感染中恢复的速度。
通过减少运行工作负载和应用程序所需的物理服务器数量,您可以大幅降低能源消耗,从而改善对环境的影响。
虽然虚拟机具备众多优点,但它也有一些需纳入考虑的缺点。
虚拟机依赖主机上为其提供的硬件资源。有限的资源可能会导致性能下降和效率低下。
虚拟机的配置和管理可能非常复杂,需要具备技术知识和专业知识的团队对它们进行设置和维护。
虚拟机依赖一台物理计算机,因此存在单点故障风险。
无论是对于企业 IT 管理员还是用户,虚拟机都具有广泛的用途,包括:
作为第一家成功将 x86 微处理器架构的虚拟化商业化的公司,VMware 是虚拟化市场的领导者。VMware 为企业客户提供第 1 类和第 2 类虚拟机管理程序和虚拟机软件。
大多数虚拟机监控程序均支持以访客身份运行 Windows 操作系统的虚拟机。Microsoft 的 Hyper-V 虚拟机监控程序是 Windows 操作系统的一部分。安装后,它会创建一个包含自身和主 Windows 操作系统的父分区,且每个分区均有权访问该硬件。其他操作系统(包括 Windows 来宾操作系统)均在子分区中运行,并通过父分区与该硬件进行通信。
Google 的开源 Android 操作系统在手机和联网家居设备上非常常见。
Android 操作系统只在这些设备的典型 ARM 处理器架构上运行,但是爱好者、Android 游戏玩家或软件开发人员可能希望在电脑上运行这种操作系统。这种情况可能会产生问题,因为电脑在完全不同的 x86 处理器架构上运行,而硬件虚拟化虚拟机管理程序只在虚拟机与 CPU 之间传递指令。它不会为使用不同指令集的处理器翻译这些指令。
Shaslik 或 Genymotion 等各种项目可通过使用在软件中重新创建 ARM 架构的模拟器来解决此问题。另一替代方案则是 Android-x86 项目,它可将 Android 移植到 x86 架构。要运行该项目,必须将 Android-x86 程序安装为使用 VirtualBox“2 类虚拟机监控程序”的虚拟机。还有一种替代方案 Anbox,它可在主机 Linux 操作系统的内核中运行 Android 操作系统。
Apple 规定,他们的 macOS 系统只能在 Apple 硬件上运行。这意味着在非 Apple 硬件上,您不能将 macOS 作为虚拟机运行或者根据 Apple 的最终用户许可协议运行。不过,您可以在 Mac 硬件上使用第 2 类虚拟机管理程序创建具有 macOS 客户机的虚拟机。
如今,要在虚拟机中运行 iOS 已不可能,这是因为 Apple 会严格控制其 iOS 操作系统,且仅允许其在 iOS 设备上运行。
最接近 iOS 虚拟机的是 Xcode 集成开发环境所附带的 iPhone 模拟器,它能以软件形式模拟整个 iPhone 系统。
Java 平台为用 Java 软件开发语言所编写程序的执行环境。Java 的承诺“编写一次,随处运行”意味着任意 Java 程序均可在任何 Java 平台上运行,而这便是 Java 平台包含 Java 虚拟机 (JVM) 的原因所在。
Java 程序包含字节码,字节码是一种用于 JVM 的指令。JVM 会将此字节码编译成机器码,机器码是主机使用的最低级别的语言。根据处理器所需的机器码,一个计算平台的 Java 平台中的 JVM 会创建一组与另一个计算平台中的 JVM 不同的机器码指令。
因此,JVM 不能运行整个操作系统,也不会像其他虚拟机那样使用虚拟机管理程序。相反,它会转换应用程序级软件程序,以便在特定的硬件上运行。
和 JVM 一样,Python 虚拟机既不在虚拟机管理程序上运行,也不包含客户机操作系统。此工具能够让以 Python 语言编写的程序在各种 CPU 上运行。
与 Java 类似,Python 也将它的程序转换成被称为字节码的中间格式,并将这些字节码存储在可以执行的文件中。当程序运行时,Python 虚拟机会将字节码转换成机器码,以便快速执行。
Linux 是在众多虚拟机中使用的一种典型来宾操作系统。同时,它也是用于运行虚拟机的典型主机操作系统;甚至,它还有自己的虚拟机监控程序,即“基于内核的虚拟机 (KVM)”。虽然它是一个开源项目,但 Red Hat 却拥有 KVM。
Ubuntu 是由 Canonical 制作的 Linux 发行版。它分为桌面版和服务器版,可作为虚拟机安装。用户可以在 Microsoft Hyper-V 上将 Ubuntu 作为客户机操作系统进行部署。它提供了 Ubuntu 桌面的优化版本,可以在 Hyper-V 的“增强会话模式”下正常运行,以便在 Windows 主机与 Ubuntu 虚拟机之间提供紧密集成。它提供的支持包括剪贴板集成、动态桌面大小调整、共享文件夹以及在主机和客户机桌面之间移动鼠标。
公共虚拟机或多租户虚拟机是指多个用户共享一个公共物理基础设施的那些虚拟机。这种模式是配置虚拟机的最经济高效、最具可扩展性的方法。不过,多租户环境缺乏一些具有严格安全性或合规性要求的组织可能更喜欢的隔离特征。
单租户虚拟机有两种模型:专用主机和专用实例。
即用即付模式对虚拟机而言没有前期成本,且用户只需为使用的内容付费。客户需按小时或秒数付费,具体则取决于提供商和实例类型。
成本最低的虚拟机模式是瞬态实例或竞价实例,这些实例会使用提供商的多余容量,但提供商可以随时回收这些容量。瞬态/竞价实例非常适合不需要始终保持启动状态的应用程序,或者在任何其他模式下都过于昂贵的应用程序。
与“即用即付“定价模式不同,预留实例具有明确的期限承诺,通常介于一到三年之间,但也可以享受大幅折扣。
用户通常需要支付物理服务器的总成本,并按照提供商提供的专用服务器的任何增量计费(通常按小时或按月计费)。
裸机服务器均涉及原始硬件、功能和隔离。它们属于单租户物理服务器,且完全没有虚拟机监控程序周期(虚拟化软件),同时完全专用于单个客户(也就是您自己)。
优先考虑性能和隔离性的工作负载(例如数据密集型应用程序和监管合规性要求)通常最适合使用裸机服务器,尤其是在持续部署的情况下。
企业资源计划 (ERP)、客户关系管理 (CRM)、供应链管理 (SCM)、电子商务和金融服务应用程序只是非常适合裸机服务器的几种工作负载。
相反,当您的工作负载需要最大限度的灵活性和可扩展性时,则最好在裸机硬件上安装虚拟机监控程序来实现一个虚拟机。虚拟机可提高服务器的容量和利用率。它们非常适合将数据从一个虚拟机迁移到另一个虚拟机、调整数据集大小和划分动态工作负载。
了解容器的最简单方法是掌握它与传统虚拟机 (VM) 的区别所在。在传统的虚拟化中,无论是在本地还是在云端,虚拟机监控程序都有助于虚拟化物理硬件。如此一来,每个虚拟机都包含一个客户操作系统、运行该操作系统所需的硬件的虚拟副本,以及一个应用程序及其相关的库和依赖项。
容器并非虚拟化底层硬件,而是虚拟化操作系统(通常为 Linux)。每个容器仅包含该应用程序及其库和依赖项。由于没有来宾操作系统,因此容器非常轻便、快速且可移植。
容器和管理容器的 Kubernetes(开源容器编排平台)已成为现代云原生和微服务架构的事实单元。虽然容器通常与无状态服务相关联,但组织也可将它们用于有状态服务。容器是混合云场景中的标准配置,因为它们可在公有云、私有云和传统的本地部署环境下一致地运行。今天,一个组织可能会在其私有云上运行应用程序,但明天,该组织便可能需要将应用程序部署到其他提供商的公有云中。将应用程序容器化可为团队提供处理现代 IT 的众多软件环境所需的灵活性。
值得注意的是,容器和虚拟机可以在企业中共存。例如,由于很多企业都有基于虚拟机的基础设施,因此在虚拟机中运行容器是一种非常常见的做法。
公司可以选择一个容器以运行应用程序,并由虚拟机提供底层基础设施。这种方法将容器的可移植性和高速度与虚拟机的安全性相结合。而在另一个场景中,一家金融机构可能会将虚拟机用于他们的数据库系统,以通过资源隔离确保更严格的安全性,并将容器用于前端应用程序,例如面向客户的移动应用程序。
博客文章“容器与虚拟机:有什么区别?”提供了详细说明。
如下视频详细介绍了容器化的基础知识以及它与虚拟机的比较:
选择虚拟机和云提供商时,首先会审视您的工作负载需求和预算要求,以及其他关键因素。选择虚拟机服务提供商时需考虑的 10 个事项如下。
IBM Cloud Virtual Server for VPC 是基于 IBM Cloud Virtual Private Cloud 构建的 Intel x86、IBM Z 和 IBM LinuxONE 虚拟服务器系列。
IBM Cloud 专用服务器提供可扩展的 Web 托管解决方案,具有无限的免费回程流量和广泛的自定义选项。
利用 IBM 的云咨询服务发掘新功能并提升业务敏捷性。了解如何通过混合云战略和专家合作共同制定解决方案、加快数字化转型并优化性能。