谈谈我对云计算的认识之基本概念(二)
来源:互联网 发布:windows 高精度sleep 编辑:程序博客网 时间:2024/04/26 20:59
上一篇介绍了云计算基本概念,本篇继续介绍一个云计算中非常重要的概念:虚拟化。
虚拟化定义
虚拟化这个词并不像云计算那个难以令人捉摸,虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。一般所指的虚拟化资源包括计算能力和数据存储。其虚拟化层次如下图:
最底层的虚拟化是硬件支持的虚拟化,Intel虚拟化技术(VT-x)和AMD的AMD-V,上有操作系统级别的虚拟化如KVM、ESXI等,最上层的还有应用虚拟化,大家所熟知的JVM,Java的一次编译处处运行的特性就是依赖JVM。
虚拟化分类
虚拟化可以按照虚拟化程度分为:全虚拟化、半虚拟化、硬件辅助虚拟化。全虚拟化的就是全部由软件模拟,操作系统不需要任何修改,如我们经常在自己电脑上面安装的VMware workstations以及Oracle Virtualbox,我们可以通过标准的ISO镜像安装操作系统,不需要定制操作系统;半虚拟化和全虚拟化最大的区别在于要修改操作系统,让客户机操作系统知道自己运行在虚拟化环境,这样部分指令可以透过操作系统,提供效率,最著名就是Xen;当前数据中心最常用的是硬件辅助虚拟化,宿主机的hypervisor运行在特权级别,关于指令如果陷入等详细内容以后再细谈,当前常见的硬件辅助虚拟化主要是:VMware的ESXi、KVM以及微软的Hyper-v。商业化最成熟也是最稳定的当属ESXI,开源最热门的当属KVM,openstack+KVM黄金搭档。
从虚拟化的内容分类可以分为:计算虚拟化、存储虚拟化、网络虚拟化。下面我就针对这些虚拟化类型逐一讲解:
计算虚拟化
我认为计算虚拟化狭义的理解为CPU和内存虚拟化,CPU虚拟化就是在把物理CPU抽象成虚拟CPU供Guest OS使用,任意时刻一个物理CPU上只能运行一个虚拟CPU,虚拟CPU本质上就是一个进程。在x86体系结构中CPU一般有4个等级:Ring0、Ring1、Ring2、Ring3,Ring0级别具有最高的权限,可以执行任何指令,从Ring0->Ring3依次递减,操作系统内核运行在Ring0而用户的应用程序运行在Ring3。内存虚拟化,就是通过VMM(hypervisor)管理物理机上内存,并按照每个虚拟机对内存的需求划分机器内存,同时保证各个虚拟机内存相互隔离。在内存虚拟化中,需要维护逻辑内存(guest os)与机器内存之间的映射关系。其基本原理:GVA(客户机操作系统虚拟内存)->GPA(客户机物理内存地址)->HPA(宿主机物理内存地址)当然这些转换通可以通过硬件加速或者影子列表法加速。虚拟内存管理常用三种技术:内存气泡、内存零页共享、内存交换技术。我把现在流行的Docker页纳入计算虚拟化中。
存储虚拟化
存储虚拟化分为两个阶段,第一阶段是以数据中心SAN存储和NAS存储为代表的集中存储。
第二个阶段是软件定义的存储,如亚马逊的S3,开源的分布式对象存储系统,以ceph为代表。分布式存储可以搭建在普通x86服务器集群之上,主要依靠多副本完成数据高可靠,下图是ceph的存储示意图
网络虚拟化
网络虚拟化是在物理网络拓扑基础之上建立的虚拟网络,它不依赖于底层物理连接,能够动态变化网络拓扑,提供多租户隔离。如果溯源,vlan其实就是一种网络隔离,在一个网络下通过vlan tag划分多个广播域。可以通过SDN实现虚拟网络,这又不得不提NFV,它和SDN最大的区别是SDN是全软件实现,NFV依赖物理设备。下图展示一个物理拓扑到逻辑拓扑的映射。
还有vxlan、ovs、overlay等技术会在后面详细介绍
- 谈谈我对云计算的认识之基本概念(二)
- 谈谈我对云计算的认识之基本概念(一)
- 我对云计算的认识。
- 谈谈我对CSS的认识
- 谈谈我对CMMI的认识
- 谈谈我对指针的认识
- 谈谈我对GCD的认识
- 谈谈我对写博客的认识
- 谈谈我对C++的认识
- 谈谈我对百度权重的认识
- 经验总结-谈谈我对AppcompatActivity的认识
- 谈谈我对Harbor认识
- 谈谈我对实体的认识:DTO,DMO,DPO
- 谈谈我对广告投放系统的一点认识
- 谈谈我对实体的认识:DTO,DMO,DPO
- 谈谈我对资本主义和社会主义的一点认识
- 谈谈我对众筹的一些认识
- 谈谈目前我对区块链(Blockchain)的认识
- Vue2.0进阶组件篇4 突如其来(时间倒计时组件)
- 静态二维数组和动态二维数组(C语言)
- 170408 汇编-段内转移指令
- Unity3D游戏记录回放插件EZReplayManager(三)
- Windows 10中的PowerShell内置运行软件版本
- 谈谈我对云计算的认识之基本概念(二)
- LeetCode 226. Invert Binary Tree
- IntelliJ IDEA 14 注册码
- 总结了一些web前端常用的cdn
- 关于vertical-align:middle使img标签图片居中的办法
- React Native开源项目-稀土掘金客户端(Android、iOS双适配)
- CVPR2016 Top-push Video-based Person Re-identificantion
- dfs序,时间戳
- LeetCode 404. Sum of Left Leaves