三、虚拟化技术

3.1 虚拟化技术概述

●虚拟化是一种方法,本质上讲是指从逻辑角度而不是物理角度来对资源进行配置,是从单一的逻辑角度来看待不同的物理资源的方法。
●虚拟化把有限的固定资源根据不同需求进行重新规划以达到最大利用率。

(1)虚拟化与云计算之间的关系:
一句话总结:云计算必定是虚拟化的,虚拟化给云计算提供了坚定的基础。但是虚拟化的用处并不仅限于云计算,这只是它强大功能中的一部分。可以说云计算是虚拟化的最高境界,虚拟化是云计算的底层结构

(2)四大特征
分区:单一服务器上运行多个虚拟机
隔离:同一个服务器上的虚拟机之间相互隔离
封装:虚拟机以文件形式保持
硬件独立:无需修改即可在任何服务器上运行虚拟机

(3)虚拟化的技术优点
●更高的资源利用率
更高的可用性
●降低管理成本
●更高的可扩展性
●提高使用灵活性
●互操作性和投资保护
●提高安全性
●改进资源供应

3.2 虚拟化关键技术

3.2.1服务器虚拟化

(1)分类
寄居虚拟化: ●虚拟机监视器是运行在宿主操作系统之上的应用程序,利用宿主操作系统的功能来实现硬件资源的抽象和虚拟机的管理。(VMware Workstation)

裸机虚拟化:
虚拟化平台直接运行在硬件之上提供指令集和设备接口,以提供对虚拟机的支持。
●Hypervisor实现从虚拟资源到物理资源的映射;它实现了不同虚拟机的运行上下文保护与切换,保证了各个客户虚拟系统的有效隔离(Xen、KVM)

寄居虚拟化实现起来容易但是性能较低,裸机虚拟化不依赖主机操作系统,性能较高。

(2)服务器虚拟化的方法
全虚拟化:
●通过Hypervisor (虚拟机管理程序)来分享底层硬件,客户操
作系统无需意识到在虚拟环境运行,受保护的指令由Hypervisor来捕获和处理。这种情况下虚拟机不知道自己是虚拟机(VMvare)

半虚拟化:
●使用Hypervisor (虚拟机管理程序)分享底层的硬件,但客户操作系统集成了虚拟化方面的代码由于操作系统自身能够与虚拟进程进行很好的协作,无需Hypervisor捕获和处理特殊指令

操作系统级虚拟化
●内核与Hypervisor (虚拟机管理程序)集成,操作系统上层与
内核共同组成完整操作系统。

解读服务器虚拟化的误区:
虚拟化技术可以实现多台物理服务器资源的整合,但是不能实现单个应用通过虚拟化而运行在多态物理硬件上
当服务器维修时,可以将虚拟机迁移到其他服务器上,来保障物理服务器和虚拟机的安全性和可靠性

(3)服务器虚拟化的核心技术

cpu虚拟化
●CPU虚拟化是指将单个物理CPU虚拟成多个虚拟CPU供虚拟
机使用,由VMM为虚拟CPU分配时间片,并同时对虚拟CPU的
状态进行管理。在x86体系CPU指令集中,CPU有4个特权级(ring0- ring3)
●CPU硬件辅助虚拟化在Ring模式的基础上引入了一种新的模
式,叫VMX模式。它包括根操ROOT作模式(VMX Root Operation
)和非根操作模式(VMX Non-Root Operation)。

内存虚拟化
●内存虚拟化技术把物理机的真实物理内存统一管理,包装成多个虚拟的物理内存分别供若干个虚拟机使用,使得每个虚拟机拥有各自独立的内存空间。

设备i/o虚拟化
●除了处理器和内存外,服务器其他需要虚拟化的关键部件还包括设备与I/O。
●设备与I/O虚拟化技术把物理机的真实设备统一管理,包装成多个虚拟设备给若干个虚拟机使用,响应每个虚拟机的设备访问请求和I/O请求。

3.2.2 存储虚拟化

