边缘计算是云计算的一种补充,它通过将云的计算能力下沉至边缘节点来缓解云计算中心的计算负载和网络压力。每个边缘节点通常由众多异构服务器集群组成,可以将其看作一个小型云计算中心,用户能够将自己的任务请求就近发送到边缘服务器上进行处理。由于用户提出的任务请求存在着高度的异构性,这要求边缘服务器能够灵活运行各种计算服务。为了能够实现跨设备、跨层次的使用,屏蔽软硬件环境的差异,提高服务效率,虚拟化技术被提出。
虚拟化技术是一种资源管理技术,是能够将计算机的各种计算资源(如CPU、内存、磁盘空间等)抽象后转化为多种配置环境。虚拟化技术起源于20世纪60年代末,美国IBM公司开发了一套虚拟机监视器(Virtual Machine Monitor, VMM)系统软件,该软件作为计算机硬件层上的软件抽象层,将计算机硬件虚拟地分割为一个或多个虚拟机,并提供多用户对大型计算机同时、交互访问。
通常,计算机系统自下而上被分成五个抽象层,分别为硬件抽象层、指令集抽象层、操作系统抽象层、库函数抽象层和应用程序抽象层。虚拟化技术本质上是为上层架构或应用分配底层资源,而上层架构只需要知道下层抽象的接口,不需要了解其内部运作机制。这样所带来的好处是每个层次只需要考虑本层的设计和与相邻层次之间的接口,从而大大降低了系统设计的复杂度,提高了软件的可移植性。按照抽象程度的不同,可以将虚拟化技术分为五个层次,分别为:
❑硬件抽象级虚拟化:在虚拟化过程中,通常将真实存在的物理主机称为宿主机(host machine),而将虚拟机称为客户机(guest machine)。硬件抽象级虚拟化通过虚拟机监视器将宿主机的处理器、内存、I/O、硬盘等硬件资源映射为客户机所能识别的资源,并为客户机提供统一抽象的资源访问接口,使得底层硬件对于宿主机和客户机操作系统而言相对透明。经典的硬件抽象级虚拟化技术包括VMware、KVM、Xen等。
❑指令集架构级虚拟化:是通过中间件来模拟目标指令集架构的处理器、存储器、总线、磁盘控制器、计时器等,中间件将客户机所发出的指令转换为宿主机可操作的指令序列,并在宿主机的物理硬件资源上执行这些指令。基于指令集架构级虚拟化技术包括Bochs、QEMU等,由于这些技术基本用于实现不同平台指令集之间的指令仿真,因此也被称为仿真器。
❑操作系统级虚拟化:是指宿主机的操作系统内核允许多个相互隔离的用户实例共同存在,这些相互隔离的用户实例通常被称为容器。由于这是宿主机操作系统内核主动提供的虚拟化,因此效率较高。但同时要求每个容器中的操作系统也必须与宿主机操作系统相同,所以灵活度相对较小。常见的几种操作系统级虚拟化技术包括Docker、OpenVZ、LXC、chroot等。
❑编程语言级虚拟化:计算机中的应用程序代码通常会被转换为当前计算机所能识别的机器语言。编程语言级虚拟化会先将高级语言编译为字节码,然后再通过虚拟机将其转译为目标平台所能识别的机器指令序列,能够实现跨操作系统平台、跨语言执行。这类虚拟化的典型技术有Java虚拟机(Java Virtual Machine, JVM)和通用语言基础架构(Common Language Infrastructure, CLI)等。
❑库函数级虚拟化:为了方便用户和开发者的使用,操作系统通常会向外提供访问操作系统基本功能的接口。然而,不同操作系统的接口也各不相同,例如,Linux系统与Windows系统的接口就大不相同,导致在Linux上能正确运行的代码到Windows环境中报错。因此,库函数级虚拟化通过虚拟化操作系统的库函数接口,从而使应用程序不需要修改就能够在不同的操作系统中直接运行,极大提升了应用程序的兼容性和可移植性。典型的库函数级虚拟化包括Wine和WSL等。
虚拟化技术在边缘计算应用中至关重要,它能够将各种实体资源,如网络、计算、存储资源等,进行重新整合与隔离,将一个硬件设备转化为多个相互独立的虚拟逻辑设备,再按需提供给对应的用户,从而实现计算资源和计算服务的灵活管理,大大提升了网络资源利用率和用户服务的响应效率。此外,虚拟化技术可以实现对所有服务器进行统一管理,由此减少服务器的加载时间,有效降低了软件和硬件的成本消耗。