简述虚拟化和云计算的关系与区别(云计算和虚拟化差别)
简述虚拟化和云计算的关系与区别(云计算和虚拟化差别)容器是没有 GuestOS 的轻量级虚拟机,多个容器共享一个 OS 内核,容器中包含需要部署的应用和它依赖的系统环境,容器大小通常只有几十到几百 MB。由于共享操作系统内核,所以容器依赖于底层的操作系统,各个操作系统大都有自己的容器技术和容器工具。实际使用场景中,我们使用虚拟化技术其实是为了按需分配资源来完成服务的部署和使用,同时对服务所依赖的环境进行隔离,不被其它服务感知或干扰。为此启动一个 GuestOS 并不是必需的,为什么不考虑让多个虚拟机公用一个操作系统内核,只隔离开服务运行环境同时控制服务使用的系统资源呢?基于容器的虚拟化就是这样一种技术。半虚拟化,在虚拟客户操作系统中加入特定的虚拟化指令,通过这些指令可以直接通过 Hypervisor 层调用硬件资源,免除有 Hypervisor 层转换指令的性能开销。半虚拟化的典型代表 Microsoft Hyper-V、Vmware 的
虚拟化是通过软件手段对计算机硬件资源镜像整合管理和再分配的一种技术,常用的手段有基于虚拟机的虚拟化和基于容器的虚拟化。
在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。
虚拟化技术分类- 硬件虚拟化
- 虚拟机(Virtual machine或VM),可以像真实机器一样运行程序的计算机的软件实现
- 便携式应用程序,允许程序在便携式设备中运行而不用在操作系统中安装
- 跨平台虚拟化,允许针对特定CPU或者操作系统的软件不做修改就能运行在其他平台上,例如Wine
- 虚拟设备,运行于虚拟化平台之上,面向应用的虚拟机映像
- 模拟器
- 完全虚拟化,敏感指令在操作系统和硬件之间被捕捉处理,客户操作系统无需修改,所有软件都能在虚拟机中运行,例如IBM CP/CMS,VirtualBox,VMware Workstation
- 硬件辅助虚拟化,利用硬件(主要是CPU)辅助处理敏感指令以实现完全虚拟化的功能,客户操作系统无需修改,例如VMware Workstation,Xen,KVM
- 部分虚拟化,针对部分应用程序进行虚拟,而不是整个操作系统
- 准虚拟化/超虚拟化(paravirtualization),为应用程序提供与底层硬件相似但不相同的软件接口,客户操作系统需要进行修改,例如早期的Xen
- 操作系统级虚拟化,使操作系统内核支持多用户空间实体,例如Parallels Virtuozzo Containers,Unix-like系统上的chroot,Solaris上的Zone
- 平台虚拟化,将操作系统和硬件平台资源分割开
- 应用程序虚拟化,在操作系统和应用程序间建立虚拟环境
- 虚拟内存,将不相邻的内存区,甚至硬盘空间虚拟成统一连续的内存地址
- 存储虚拟化,将实体存储空间(如硬盘)分隔成不同的逻辑存储空间
- 网络虚拟化,将不同网络的硬件和软件资源结合成一个虚拟的整体
- 虚拟专用网络(VPN),在大型网络(通常是Internet)中的不同计算机(节点)通过加密连接而组成的虚拟网络,具有类似局域网的功能
- 存储器虚拟化,将网络系统中的随机存储器聚合起来,形成统一的虚拟内存池
- 桌面虚拟化,在本地计算机显示和操作远程计算机桌面,在远程计算机执行程序和储存信息
- 数据库虚拟化
- 软件虚拟化
- 服务虚拟化
- 虚拟化发展时间线
- 操作系统虚拟化
- 应用程序虚拟化
- 桌面应用虚拟化
- 存储虚拟化
- 网络虚拟化
- 一对多:其中将一个物理服务器划分为多个虚拟服务器,这是典型的服务器整合模式。
- 多对一:其中整合了多个虚拟服务器,并将它们作为一个资源池,这是典型的网格计算模式。
- 多对多:将前两种模式结合在一起。
- 全虚拟化
全虚拟化,虚拟化操作系统与底层硬件完全隔离。由中间的 Hypervisor 层转化虚拟化客户操作系统对底层硬件的调用代码,全虚拟化无需更改客户端操作系统,并兼容性好。典型代表有:Vmware Workstation、KVM。
- 半虚拟化
半虚拟化,在虚拟客户操作系统中加入特定的虚拟化指令,通过这些指令可以直接通过 Hypervisor 层调用硬件资源,免除有 Hypervisor 层转换指令的性能开销。半虚拟化的典型代表 Microsoft Hyper-V、Vmware 的 vSphere。
注:针对 IO 层面半虚拟化要比全虚拟化要好,因为磁盘 IO 多一层必定会慢。一般说 IO 就是网络 IO 和磁盘 IO,因为这两个相对而言是比较慢的。
基于虚拟机(Hypervisor-based)的虚拟化它通过一个软件层的封装,提供和物理硬件相同的输入输出表现。实现了操作系统和计算机硬件的解耦,将 OS 和计算机间从 1 对 1 变成了多对多(实际上是 1 对多)的关系。该软件层称为虚拟机管理器(VMM / Hypervisor),它可以直接运行在裸机上(Xen、VMware EXSi),也可以运行在操作系统上(KVM、VMware Workstation)。这项技术已经很成熟了 (发展了40 多年),但仍然存在以下几个问题:
- 在虚拟机上运行了一个完整的操作系统(GuestOS),在其下执行的还有虚拟化层和宿主机操作系统,一定比直接在物理机上运行相同的服务性能差;
- 有 GuestOS 的存在,虚拟机镜像往往有几个 G 到几十个 G,占用的存储空间大,便携性差;
- 想要使用更多硬件资源,需要启动一台新的虚拟机。要等待 GuesOS 启动,可能需要几十秒到几分钟不等。
实际使用场景中,我们使用虚拟化技术其实是为了按需分配资源来完成服务的部署和使用,同时对服务所依赖的环境进行隔离,不被其它服务感知或干扰。为此启动一个 GuestOS 并不是必需的,为什么不考虑让多个虚拟机公用一个操作系统内核,只隔离开服务运行环境同时控制服务使用的系统资源呢?基于容器的虚拟化就是这样一种技术。
基于容器的虚拟化容器是没有 GuestOS 的轻量级虚拟机,多个容器共享一个 OS 内核,容器中包含需要部署的应用和它依赖的系统环境,容器大小通常只有几十到几百 MB。由于共享操作系统内核,所以容器依赖于底层的操作系统,各个操作系统大都有自己的容器技术和容器工具。
Docker 是一个 Linux 容器管理工具,随着 Docker 的兴起,Linux 容器技术也是当下最时兴的容器虚拟化技术。Linux 容器工具有很多,OpenVZ、LXC、Docker、Rocket、Lmctfy 等等,大都是基于 Linux 内核提供的两个机制:Cgroups(实现资源按需分配)和 Namespace(实现任务隔离)。
二种虚拟化技术的区别1、虚拟机技术已经发展了很多年,虚拟机和虚拟化层间的接口、虚拟机镜像格式等都已经标准化了。相应的管理工具、分布式集群管理工具都有比较完善的解决方案,而容器最近几年才兴起,配套技术和标准还在完善中;
2、虚拟机由于有 GuestOS 存在,可以和宿主机运行不同 OS,而容器只能支持和宿主机内核相同的操作系统;
3、虚拟机由于有 VMM 的存在,虚拟机之间、虚拟机和宿主机之间隔离性很好。而容器之间公用宿主机的内核,共享系统调用和一些底层的库,隔离性相对较差;
4、容器比虚拟机明显更轻量级,对宿主机操作系统而言,容器就跟一个进程差不多。因此容器有着更快的启动速度(秒级甚至更快),更高密度的存储和使用(镜像小)、更方便的集群管理等优点。同时由于没有 GuestOS 存在,在容器中运行应用和直接在宿主机上几乎没有性能损失,比虚拟机明显性能上有优势。
云计算和虚拟化差别对云计算和虚拟化差别的描述,有一句经典的话:虚拟化是云计算构建资源池的一个主要方式。只要这句话你理解透了就知道他俩的关系了。
简单来说,云计算是一个概念,而不是具体技术。虚拟化是一种具体技术,指把硬件资源虚拟化,实现隔离性、可扩展性、安全性、资源可充分利用等特点的产品。
目前云计算,大多是依赖虚拟化,通过把多台服务器实体虚拟化后,构成一个资源池,实现共同计算,共享资源。也就是现在所谓云计算,其实这个词提出来之前,过去的服务器集群就已经实现这些功能了,只不过没有现在那么先进而已。
各领域代表的产品
- 云计算架构的开源产品是 Openstack,OpenStack 是一个由 NASA 和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目。
- 虚拟机的虚拟化:VM 的商业付费 vSphere 或者开源的 KVM。
- 容器的虚拟化:Docker。
OpenStack
Openstack 是众多技术的组合体,有涉及网络组件的 Neutron,有涉及 Dashboard 的 Horizon,也有涉及计算资源分配的 Nova。
虚拟化技术只是其中一个涉及到资源池构建的方式。当然你也可以用其它方式构建资源池 比如物理机还有容器。
Openstack 经过几年十几个版本的更迭,已经拥有了 Keystone、Nova、Neutron、Cinder、Glance、Swift、Heat、Ceilometer 等等组件,比较完整的提供了一个云平台应有的各个模块。
在云计算中,不同层的选型
选取基于虚拟机的虚拟化呢,还是基于容器的虚拟化。早期由于容器技术的不完善,云计算只有虚拟机这一种选择。
随着现在容器技术兴起,基于容器的虚拟化性能更高,交付速度快,方便管理,而且资源利用率高,看起来是比虚拟机更好的方案。但是它现有的两个比较大的缺点(隔离性不够强、操作系统依赖性)让他无法完全替代 VM,对于 SaaS 用户和部分 PaaS 用户而言这两个缺点可能不那么明显。现阶段 Container 和云计算主要结合的场景也是在 SaaS 和 PaaS 中,事实上大多数 SaaS 和 PaaS 服务提供商都使用了容器技术。
但是对于 IaaS 的用户来说,他们租用的是基础设施。上面承载着他们自己运行的系统和服务,隔离性不强意味着安全性和可信性不高。在这种情况下大客户们,肯定是不放心的。同时操作系统依赖性也是限制 Container 在 IaaS 层应用的一个主要问题,也是绝大多数解决方案都是将Container 运行在 VM 上的原因,这样 Container 性能好的优势实际上在云上根本发挥不出来,优点只有启动快了。