●对硬件存储资源进行抽象化,通过对存储系统或存储服务内部的功能进行隐藏、隔离及抽象,使存储与网络、应用等管理分离,存储资源得以合并,从而提升资源利用率。
功能:
在虚拟层通过使用数据镜像、数据校验和多路径等技术,利用负载均衡、数据迁移、数据块重组等技术,整合和重组底层物理资源,将系统中分散的存储资源整合起来。
实现方式:
在这里插入图片描述

3.2.3 网络虚拟化

VLAN
虚拟局域网(VLAN)是一组逻辑上的设备和用户,这些设备和用户并不受物理位置的限制,可以根据功能、部门及应用等因素将它们组织起来,相互之间的通信就好像它们在同一个网段中

  • -样,由此得名虚拟局域网。
    VPN
    ●VPN属于远程访问技术,简单地说就是利用公用网络架设专用网络。例如某公司员工出差到外地,他想访问企业内网的服务器资源,这种访问就属于远程访问。
    ●NAT,全称为网络地址转换(Network AddressTranslation) ,是为了解决IPv4地址短缺而出现的技术。

3.2.4 桌面虚拟化

桌面虚拟化
●桌面虚拟化是在物理服务器上安装虚拟主机系统,由虚拟主机系统模拟出操作系统运行所需要的硬件资源,如:CPU、内存、网卡、存储等。可以通过任何设备,在任何地点,任何时间访问在网络上的属于我们个人的桌面系统。

3.3 虚拟机迁移技术

虚拟机迁移是将虚拟机实例从源宿主机迁移到目标宿主机,并且在目标宿主,机上能够将虚拟机运行状态恢复到其在迁移之前相同的状态,以便能够继续完成应用程序的任务。

云计算中心的物理服务器负载经常处于动态变化中,当- -台物理服务器负载过大时,若此刻不可能提供额外的物理服务器,管理员可以将其上面的虚拟机迁移到其他服务器,达到负载平衡。

云计算中心的物理服务器有时候需要定期进行升级维护,当升级维护服务器时,管理员可以将其上面的虚拟机迁移到其他服务器,等升级维护完成之后,再把虚拟机迁移回来。

3.4 相关资源与思考题

●虚拟化技术的特点有哪些?
●虚拟化技术有哪些关键技术?

四、容器技术

4.1 容器技术概述

新型虚拟化技术:容器
●容器可以把开发环境及应用整个打包带走,打包好的容器可以在任何的环境下运行,这样就可以解决开发与线上环境不一致的问题了。

定义:
开源的应用容器引擎,让开发者可以打包他们的应用以及应用的依赖包,然后放到一一个可移植的容器中,然后发布到任意的机器.上以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

优势:
持续继承:
在开发与发布的生命周期中,不同的环境具有细微的不同,这些差异可能是由于不同安装包的版本和依赖关系引起的。然而,Docker可以通过确保从开发到产品发布整个过程环境的一致性来解决这个问题

版本控制:
设想如果你因为完成了-个组件的升级而导致你整个环境都损坏了,Docker可以让你轻松地回滚到这个镜像的前一个版本。这整个过程可以在几分钟内完成

可移植性:
Docker最大的好处之一就是可移植性。 在过去的几年里,所有主流的云计算提供商,包括亚马逊AWS和谷歌的GCP,都将Docker融入到他们的平台并增加了各自的支持。

安全性、隔离性:
Docker确保运行在容器中的应用程序和其他容器中的应用程序是完全分隔与隔离的,Docker还能确保每个应用程序只使用分配给它的资源(包括CPU、内存和磁盘空间)

4.2 Docker核心技术

容器:执行
镜像:构建
仓库:分发
client:用户输入的命令行
Docker_host1:直观的本地服务器的操作
Registry:镜像仓库,保存用户所需要的镜像文件

用户命令:
Docker pull:将远端仓库的镜像下载到服务器
Docker run: 将下载的镜像运行起来,运行容器。类似于本地安装操作系统。一个镜像可以启动多个容器。
Docker build:
在本地创建镜像,可以创建一个已经安装好所有软件后的镜像,这样用这个镜像启动容器就节省了很多重复的步骤
Docker push: 将镜像放到仓库中

