欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

虚拟化技术详情分析

程序员文章站 2022-05-23 08:20:28
最近在准备华为的网络技术大赛,初赛要学习各种不同的东西,然后发现好多东西都比较新鲜,像云计算大数据,生活中我们经常听到,大家也就一听就过去了。但是真要从技术角度去理解这些东西,我发现还是不太好...

最近在准备华为的网络技术大赛,初赛要学习各种不同的东西,然后发现好多东西都比较新鲜,像云计算大数据,生活中我们经常听到,大家也就一听就过去了。但是真要从技术角度去理解这些东西,我发现还是不太好理解的,所以边看华为提供的视频课,也边在查资料~下面分享一些自己理解到的东西(突然发现自己不懂的太多了,学习的道路十分漫长)

虚拟化技术的概念

在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。

这是百度百科给出的概念,怎么读怎么觉得官方,其实通俗一点讲,我们把计算机的硬件比喻成一所房子,把计算机上运行的操作系统和各种应用程序比喻成一个人,就是以前的硬件设备,由于技术不够发达,所以计算速度,存储等各方面都较差,所以,以前的房子(硬件设备)比较小,勉勉强强只能满足一个人住,甚至这个人稍微吃的胖点(装了许多应用程序),我们就会发现房子似乎不那么够住。但是现在不一样了,科技突飞猛进,硬件设备的整体性能大幅度提升,这就意味着房子的面积可能从原来的几平米变成了几百甚至上千平米。这个时候我们的房子再只住一个人(只有一个操作系统和一些应用程序),你就发现好像不那么合适了。(就好像一栋大厦就你一个人住,这也太浪费了)所以这个时候,我们可以让这个房子里面多住几个人,大家一块使用这个房子,也就是一台物理计算机上安装多个操作系统,构成几个相互独立的逻辑计算机,这就是虚拟化技术。

虚拟化技术与多任务的区别

多任务是指在一个操作系统中多个程序同时一起运行;而在虚拟化技术中,则可以同时运行多个操作系统,而且每一个操作系统中都有多个程序运行。

虚拟化技术与超线程技术的区别

每一个操作系统都运行在一个虚拟的CPU或者是虚拟主机上;超线程技术只是单CPU模拟双CPU来平衡程序运行性能,这两个模拟出来的CPU是不能分离的,只能协同工作。

虚拟化技术与 VM workstation等虚拟化软件的区别

虚拟化技术也与VMware Workstation等同样能达到虚拟效果的软件不同,是一个巨大的技术进步,具体表现在减少软件虚拟机相关开销和支持更广泛的操作系统方面

Inter和AMD已经出了一系列具有虚拟化技术的处理器产品

虚拟机迁移技术

虚拟机迁移技术为服务器虚拟化提供了便捷的方法。当前流行的虚拟化工具如 VMware,Xen,HyperV,KVM 都提供了各自的迁移组件。迁移服务器可以为用户节省管理资金、维护费用和升级费用。以前的 x86服务器,体积比较“庞大”;而一般的服务器,体积已经比以前小了许多,迁移技术使得用户可以用一台服务器来同时替代以前的许多台服务器,这样就节省了用户大量的机房空间。另外,虚拟机中的服务器有着统一的“虚拟硬件资源”,不像以前的服务器有着许多不同的硬件资源(如主板芯片组不同,网卡不同,硬盘,RAID 卡,显卡不同)。迁移后的服务器,不仅可以在一个统一的界面中进行管理,而且通过某些虚拟机软件,如 VMware 提供的高可用性工具,在这些服务器因为各种故障停机时,可以自动切换到网络中另外相同的虚拟服务器中,从而达到不中断业务的目的。总之,迁移的优势在于简化系统维护管理, 提高系统负载均衡,增强系统错误容忍度和优化系统电源管理。

这是百度百科给出的比较官方的解释,下面用一位大哥的经历给大家一个比较形象的理解,这个经历里面也顺便解释了一下软硬件耦合与解耦合的概念,大家可以体会一下(在这段经历的下面给出了耦合与解耦合的解释,可以参考):

今天把在公司使用的计算机更换了一台,原来是Dell的780,换成了Dell的790,机箱的样子变化比较大,但是里面硬件的配置变换并不大,最明显的变化就在于CPU,其他像内存、硬盘等等的配置与原来的计算机基本上一致。

作为开发人员,每次更换计算机的过程都会比较痛苦,因为需要把里面存储的很多资料都要移动到新的计算机中,而且很多软件都需要重新安装和配置,上次因为更换系统,差不多一天的时间就耗费进去了。

因为这次看到型号上相差不大,只差了10吗,哈哈,所以就像是否可以直接通过更换硬盘的方式来做,这样就不需要折腾了。有人对此表示质疑,因为他有过一次失败的经历,直接就蓝屏了,但是不试怎么知道,而且就算失败了,花费的也只有差不多一个小时,而如果成功,节省的将是大半天的时间,所以衡量一下风险和收益,还是值得试一下的。

说干就干,拆开机箱,把两块硬盘都拆下来,然后把旧硬盘换到新机器里面,开机,启动失败。

想到BIOS里面好像有个硬盘的设置,修改一下,然后启动,直接进入到安全模式,之后硬盘一顿狂闪,估计是把能够自动安装上的驱动程序都驱动上了,然后顺利进入了系统。再次重启,用U盘复制了新机器的驱动程序,重新安装一下,全部OK了。计算一下时间,不到一个半小时,竟然就成功更换了。

由此想到前几天看到的一个话题,就是软件和硬件之间的分离,如果说软件和硬件之间耦合非常严重,一些软件只能够在特定的硬件上运行,那么必定会大大限制软件的使用。相反,如果软件可以和硬件分离,没有耦合的关系,那么就可以达到到处运行的目的。

当年的Java正是通过虚拟机的技术实现了软硬件的解耦,甚至于是软件与操作系统之间的解耦,也正是因为Java号称的“一处编译,到处运行”,才使得它能够有今日的成功。

然而,如果不能够做好这个用来解耦的中间层的话,我们就需要付出性能或者可用性方面的代价,甚至于可能对于一些特殊的情况不得不采用针对专门硬件的软件,才能够真正达到特定的需求。然而,对于大多数情况来说,达到软硬件的解耦,益处还是要大于坏处的。

当前的移动开发方面也是一样,很多native的应用都无法实现软件与硬件或者说操作系统很好的解耦,我们不得不针对每种硬件都开发专门的应用来适应它,而不是开发一种程序就可以在各个移动终端或者设备上运行。而HMTL5的出现,似乎给大家带来了一些福音,毕竟所有操作系统上的浏览器都采用了相同的协议,这样只要是符合这个标准的web应用就都可以在浏览器中平滑地运行。从而在某种程度上达到开发一次,到处运行的效果。

耦合与解耦合

软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。

耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。

模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

解耦合就是把程序中互相不相关或有限相关的模块分割开来,把不同模块互相之间的关系用接口进行准确定义,解耦前,两个模块之间共享所有信息;解耦后,需要共享的信息呗准确地定义在接口中,并确定信息的流向,解耦合可以令程序变得清晰,把不该暴露的实现细节隐藏,使代码的修改简单化,同时使程序结构灵活,通过静态多态或动态多态,一个模块可以和任意实现接口的模块协作,系统扩展性大大增强。消除编译依赖,调试也相应简易,只要模块对一个接口调试成功,其他的接口也将没有问题。