- 计算虚拟化
主操作系统:运行在真实机器上
客户操作系统:运行在主操作系统之上
Hypervisor:管理和调度各个客户操作系统,为客户操作系统提供了一个硬件的接口层面
类型1:运行在真实机器上,例如VMWARE
类型2:运行在主操作系统上,例如MS Virtual PC
类型0:1和2兼有
服务器虚拟化:
指令集的翻译(二进制翻译、缓存)
I/O设备的仿真:让虚拟机操作系统访问不支持的硬件
保护处理器的数据结构:影子处理器
核心问题:内存的保护管理
半虚拟化:修改虚拟机操作系统,不能做的操作就不要做
影子页表:不用改动虚拟操作系统,Hypervisor会捕获异常的访问请求(中断),拒绝不被允许的操作
硬件支持的虚拟化:二级地址转换表
- 网络虚拟化
虚拟网络:“一个大交换机”上的二层网络(广播)
让一个大的、复杂的网络看起来像,每个用户自己用一个二层网络。
传统方式:
VLAN:区分广播域
端口分属不同VLAN(物理隔离)
多个VLAN共享一个端口(VLAN标签)、成本低但是数量有限:2^12
VXLAN
三层的隧道
IP组播
VTEPs负责打包和解包
传统网络:控制面与数据面集成在同一个设备中、不同网络设备之间通过协议决定如何转发
软件定义网络:控制面与数据面分开,控制面集中管理,放在服务器
例子:open flow
交换机不具有逻辑,问controller,形成缓存
基于软件定义网络实现的虚拟二层网络:Portland
二层网络广播实现,交换机要记住大量状态,根源在于MAC地址不连续(设备决定,跟网络位置无关)
网络截获所有ARP广播,把无序的MAC地址改成与物理位置相关的地址,转发数据包,改回原来的MAC地址
网路虚拟化对虚拟机的支持:虚拟交换机
VM-----tag-----虚拟交换机-----物理网口
- 存储虚拟化
独立于数据位置、独立于物理存储技术
块接口:
磁盘阵列,看起来像一块磁盘
文件接口:
文件系统
对象存储接口:
基于HTTP协议
扁平命名空间(key)
分布式存储实现方式:
SAN:存储服务器通过专用网络连接
NAS:存储服务器通过通用网络连接
In-land:虚拟化设备
Out-land:根命名空间
- 虚拟化总结
优势:
统一抽象的接口,隐藏了复杂的硬件结构
灵活、可以软件定义
易于管理、更容易保证安全
问题:
虚拟化有一定的资源开销
通常没有实现性能的隔离
过多层的抽象
发展趋势:软件定义数据中心
网络功能的虚拟化:防火墙
还有什么可以虚拟化:供电、散热…
虚拟化与云计算之间还差:资源的管理与调度
- 一个虚拟机的生命周期
用户通过界面或命令行向API发送“create instance”到消息队列
API节点记录最新虚拟机信息,发送调度请求给调度器
调度器找到可用的计算节点,向计算节点发送“vm provision”请求
计算节点通过虚拟机hypervisor启动虚拟机,去镜像存储服务获取虚拟机磁盘镜像
计算节点向网络节点发信息,请求给新创虚拟机分配网络资源
网络节点通过配置虚拟交换机、VLAN等,实现虚拟网络,并在数据库中记录网络信息
计算节点向虚拟存储服务要求新建虚拟磁盘卷,并通过iSCSI协议挂载
用户通过界面查询虚拟机创建的结果
- 云计算总结
性能:并行化
经济性:规模化、公有云
可管理:虚拟化
虚拟化提供了硬件资源的抽象;
云计算为大数据提供了硬件、系统软件的基础;
用户看到的接口:虚拟的计算,虚拟的网络,虚拟的存储
但是,虚拟化不意味着统一化,用户创建的多个虚拟机之间依旧是相互独立的,要让多个虚拟机一起处理一个数据
一是分布式编程(麻烦、易错);
二是更高层次的架构抽象,生成一个抽象的单一系统----分布式存储、计算框架(让用户看起来就像在用一台计算机进行编程)
总而言之:一个好的云计算系统,要让用户彻底忘记底层的硬件,看到的是一个好的虚拟化的接口,用户需要多少资源,就请求多少资源