(1)镜像

●类似虚拟机的镜像,用来创建Docker的容器,镜像是一个只读模板。
●一个镜像可以包含一个完整的(ubuntu)操作系统环境里面, 仅安装了apache/Mysql或用户需要的其它应用程序。
➢父镜像:
●每一个镜像都可能依赖于由一一个或多个下层的组成的
另一个镜像。下层那个镜像是上层镜像的父镜像。
➢基础镜像:
●一个没有任何父镜像的镜像,谓之基础镜像。
➢镜像ID:
●所有镜像都是通过一个64位十六进制字符串 (内部
是一个256 bit的值)来标识的。
➢Metadata(元数据):
镜像层中包含的关于这个层的额外信息。
●能够让Docker获取运行和构建时的信息。
●父层的层次信息。

(2)容器

●等同于从模板中创建虚拟机。
●容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
●可以把容器看做是-一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程。

(3)仓库

●仓库(Repository) 是集中存放镜像文件的场所,类似代码仓库。
●仓库分为公开仓库(Public) 和私有仓库(Private) 两种形式。
●最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。
●仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。
●push镜像到仓库,从仓库pull下镜像。

(4)Cgroup
●Control Groups (cgroups) :cgroups 实现了对资源的配额和度量计算机资源
使用上的隔离,通常我们叫做使用限额。
➢Resource limitation:限制资源使用,比如内存使用上限以及文件系统的缓存限制。
➢Prioritization: 优先级控制,比如: CPU利用和磁盘I0吞吐。
➢Accounting: - -些审计或一些统计,主要目的是为了计费。
➢Control: 挂起进程,恢复执行进程。

(5)卷
Union File System
●指容器中只读层及在顶部的读写层的组合。
●容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制-份到读写层。
●删除Docker容器,并通过该镜像重新启动
时,之前对该文件的更改将会丢失。

(6)Volume
(7)网络
bridge桥接模式
host模式
Container模式
None模式
(8)跨主机网络
Weave
Overlay
OpenvSwitch

4.3 Docker应用场景

1、简化配置:将运行环境和配置放在代码中,再部署。
同一个docker配置可以在不同环境中使用
2、代码流水线管理
3、整合服务器:正如虚拟机可以整合多个应用一样
可以整个多个服务器降低成本,由于没有多个操作系统的内存占用,并且能在多个实例之间共享没有使用的内存,比虚拟机提供更好的服务器整合方案。
4、调试能力:docker提供很多功能,包括设置检查点,可以帮助调试burg
5、多租户环境:为多个实例创建隔离条件
6、提供开发效率:在使用虚拟机的时候经常要为开发环境的机器加内存,而docker可以轻松的让很多服务同时跑起来
7、隔离应用
8、快速部署:docker仅仅需要为进程创建一个容器,而无需重新启动一个操作系统,将速度提升到了秒级。

4.4 相关资源及思考题

●容器技术的三大核心技术分别是什么?三者之间是如何配合
工作的?
●容器技术应用场景有哪些? (八大应用)

5、云仿真平台

5.1 仿真平台背景

(1)什么是仿真?
仿真(又称“模拟”)是利用模型复现实际系统中发生
的本质过程,并通过对系统模型的实验来研究存在的或设计
中的系统。仿真的重要工具是计算机。仿真与数值计算、求解方法
的区别在于它首先是-一种实验技术。仿真的过程包括建立仿
真模型和进行仿真实验两个主要步骤。

(2)仿真三要素
仿真三要素为:系统、模型和计算机
(1)系统:研究的对象
(2)模型:系统的抽象
(3)计算机:工具与手段

(3)仿真的内容
物性数据库
单元操作模型库
模型求解算法库
仿真环境及其输入输出

