基本概念
虚拟化是云计算的核心技术,但不是其专用技术
本质:虚拟化的本质就是通过添加一个虚拟化层将原先的物理设备进行逻辑化,转换成一个文件夹或文件,实现软硬件的解耦。核心思想是利用软件或固件管理程序构成虚拟化层,把无力资源映射为虚拟资源。在虚拟资源上可以安装和部署多个虚拟机,实现多用户共享物理资源。
“虚拟化技术”的两种理解方式:抽象 vs. 拆分
虚拟化技术成就了云计算,硬件的快速发展成就了虚拟化
计算机系统的虚拟化
由位于下层的软件模块,通过向上一层软件模块提供一个与它原先所期待的运行环境完全一致的接口的方法,抽象出一个虚拟的软件或硬件接口,使得上层软件可以直接运行在虚拟的环境上。
一些概念:
- 宿主:被虚拟化的对象
- 宿主机:被虚拟化的对象设备
- 宿主机操作系统:被虚拟化的对象设备的操作系统
- 客户:在虚拟层上安装的对象
- 客户机:在虚拟层上安装的对象设备
- 客户机操作系统:在虚拟层上安装的操作系统
服务器虚拟化层级
代表产品
- VMware:技术 + 公司,1999年推出虚拟化产品;从虚拟化技术转向云产品
- VMware vSphere:安装在裸机的强大服务器,可以在其上同时运行多台虚拟机
- VMware Workstation:是在 Windows 或 Linux 操作系统上运行的应用程序,可以模拟 x86 标准PC环境。可以安装操作系统
- Xen:由剑桥大学开发的开源虚拟机监视器。需要对操作系统进行显式的修改才能运行
- KVM:Kernel-based Virtual Machine
- LXC:Linux Container
- Docker
硬件级虚拟化
添加一个称为虚拟化层的软件,管理客户操作系统,使其能够独立于主机操作系统同时运行在一个硬件上
- Hypervisor
- Virtual Machine Monitor(VMM,虚拟机监视器)
三个要求:
- 为程序提供与原始硬件及其基本一致的环境
- 运行在该虚拟硬件环境中的程序性能损失应该较低
- 系统资源应该处于 VMM 的完全控制之中
优势
- 封装性:
- 以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷
- 虚拟机快照(某个时间点的状态抓取下来并保存)
- 虚拟机克隆(从一个虚拟机的执行环境复制出一个或多个相同的虚拟机)
- 虚拟机挂起和恢复(暂停一个运行中的虚拟机,将其运行环境保存在磁盘上;将保存在磁盘上的虚拟机运行环境恢复到内存中)
- 使得保存、部署更加方便,从而使得软件开发、测试和调试更加便捷;降低IT管理和维护成本
- 以虚拟机为粒度的封装使得虚拟机运行环境的保存非常便捷
- 多实例:提高计算机性能利用率,降低计算机资源消耗
- 不同的服务器有不同的繁忙和空闲时段,将多个物理服务器合并到少数服务器上以虚拟机运行,使用更少的服务器获得同样的整体性能,通过虚拟机的忙闲交错大大提高资源利用率;节约物理资源、人力资源、软件资源成本。
- 隔离:虚拟机中的应用程序可以在自己的操作系统中独立地运行,不影响其他工作负载
- 提高安全性:适用于测试场景;适合作为安全软件公司的蜜罐
- 硬件无关性
- 屏蔽硬件差异,无缝跨硬件迁移;云计算环境中虚拟机迁移是非常重要的;【复现老旧硬件接口】
- 特权功能
- 在虚拟化层添加特权功能的优点:不能被客户机绕过、更容易实现
- 事件记录和回放——入侵检测、病毒检测等
虚拟化的硬件对象:CPU、内存、I/O设备(硬盘、网卡、鼠标、键盘等)
CPU 虚拟化
- 任意时刻一个物理 CPU 只能运行一个虚拟 CPU
- 每个客户操作系统可以使用一个或多个虚拟 CPU
- 各个操作系统之间虚拟 CPU 运行相互隔离,互不影响
- 调度:调度问题指 VMM 决定当前哪个虚拟 CPU 在物理 CPU 上运行,保证隔离、公平和性能。
- 执行:虚拟 CPU 正确运行时保证虚拟机指令正确运行,实现技术包括模拟执行和监控执行。
- 基于软件的完全虚拟化:解释执行、扫描与修补、二进制翻译。一切为 VMM 掌控,底层硬件与上层客户操作系统互不知晓。
- 基于硬件辅助的虚拟化:硬件中加入针对虚拟化的支持,使得系统软件更加高效的实现虚拟化功能。硬件参与到虚拟机的创建、调度、运行和退出中
- 改操作系统的类虚拟化:修改暴露给虚拟机的硬件抽象以及上层的操作系统,使得修改后的客户机操作系统与 VMM 配合实现虚拟化;修改后的操作系统能够意识到虚拟环境的存在。
类虚拟化的三大优势
- 通过消除冗余代码、减少地址空间切换和跨特权级切换、减少内存复制等,优化虚拟化的性能开销。
- 一定程度上消除了虚拟层和上层操作系统间的语义鸿沟;操作系统内部运行状态能够被 VMM 获得。
- 使得硬件抽象层的抽象高度更加灵活,为实现各种不同功能的硬件抽象探索出了可行的路径。
内存虚拟化
内存虚拟化技术把物理内存统一管理,包装成多个虚拟的物理内存提供给若干个虚拟机使用,每个虚拟机拥有各自独立的内存空间。
在没有虚拟化的操作系统中看到的内存:直接就是机器地址的物理内存
虚拟化后,VMM 要让客户操作系统看到“假的”物理空间,两件事:
- 维护客户机物理地址和宿主机器的机器地址之间的映射。
- 截获虚拟机对客户机物理地址的访问,并根据所记录的映射关系,转换成机器地址。
- 基于软件的完全虚拟化:
- 影子页表:一份影子页表和一份客户机操作系统的页表对应,用于直接将客户机操作系统虚拟地址翻译为宿主机物理地址。(建立、缺页处理)
- 基于硬件辅助的虚拟化:
- 扩展页表:Extended Page Table,在硬件上支持 GVA-GPA-HPA 的两次地址转换
- 改操作系统的类虚拟化:客户机操作系统直接使用 VMM 的机器地址到物理地址的翻译表更新页表映射
I/O虚拟化
操作系统级虚拟化
操作系统虚拟化可以看作是 “寄居虚拟化” 的一种
- 虽然没有 Hypervisor/VMM
- 但是需要主机操作系统,在主机操作系统中插入一个虚拟化层
- 在同一个操作系统内核内,运行多个虚拟机;虚拟机可以访问虚拟执行环境(Virtual Execution Environment)/ 虚拟专用系统(Virtual Private System)/ 容器(Container)
优点:
- 最小的启动/停止开销/资源需求低/可扩展性抢
- 可同步虚拟机与宿主操作系统环境状态的变化
- 允许虚拟机中进程访问尽可能多的主机资源
缺点
- 同一个容器中的操作系统级虚拟机必须使用相同的客户操作系统
- 资源隔离性较差
Docker
架构:
- 服务端(引擎),包括守护进程,接收和处理客户端请求、联系后端仓库、创建镜像、容器;
- 客户端,提交相关请求,如获取镜像、创建容器、运行容器等;
- 后端仓库,用来存储和管理相关资源,一些基本的镜像和库,有官方公共的仓库,也可以自行建立私有仓库。
不同层级虚拟化技术的对比
云数据中心的虚拟化
- 服务器虚拟化:将一个活多个物理服务器虚拟化成多个逻辑上的服务器。
- 存储虚拟化:把分布的异构存储设备统一为一个或几个大的存储池。
- 网络虚拟化:在底层物理网络和网络用户之间增加一个抽象层。
为什么要虚拟化?
- 一台物理设备一个用户 vs. 一台物理设备多个用户:提升资源共享与复用的效率,降低成本
- 固定大小与位置的存储空间vs. 灵活扩展和空间分布的空间:提升可扩展性,提升存储资源使用效率
- 为了实现服务器、存储虚拟化,要求网络也要能够方便、灵活地调整:随着虚拟机的迁移一起迁移
服务器虚拟化
虚拟机和容器共存,容器的地位不断提升,目前与虚拟机相当
高效率的unikernel技术
- unikernel是使用库操作系统(LibOS)构建的专用的、单一地址空间机器镜像。
- LibOS库操作系统:在应用程序层中实施访问控制和隔离,用户应用无需在用户模式和内核模式间切换,直接访问硬件;然而多个应用程序同时运行时隔离性不好。
- 可使用操作系统虚拟化(虚拟机监控器VMM)克服硬件资源隔离缺陷:LibOS通过VMM驱动物理硬件,像虚拟机一样运行
存储虚拟化
概念:存储虚拟化将系统中分散且异构的存储资源整合起来,形成一个统一的连续编址的逻辑存储空间。提高存储资源利用率 + 降低单位存储空间成本 + 降低存储管理的负担和复杂性
网络虚拟化
- 由于云计算技术的使用,云数据中心的业务集中度、服务的客户数量远远超过传统数据中心,对网络的高带宽、低拥塞的要求更高。
- 传统数据中心问题1:L2层网络拥塞、丢包严重,需要L3层协议保证重传,效率低;
- 传统数据中心问题2:二层以太网络采用生成树协议保证数据包在互连交换机回路传递,产生大量冗余。
- 云数据中心对网络的需求
- 提高数据传输效率:应对数据同步、备份、虚拟机迁移等的大流量
- 提高管理效率:采用统一的交换网络减少布线、维护和扩容的成本
- 核心层网络虚拟化
- 要求核心层网络具备超大规模的数据交换能力;
- 提供虚拟机箱技术,简化设备管理,提高资源利用率,提高交换系统的灵活性和扩展性,为资源的灵活调度和动态伸缩提供支撑。
- 接入层网络虚拟化
- 要求接入层交换机能够支持各种灵活的部署方式和新的以太网技术;
- 即要实现能够统一管理所有接入层交换机的虚拟化层,例如设置流量控制、协议更新等。
- 虚拟机网络虚拟化
- 虚拟机网络的交互包括物理网卡的虚拟化产物和虚拟网络交换机,都是在服务器内部虚拟出响应的网卡功能和交换机功能;
- 虚拟网卡:在一个物理网卡上虚拟出多个逻辑独立的网卡,使得每个虚拟网卡具有独立的MAC地址、IP地址;
- 虚拟交换机:使得主机内部如同存在一台交换机,为多个网卡提供互连,方便设置网卡连接的端口。
云环境中的虚拟机迁移
云计算关注的重点:实时迁移(Live Migration)
- 云计算环境中虚拟机迁移的需求
- 云计算中心物理服务器负载处于动态变化中,当无法提供额外物理资源而为了负载平衡,可将占用热门物理资源的虚拟机迁移到其他物理服务器
- 物理服务器定期升级的需要,升级前将虚拟机迁移到其他物理服务器,等升级完成再迁移回来
- 分类
- 物理机到虚拟机P2V
- 虚拟机到虚拟机V2V
- 虚拟机到物理机V2P
内存迁移 – 最困难的地方
迁移方案 | 具体描述 | 优势与劣势 |
---|---|---|
Stop-and-Copy | A 停机,将对应内存全部复制到 B 中,启动 B | 方法比较简单,总迁移时间也最短;停机时间无法接受 |
Stop-and-Copy 和 Pull 阶段相结合 | A 停机,将部分内存复制到 B,启动 B,B 运行中遇到缺失内存,再到 A 内存中复制 | 停机时间很短,总迁移时间很长;Pull 阶段复制造成的性能下降,用户体验差 |
Push 和 Stop-and-Copy 阶段相结合 | A 不停机,对外保持服务,将变化地内存迭代地复制到 B,直到最后剩余很少要复制的再停止 A,复制最后变动到 B,启动 B | 平衡了停机时间和总迁移时间之间的矛盾;需要有一种算法能够测定工作集,以避免反复重传;可能会占用大量的网络带宽,对其他服务造成影响 |
网络迁移
虚拟机所有网络设备,包括协议状态(如TCP连接状态)以及IP地址都要随之一起迁移;通过发送并修改相关配置实现
存储设备迁移
- 迁移数据存储需要占用大量时间和网络带宽,通常的解决办法是以共享的方式共享数据和文件系统,而非真正迁移
- 目前大多数集群使用NAS(Network Attached Storage,网络连接存储)作为存储设备共享数据
Reference
- 南京大学软件学院本科三年级课程《云计算》