什么是虚拟机?

虚拟机 (VM) 是使用称为虚拟化的过程在其他计算机内部运行的计算机。

Share facebook icon linkedin icon twitter icon email icon

虚拟机

学习目标

阅读本文后,您将能够:

  • 定义虚拟机
  • 了解虚拟化和虚拟硬件的工作原理
  • 概述虚拟机的几个用例

什么是虚拟机?

虚拟机 (VM) 是存在于另一台计算机的操作系统中的基于软件的计算机,通常用于测试、备份数据或运行 SaaS 应用程序。要完全掌握 VM 的工作方式,首先必须要了解操作系统通常如何集成计算机软件和硬件。

什么是操作系统?

传统计算机是由实体硬件(包括硬盘驱动器、处理器芯片,RAM 等)构成的。计算机依赖一种称为操作系统 (OS) 的软件利用这些硬件。Mac OSX、Microsoft Windows、Linux 和 Android 是 OS 的一些常见示例。

操作系统按照用户的使用目的管理计算机的硬件。例如,如果用户要访问 Internet,则 OS 指示网络接口卡进行连接。如果用户要下载文件,则操作系统将在硬盘驱动器上对空间进行分区。操作系统还运行和管理其他软件。例如,它可以运行 Web 浏览器,并为浏览器提供足够的随机访问内存 (RAM),以使其平稳运行。通常,操作系统以一比一的比例存在于物理计算机中。每台计算机都有一个操作系统来管理其硬件资源。

一台计算机上可以有两个或多个操作系统吗?

一些用户希望能够在一台计算机上运行多个操作系统,以进行测试或用于下文列出的其他原因之一。这可以通过称为虚拟化的过程来实现。在虚拟化中,一个软件就像一台独立的计算机一样运转。该软件称为虚拟机,也称为“访客”计算机。(运行 VM 的计算机称为“主机”。)访客具有操作系统以及自己的虚拟硬件。

“虚拟硬件”听起来有点自相矛盾,但它是通过映射到主机上的真实硬件来工作。例如,VM 的“硬盘驱动器”实际上只是主机计算机硬盘驱动器上的文件。当 VM 要保存新文件时,它必须与主机 OS 通信,然后主机 OS 会将文件写入主机硬盘驱动器。由于虚拟硬件必须执行与主机协商的这个附加步骤才能访问硬件资源,因此虚拟机的运行速度无法达到与主机一样快。

使用虚拟化,一台计算机可以运行两个或多个操作系统。一台主机上可以运行的 VM 数量仅受主机的可用资源限制。用户可以像运行其他程序中一样在窗口中运行 VM 的操作系统,也可以在全屏模式下运行 VM,以使其观感都如同真正的主机 OS。

虚拟机用于什么目的?

人们运行虚拟机的一些最常见的原因包括:

  • 测试 - 软件开发人员通常希望能够在不同的环境中测试应用程序。通过使用虚拟机,他们可以在一台计算机上的各种操作系统中运行应用程序。与必须在多台计算机上进行测试相比,这更简单且更具成本效益。
  • 运行为其他 OS 设计的软件 - 尽管某些软件应用程序仅可用于单个平台,但 VM 可以运行为其他 OS 设计的软件。例如,想要运行专为 Windows 设计的软件的 Mac 用户可以在 Mac 主机上运行 Windows VM。
  • 运行过时的软件 - 某些较旧的软件无法在新版 OS 中运行。想要运行这些应用程序的用户可以在虚拟机上运行旧版的操作系统。

云计算如何使用虚拟机?

一些云提供商向客户提供虚拟机。这些虚拟机通常位于功能强大的服务器上,服务器可以充当多个 VM 的主机,并且可以出于多种原因使用 - 这对于本地托管的 VM 是不可行的。其中包括:

  • 运行 SaaS 应用程序 - 软件即服务 (SaaS) 是一种基于云端向用户提供软件的方法。SaaS 用户订阅应用程序,而不是购买并安装。这些应用程序通常通过 Internet 提供给用户。通常情况下,端的虚拟机为 SaaS 应用程序进行计算并将它们提供给用户。如果云提供商具有地理分散的网络边缘,则应用程序可以更接近用户,进而提高性能。
  • 备份数据 - 基于云的 VM 服务经常被用于备份数据,因为之后可以从任何地方访问数据。另外,与虚拟数据中心相比,云虚拟机可提供更好的冗余性,需要更少的维护,并具有更好的可扩展性。(例如,从云虚拟机提供商那里购买额外的千兆字节存储空间通常相当容易,但是为同样多的数据构建新的本地数据服务器则要困难得多。)
  • 托管服务,例如电子邮件和访问权限管理 - 在云端 VM 上托管这些服务通常更快、更具成本效益,并且有助于最大程度地减少维护和负载分担安全问题。

Cloudflare 和虚拟机

Cloudflare 帮助保护和管理各种类型的云部署,包括云 VM。此外,对于希望在边缘上运行代码而不付出虚拟机开销的用户,我们有 Cloudflare Workers - 这是一个无服务器平台,可以以完全可扩展的方式为客户提供边缘计算,开发人员可以借此扩展现有应用程序或创建全新的应用程序,而无需配置或维护基础设施。