(4)仿真的分类
仿真可以按不同原则分类:
1.按所用模型的类型可以分为物理仿真、计算机仿真、半实物仿真。
2.按所用计算机的类型可以分为模拟仿真、数字仿真和混合仿真。
3.按仿真对象中的信号流可以分为连续系统仿真和离散系统仿真。
仿真可以按不同原则分类:
4.按仿真时间与实际时间的比例关系分为实时仿真、超实时仿真和亚实时仿真。
5.按对象的性质分为宇宙飞船仿真、化工系统仿真、经济系统仿真等。

(5)matlab仿真的数学工具
Matlab系统结构:
程序接口
MATLAB应用程序接口(API) 是一个使MATLAB语言能与
C、Fortran等其它高级编程语言进行交互的函数库。
该函数库的函数通过调用动态链接库(DLL)实现与
MATLAB文件的数据交换,其主要功能包括在MATLAB中调
用C和Fortran程序,以及在MATLAB与其它应用程序间建立
客户、服务器关系。

(7)NS2

5.2 云仿真平台实例

云计算:资源池,按需所取,灵活运用

(1)云仿真平台的实际意义

云仿真平台的实际意义
了解云平台中各组件运行情况
优化软硬件结构
调整资源分配策略以及战略部署
为没有硬件条件的研究人员提供研究手段

(2)仿真平台实例

<1> CloudSim介绍:
CloudSim继承了GridSim的编程模型,支持云计算的研究和开发,并提供了以下新的特点:
(1) 支持大型云计算的基础设施的建模与仿真;
(2) 一个自足的支持数据中心、服务代理人、调度和分配策略的平台。
➢CloudSim是在GridSim模型基础_上发展而来,提供了云计
算的特性,支持云计算的资源管理和调度模拟。
➢云计算与网格计算的一个显著区别是云计算采用了成熟
的虚拟化技术,将数据中心的资源虚拟化为资源池,打
包对外向用户提供服务。
➢CloudSim体现了此特点,扩展部分实现了一系列接口,
提供基于数据中心的虚拟化技术、虚拟化云的建模和仿
真功能。
CloudSim提供了资源的监测、主机到虚拟机的映射功
能。CloudSim 的CIS ( Cloud Information Service )和
DataCenterBroker实现资源发现和信息交互,是模拟调度
的核心。用户自行开发的调度算法可在DataCenterBroker的方法中实现,从而实现调度算法的模拟。

CloudSim核心类介绍:
(1) Cloudlet类: 构建云环境下的任务。
(2) DataCenter类: 数据中心,提供虚拟化的网格资
源,处理虚拟机信息的查询,包含虚拟机对资源的分配策
略,云计算采用VMProvisioner处理虚拟机。
(3) DataCenterBroker类: 隐藏了虚拟机的管理,如创建、任务提交、虚拟机的销毁等。
(4) Host类:扩展了机器对虚拟机除处理单元(PE)之外的
参数分配策略,如带宽、存储空间、内存等,- -台Host可对
应多台虚拟机。
(5) VirtualMachine类: 虚拟机类,运行在Host上,与其
它虚拟机共享资源,每台虚拟机由一个拥有者所有,可提交
任务,并由VMScheduler类定制该虚拟机的调度策略。
(6) VMScheduler类:虚拟机的调度策略,用来管理执行
任务,实现了任务接口。
(7) VMCharacteristics类: 提供虚拟机描述。
(8) VMMAllocationPolicy类: 虚拟机监视器策略类,描
述同一Host上的多台虚拟机共享资源的策略。
(9) VMProvisioner类: 实现数据中心的主机到虚拟机的映射。

<2> GreenCloud介绍
Greencloud是用于能源感知型云计算数据中心的复杂数据包级模拟器,其重点是云通信。它提供了数据中心T设备(例如计算服务器,网络交换机和通信链路)所消耗能量的详细细粒度建模。GreenCloud可用于开发监视,资源分配,工作负载调度以及通信协议和网络基础结构优化的新颖解决方案。它是根据《通用公共许可协议》发行的,并且是著名的NS2网络模拟器的扩展。

