云计算和虚拟化有什么区别?

2019-10-11 09:23发布

虚拟化技术与现流行的大数据Hadoop技术有什么区别,解决的是一类问题么?
虚拟化技术是否都适用于并行计算,分布式大数据存储和检索?

虚拟化技术与现流行的大数据Hadoop技术有什么区别,解决的是一类问题么?
虚拟化技术是否都适用于并行计算,分布式大数据存储和检索?

付费偷看设置
发送
3条回答
比特币
2楼-- · 2019-10-11 09:47

要想具体了解虚拟化和云计算的区别,就要从虚拟化的历史说起。


1998年VMware 推出了让人惊讶无比的Hypervisor,允许用户将x86系统转变成通用的共享硬件基础架构,开启了x86 架构上的虚拟化时代。但那个时代的虚拟化是一种完全的软件实现,在性能上尤其是I/O性能方面是非常糟糕的。在2005年之后陆续出现了硬件辅的助虚拟化技术(Intel VT-x和AMD-V)以及网络I/O虚拟化(SR-IOV、VT-d,存储技术(NVMe)以及APICv等技术的陆续出现,不仅大幅度的提升了虚拟机的性能,也满足了虚拟化技术在生产环境中的使用的要求。一时之间各种虚拟化技术纷至沓来,主流的技术框架有计有开源的Xen、KVM,微软的Hyper-V、VMw are的ESX/ESXi以及极具特点的又令人惋惜的Solaris Zone等等。


其中,XEN应该是最早被云计算所认可的虚拟化技术。Xen通过一种叫做半虚拟化的技术获得高效能的表现,典型的情况下性能损失大约2%,在最糟的情况下会有8%的性能耗损。这与当时其它使用完全的虚拟化却造成最高到20%损耗的其他解决方案形成一个明显的对比。于是最早出现的云计算环境例(如AWS)大多选择了XEN实现底层的硬件虚拟化。之后的十年间,XEN虚拟化随着云计算的普及而到了长足的发展。这张图就归纳了了这个演进的示意图。



· XEN PV3.0

采用了半虚拟化技术。为了更高的性能,在这里,Guest虚拟机需要hypervisor进行修。在这个配置中,AMI和boot是半虚拟的(PV),内核使用的是hypercalls而不是特权指令,系统使用了半虚拟的网络和存储驱动程序。这些技术实现了性能上的提升,但是仍然有一些特权操作具有明显的开销( 系统调、页表事件)。事实上,EC2上的第一个实例是这样的(M1)。


· XEN HVM 3.0

这个技术具有了一个新的Hypersivor配置,使用的CPU具有硬件虚拟化的特性(VT-x),网络和存储设备使用了半虚拟化驱动程序。 AMI和引导现在升级为HVM,不再需要改动。 中断和定时器尚仍未实现半虚拟化。性能的表现上,这种类型的实例可以比裸机启动的更快。


· XEN HVM 4.01

这个配置启动HVM并使用了PVHVM驱动程序。 这些驱动程序在HVM上也称为PV ,它们是使用HVM功能的半虚拟化驱动程序。 改进了包括了一些类型的工作负载的改进,包括中断和定时器等。

早期的HVM 技术或有不足,表现为HVM的实例在性能上比PV实例要慢。随后,这个问题被改进,HVM的优势变得更为明显。于是HVM就成AWS 官方推荐的的实例虚拟化类型。当然,这个名字本身也很容易让人混淆。记住一点就足够了, EC2上“HVM”实例都是带有PVHVM驱动程序的HVM。


· Xen AWS 2013

从2013年开始,EC2实例类型开始支持网络接口的硬件虚拟化:单个根I/O虚拟化(SR-IOV)。 第一个是支持这个技术的实例就是C3。 AWS则将这个特性称作增强联网(Enhanced Networking)。其中, Intel 82599 虚拟功能 (VF) 接口最多支持 10 Gbps 的网络速度 (例如C3实例) ; Elastic Network Adapter (ENA) 最多支持 25 Gbps 的网络速度(例如P2实例)。2016年Netflix 曾经进行过一个有意思的网络性能测试,结果是在AWS上达到了每秒2百万个数据包 。


· Xen AWS 2017

2015年,AWS推出了新的实例C4。它网络存储EBS卷上使用了硬件虚拟化技术。 在2016年这个技术扩展到x1.32xlarge的实例存储设备之上(这个实例类型拥有128颗vCPU、1,952G内存、2个1,920GB的SSD存储)。2017年,推出了存储优的化实例类型I3,该类型使用了SR-IOV和NVME存储驱动程序。Netflix 对这个类型也做了测试和部署,证实了 AWS上I3实例存储的300万次IOPS http://techblog.cloudperf.net/2017/04/3-million-storage-iops-on-aws-cloud.html)



看起来,这似乎是一个伟大的成就。虚拟化技术,特别是XEN的应用应该已经达到了皆大欢喜的结果。按照常人的理解,在很长的一段时间里我们可以将重心移作他处了。但是技术的发展却不能以常理来推测。事实上,在长期的实践中,XEN自身具有的缺陷已经暴露的越来越清晰。主要的问题有这几点:

· Domain0的问题。Domain0是Xen在初期就引入的一个特权Dom。Xen的 Hypervisor在收到IO请求后,需要先把请求转给Domain0,完成调度处理后,再通过grant copy或者grant map转发到对应的虚拟机上。这就使得Dom0 的切换上,我们损失了太多的性能。

· Xen Hypervisor 的CPU和内存调度管理。过去的十年CPU技术以及Linux 内核都有了十足的发展,但是Xen Hypervisor 的CPU和内存调度管理却乏善可陈。例如对于hugepage 的支持上,XEN 只支持2M的物理页面;多核(>128 )调度上,也遇到了难以克服的问题。于是新的变化出现了。


· AWS Nitro 2017

在2017年10月30日的AWS re:Invent 大会上,当Peter DeSantis发布新的C5实例的时候出人意料宣布宣布 AWS 在 EC2 架构的新演进——Nitro 系统架构。 记得发布的那个时刻我就坐在会场的前排,大屏幕上闪过这个新的虚拟化架构的时候,要承认我确实被这个大胆而全新的技术吓到了。按照他的介绍在 Nitro 系统架构中、网络、存储、安全管理及监控都从传统实例中解耦,被迁移到专属硬件中。这些功能都将模块化、微服务化,使其能够快速迁移并且随时能够根据新的需求而演进。


这种架构的好处,是我们可以将所有服务器资源都分配给客户的实例,并且我们最终的目标是让 EC2 实例与裸金属主机之间没有区别。并且从 EC2 C3 实例到 EC2 C4 实例,AWS 实现了将网络和存储模块迁移到 Nitro 系统中。


Nitro是一个轻量级的、基于KVM核心内核模块,但剪裁掉了部分组件,例如QEMU。 在I/O路径中没有调用domO或IDD, 而是直接对硬件进行访问。Nitro的目标是提供“与裸设备无法区分”的虚拟化表现。 它不仅将SR-IOV用于网络和存储I/O的硬件虚拟化(AWS 2015年收购的Annapurna 实验室研发的ASIC芯片),而且还具有了硬件虚拟化支持的中断:使用延迟的中断和APICv来减少VM exits 的数量。 强调一点,中断性能被描述为硬件虚拟化性能的最后战场 。

无独有偶,在AWS 公布了Nitro之后,微软也于2018年2月5日公布其使用FPGA(现场可编程门阵列)封装的Accelerated Networking (AN)网络。看来殊途同归,使用专用硬件加速网络已经被证明是一条有效的通道。不过这个技术的门槛或许比较高,远不是普通的玩家可以参与的。至于ASIC vs FPGA,这个就是见仁见智了,答案或许就在今后市场的表现上了。


Nitro 并非是从零出现的技术,上文提到的硬件虚拟化开发的成果都是Nitro的组成部分,并且这个项目的开发历时4年之久。这也意味着,Nitro虽然很新但是风险不大,也会很容易去部署使用。Nitro的性能损耗据Brendan Gregg 的观察是非常小的,通常不到1%(很容易测量)。他的结论是 Nitro提供的虚拟化性能接近裸设备。

对于需要深度定制化EC2 的用户而言,Nitro 也带了了另外的好处:对于EC2 更深入的监控和优化。在Nitro 支持的C5实例中我们可以得到数百个PMCs 计数器(Performance Monitoring Counters ,性能监控计数器)。作为对比,以前的实例类型中,我们只能看到区区7个PMCs。

C5是第一个使用Nitro Hypervisor的实例。截止到目前, C5 已经在AWS全球10个区域投入使用。随着国内云计算产业的发展,相信不远之后我们就会在AWS北京以及宁夏区域找到这个新一代的实例。


在re:Invent 的大会上AWS表示,除了新的Bare Metal实例之外大多数或全部实例将使用Nitro来进行管理。这也意味着是时候与Xen说一声,再见 。出于好奇,我检索了一下,自2018年以来Amazon 在Linux Kernel 上的贡献。可以看得出来,随着投入的加大,Nitro技术势必快速的成熟起来,而它所代表的新一代的虚拟化技术应该为业界提供了一个很好的范本。Nitro发布之后,有过各种评论。其中一篇的标题很有意思,叫做“AWS不是终点,但的确是指路的明灯”。


守望
3楼-- · 2019-10-11 09:50
虚拟化是手工作坊,云计算是现代化工厂。
虚拟化是砖石,云计算是砖石建起的大厦。
虚拟化,尤其是以前狭义所指的计算虚拟化,考虑的是单设备上物理资源的拆分和虚化。
虚拟化要走向云计算,需要解决两个问题。
一是狭义虚拟化向广义虚拟化的升级,资源不再限定于计算,而要通盘解决网络、存储甚至安全资源的虚拟化。
二是从单点的资源管理,上升到大集群的资源管理。在平台稳定、高可用的前提下,还要保证高效、灵活、大规模可扩展。
无数贩卖虚拟化主机的vps厂商,都会死在转型云计算(特指IaaS)的半道上,瓶颈就在于这两点。
真正能做好这两点的云计算厂商,少之又少。
威威
4楼-- · 2019-10-11 10:10

云计算是一种服务;虚拟化和分布式系统都是用来实现云计算的关键技术之一。
目前来讲虚拟化主要常用两个核心技术:服务器虚拟化,与应用虚拟化
目前来讲分布式系统主要用到的两个核心技术:分布式存储,与分布式计算


云计算可以理解为一种租借式的服务,即你可以对IT系统内部的原理什么都不懂,也不需要买到手,但是随时可以使用公共的IT资源为自己服务,比如baidu,比如QQ,比如163邮箱

我认为对虚拟化技术最好的定义就是可以让IT系统的物理拓扑图与逻辑拓扑图无关,即解耦
我们暂时以商用虚拟化系统vmware举例
为了实现拓扑解耦,它做的第一点就是让一台机器可以同时跑多个操作系统,即虚拟机,而且虚拟机还可以在物理机间来回转移,高可用,这样我们的操作系统就从物理机上彻底解放出来了,你可以把同一个虚拟机随时放到其他物理机上,实现了对硬件的高效资源利用,和系统的高度灵活,解除了大量人工劳动,便于实现大规模系统的方便管理,这种就是服务器虚拟化(vSphere)。
光系统分开还不行,你有时还需要各种方式访问虚拟机系统,于是你就会是用远程桌面等方式去访问这些后台的虚拟机,这种就是应用虚拟化(view)。
当然还有网络虚拟化,存储虚拟化等各种其他虚拟化技术正在慢慢成长,不过相对于前两者无论是商用还是开源,都还不太成熟,暂不讨论。

我认为对分布式系统比较合适的定义是把所有IT资源看成为一个整体来使用,而不是去独立的看某个机器某个系统,即资源池
我们暂时以开源Hadoop为例
为实现将IT资源变成整体,它要做到的第一点就是将一个巨大的文件拆开放在多个地方,你可以用一大堆很普通的计算机用网络连在用来存放这一个巨型文件,这样即使很多很小硬盘的机器也可以通过连在一起当成一个很大的存储空间来用,这种就是分布式存储(HDFS)。
光文件存放合在一起不行,计算能力也要合在一起,所以它还要满足一个任务分给多个物理机来处理,这样即便一堆老破电脑,通过这种方式连在一起,只要足够多,也能当超级计算机用,这种就使分布式计算(MapReduce)。
当然Hbase等其他的技术也在逐渐成熟,总的来讲都是为了解决建立巨型资源池需要的技术。

由此可以看出虚拟化主要是把大块拆成小块儿,分布式系统主要是把小块组合成大块儿,IT资源经过这样的揉碎再组合,变成了一个十分灵活的系统,在这几个基本技术的基础上,在通过某种调度和经营,就可以实现云计算的服务模式了。

一周热门 更多>