GreenCloud主要特征
(1)专注于云网络和能源意识
(2)模拟CPU,内存,存储和网络资源
(3)每种资源的独立能源模型
(4)支持虚拟化和VM迁移
(5)网络感知资源分配
(6)完整的TCP / IP实施
(7)用户友好的GUI
(8)开源的

<3> CloudSimSEC介绍
为了对大规模云数据中心的能耗使用情况进行优化,本实验室基于云仿真软件CloudSim,提出了一-种大规模云数据中心智能化节能模拟平台–CloudSimSEC。

5.3 云仿真平台应用

第一步:初始化CloudSim类CloudSim类是云仿真软件CloudSim的核心类,位于org. cloudbus.cloudsim.core包中。在使用CloudSim中所有的实体之前,必须先对CloudSim类进行初始化。

第二步:创建数据中心
创建数据中心需要使用Datacenter类,该类在org.cloudbus.cloudsim包中,继承了SimEntity类。 数据中心是CloudSim中的资源提供者,使用该类相当于模拟出了云数据中心框架,我们之后只需要创建实体往框架里面填写即可。

第三步:创建代理
代理指的是代理模式,意味着我们不需要深入CloudSim的底层细节,只要需用通过代理即可对CloudSim进行操作。代理类DatacenterBroker位于org.cloudbus.cloudsim包中,继承了SimEntity类。

第四步:创建虚拟机列表
虚拟机是云计算的核心元素,也是任务执行的实际载体。CloudSim中代表虚拟的是Vm类,该类位于包org.cloudbus.cloudsim。

第五步:创建虚拟机,并加入虚拟机列表
代码: int vmid= 0; //虚拟机的Id
int mips = 1000; //虚拟机的MIPS (计算能力)
long size = 10000; //磁盘容量(MB)
int ram= 512; //内存容量(MB)
long bw= 1000;//带宽
int pesNumber= 1; // CPU数量

String vmm =“Xen";//虚拟机监视器名称

代码:
Vm vm = new Vm…);
vmlist.add(vm);

第六步:将虚拟机列表传输给代理broker
此步的 目的是将虚拟机列表的管理权交给代理broker,
此后代理broker将会代替我们对虚拟机列表进行调用。
代码:
broker.submitVmList(vmlist);

第六步:创建云任务
代码:
intid=0;//云任务ID
long length = 400000; //云任务长度
long fileSize = 300; //云任务输入的文件夹个数
long outputSize = 300; //云任务输出的文件夹个数
UtilizationModel uModel = new UtilizationModelFull();
//系统能耗计算模型
代码:
Cloudlet cloudlet = new Cloudlet…); //建立云任务
cloudlet.setUserld(brokerld); //设置代理broker
cloudlet.setVmld(vmid); //设置虚拟机vm

第七步:将云任务添加到云任务列表,并提交给代理broker
代码: cloudletList.add(cloudlet);
broker.submitCloudletList(cloudletList);

第八步:开始模拟
代码: CloudSim.startSimulation();
CloudSim.stopSimulation();
broker.submitCloudletList(cloudletList);

第九步:打印结果
代码:
List res = broker.getCloudletReceivedList();
printCloudletList(res);

5.4 资源:
CloudSim GitHub地址: https://github.com/Cloudslab/cloudsim
GreenCloud官方网站: https://greencloud.gforge.uni.lu/
OpenStack官方网站: https://docs.openstack.org/train/
DevStack官方网站: devstack.org/

5.5 思考:

思考题1:什么是仿真,仿真的价值有哪些?
思考题2:常见的云仿真平台分别适合在什么样的情景下进行云仿真?
三种常见云仿真平台
思考题3: CloudSim中如果要多数据中心进行任务交互,那能耗模型需要怎样改进?
思考题:云仿真平台的局限性:
1、需要投入较多的人力资源,即使如此也不能保证仿真结果。
2、对计算资源利用率较低和能耗大导致成本高。
3、运行时不支持重启仿真和创建新的模拟实体。
4、多线程使用过于复杂,难以操作,不利于上手。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