虚拟化有哪些应用?

虚拟化有哪些应用?,第1张

在计算机服务器虚拟化实现过程中,设备和I/O也是计算机系统的主要组成部门,也需要实现虚拟化,才能促使服务器也实现虚拟化。和内存虚拟化相比,设备、I/O和网口虚拟化主要通过专业的封装技术来实现,为虚拟机的运行提供技术支持。经常满足虚拟机进行设备访问和I/O请求的需求,在计算机服务器虚拟化平台中,为设备和I/O的虚拟化实现奠定了坚实基础。在具体运行中,各设备型号、配置、参数等在计算机服务器中存在一定的差异,但具体实现计算机服务器中,虚拟机和实体机之间数据和信息的互换,展现出服务器虚拟化技术应用的效果。此项技术的合理应用,既能拓展计算机服务器虚拟化技术的应用范围,也可以大幅度降低信息时代对计算机底层硬件的依赖程度。只要搭设虚拟平台,就可以实现在不同物理机上的相互迁移。

如需了解更多,请访问蛙云官网>

专业领域十余载,倾情奉献

一次沟通,终生陪伴

body{ line-height:200%; } 服务器虚拟化技术的常见类型 在服务器虚拟化技术中,被虚拟的实体是各种各样的IT资源。按照这些资源的类型分类,我们可以梳理出不同类型的虚拟化。目前,大家接触最多的就是系统虚拟化。比如使用VMware Workstation在个人电脑上虚拟出一个逻辑系统,用户可以在这个虚拟的系统上安装和使用另一个 *** 作系统及其上的应用程序,就如同在使用一台独立的电脑。我们将该虚拟系统称做“虚拟机”,而VMware Workstation这样的软件就是 “虚拟化软件套件”,它们负责虚拟机的创建、运行和管理。虽然虚拟机或者说系统虚拟化是当前最常使用的服务器虚拟化技术,但它并不是虚拟化的全部。下面为读者介绍服务器虚拟化技术的几种常见类型。 1 基础设施虚拟化 网络虚拟化是指将网络的硬件和软件资源整合,向用户提供虚拟网络连接的虚拟化技术。网络虚拟化可以分为局域网络虚拟化和广域网络虚拟化两种形式。在局域网络虚拟化中,多个本地网络被组合成为一个逻辑网络,或者一个本地网络被分割为多个逻辑网络,并用这样的方法来提高大型企业自用网络或者数据中心内部网络的使用效率。该技术的典型代表是虚拟局域网(Virtual LAN, VLAN)。对于广域网络虚拟化,目前最普遍的应用是虚拟专用网(Virtual Private Network, )。虚拟专用网抽象化了网络连接,使得远程用户可以随时随地访问公司的内部网络,并且感觉不到物理连接和虚拟连接的差异性。同时,保证这种外部网络连接的安全性与私密性。 存储虚拟化是指为物理的存储设备提供一个抽象的逻辑视图,用户可以通过这个视图中的统一逻辑接口来访问被整合的存储资源。存储虚拟化主要有基于存储设备的存储虚拟化和基于网络的存储虚拟化两种主要形式。磁盘阵列技术(Redundant Array of Inexpensive Disks, RAID)是基于存储设备的存储虚拟化的典型代表,该技术通过将多块物理磁盘组合成为磁盘阵列,用廉价的磁盘设备实现了一个统一的、高性能的容错存储空间。网络附加存储(Network Attached Storage, NAS)和存储区域网(StorageArea Network, SAN)则是基于网络的存储虚拟化技术的典型代表。 存储虚拟化是指把物理上分散存储的众多文件整合为一个统一的逻辑视图,方便用户访问,提高文件管理的效率。存储设备和系统通过网络连接起来,用户在访问数据时并不知道真实的物理位置。它还使管理员能够在一个控制台上管理分散在不同位置的异构设备上的数据。 2 系统虚拟化 正如上文所述,目前对于大多数熟悉或从事IT工作的人来说,“虚拟化”这个词在脑海里的第一印象就是在同一台物理机上运行多个独立的 *** 作系统,即所谓的系统虚拟化。系统虚拟化是被最广泛接受和认识的一种服务器虚拟化技术。系统虚拟化实现了 *** 作系统与物理计算机的分离,使得在一台物理计算机上可以同时安装和运行一个或多个虚拟的 *** 作系统。在 *** 作系统内部的应用程序看来,与使用直接安装在物理计算机上的 *** 作系统没有显著差异。 系统虚拟化的核心思想是使用虚拟化软件在一台物理机上虚拟出一台或多台虚拟机(Virtual Machine, VM)。虚拟机是指使用系统虚拟化技术,运行在一个隔离环境中、具有完整硬件功能的逻辑计算机系统,包括客户 *** 作系统和其中的应用程序。在系统虚拟化中,多个 *** 作系统可以互不影响地在同一台物理机上同时运行,复用物理机资源。在下文,尤其是第4章中,读者将会接触到各种各样不同的系统虚拟化技术,比如应用于IBM z系列大型机的系统虚拟化、应用于基于Power架构的IBM p系列服务器的系统虚拟化和应用于x86架构的个人计算机的系统虚拟化。对于这些不同类型的系统虚拟化,虚拟机运行环境的设计和实现不尽相同。但是,在系统虚拟化中虚拟运行环境都需要为在其上运行的虚拟机提供一套虚拟的硬件环境,包括虚拟的处理器、内存、设备与I/O及网络接口等,如图22所示。同时,虚拟运行环境也为这些 *** 作系统提供了诸多特性,如硬件共享、统一管理、系统隔离等。 图22 系统虚拟化 相信很多读者都曾经或者正在将系统虚拟化技术运用到我们日常所用的个人电脑上。在个人电脑上使用系统虚拟化具有丰富的应用场景,其中最普遍的一个就是运行与本机 *** 作系统不兼容的应用程序。例如,一个用户使用的是Windows系统的个人电脑,但是需要使用一个只能在Linux下运行的应用程序,他可以在个人电脑上虚拟出一个虚拟机并在上面安装Linux *** 作系统,这样就可以使用他所需要的应用程序了。 系统虚拟化更大的价值在于服务器虚拟化。目前,数据中心大量使用x86服务器,一个大型的数据中心中往往托管了数以万计的x86服务器。出于安全、可靠和性能的考虑,这些服务器基本只运行着一个应用服务,导致了服务器利用率低下。由于服务器通常具有很强的硬件能力,如果在同一台物理服务器上虚拟出多个虚拟服务器,每个虚拟服务器运行不同的服务,这样便可提高服务器的利用率,减少机器数量,降低运营成本,节省物理存储空间及电能,从而达到既经济又环保的目的。 除了在个人电脑和服务器上采用虚拟机进行系统虚拟化以外,桌面虚拟化同样可以达到在同一个终端环境运行多个不同系统的目的。桌面虚拟化解除了个人电脑的桌面环境(包括应用程序和文件等)与物理机之间的耦合关系。经过虚拟化后的桌面环境被保存在远程的服务器上,而不是在个人电脑的本地硬盘上。这意味着当用户在其桌面环境上工作时,所有的程序与数据都运行和最终被保存在这个远程的服务器上,用户可以使用任何具有足够显示能力的兼容设备来访问和使用自己的桌面环境,如个人电脑、智能手机等。 3 软件虚拟化 除了针对基础设施和系统的虚拟化技术,还有另一种针对软件的虚拟化环境,如用户所使用的应用程序和编程语言,都存在着相对应的虚拟化概念。目前,业界公认的这类虚拟化技术主要包括应用虚拟化和高级语言虚拟化。 应用虚拟化将应用程序与 *** 作系统解耦合,为应用程序提供了一个虚拟的运行环境。在这个环境中,不仅包括应用程序的可执行文件,还包括它所需要的运行时环境。当用户需要使用某款软件时,应用虚拟化服务器可以实时地将用户所需的程序组件推送到客户端的应用虚拟化运行环境。当用户完成 *** 作关闭应用程序后,他所做的更改和数据将被上传到服务器集中管理。这样,用户将不再局限于单一的客户端,可以在不同的终端上使用自己的应用。 高级语言虚拟化解决的是可执行程序在不同体系结构计算机间迁移的问题。在高级语言虚拟化中,由高级语言编写的程序被编译为标准的中间指令。这些中间指令在解释执行或动态翻译环境中被执行,因而可以运行在不同的体系结构之上。例如,被广泛应用的Java虚拟机技术,它解除下层的系统平台(包括硬件与 *** 作系统)与上层的可执行代码之间的耦合,来实现代码的跨平台执行。用户编写的Java源程序通过JDK提供的编译器被编译成为平台中立的字节码,作为Java虚拟机的输入。Java虚拟机将字节码转换为在特定平台上可执行的二进制机器代码,从而达到了“一次编译,处处执行”的效果。

转载表面上看,是一套基于B/S方式实现的分布式管理系统,但其实背后的架构是基于C/S完成的。你以为他是一只鞋吗?其实他是一个吹风机。作为界面化的系统,浏览器框架是不可或缺的,但更加重要的东西在Socket上面。

一、需要解决中央控制端到各节点服务器之间的通信。

这个其实牵扯到一个通信协议的问题,各语言都有自己的socket,thread的库,直接调用即可。但是这个通信协议就需要自己来完成了。既不能太简单,太简单了,明码传输,如果别人获知了这个接口,就很容易执行一些令人讨厌的 *** 作。也不能太复杂,太复杂了等于是给自己找麻烦,所以简单的数据包编解码的工作或者用token验证的方式是需要的。通信协议起码要两种,一种是传输命令执行的协议,一种是传输文件的协议。

二、跨语言的socket通信

为什么要跨语言,主控端和代理端通信,用什么语言开发其实无所谓。但是为了给自己省事,尽可能使用服务器上已经有了的默认语言,Ambari前期采用phppuppet的方式管理集群,这不是不可以,puppet自己解决了socket通信协议和文件传输的问题,可你需要为了puppet在每台服务器上都安装ruby。我是个有点服务器和代码洁癖的人。光是为了一个puppet就装个ruby,我觉得心里特对不起服务器的资源。所以我自己写了一个python的代理端。python是不管哪个linux系统在安装的时候就都会有了。然后主控端的通信,可以用python实现,也可以用php实现,但是考虑到对于更多的使用者来说,改php可能要比改tornado简单许多,所以就没用python开发。hadoop分支版本众多,发布出去,用户要自己修改成安装适合自己的hadoop发行版,就势必要改源码,会php的明显比会python的多。php里面的model封装了所有的 *** 作,而python只是个 *** 作代理人的角色而已。

所以也延伸出一个问题,什么语言用来做这种分布式管理系统的代理端比较合适,我自己觉得,也就是python比较合适了, *** 作系统自带,原生的package功能基本够用。用java和php也可以写agent,但是你势必在各节点预先就铺设好jre或者php运行环境。这就跟为什么用python和java写mapred的人最多是一样的。没人拦着你用nodejs写mapred,也可以写,就是你得在每个节点都装v8的解释引擎,不嫌麻烦完全可以这样干。原理参看map/rece论文,不解释。perl也是 *** 作系统原生带的,但是perl的可维护性太差了,还是算了吧。

所以这就牵扯到一个跨语言的socket问题,理论上来说,这不存在什么问题。但这是理论上的,实际开发过程中确实存在问题,比如socket长连接,通信数据包在底层的封装方式不同。我没有使用xml-rpc的原因之一就是我听说php的xmlrpc跟其他语言的xmlrpc有不同的地方,需要修改才能用,我就没有用这种办法。最早是自己定义的 *** 作协议,这时就遇到了这些问题,所以后来直接采用了thrift方式。就基本不存在跨语言的socket通信问题了。

三、代理端执行结果的获取

无论命令还是文件是否在代理端执行成功,都需要获取到执行结果返回给中央端。所以这里也涉及一个读取节点上的stdout和stderr的问题。这个总体来说不是很难,都有现成的包。当然这个时候你需要的是阻塞执行,而不能搞异步回调。

还有个问题是,我要尽可能使用python默认就带的包,而尽量不让服务器去访问internet下载第三方的包。

还有代理端最重要的一点,就是python的版本兼容性。centos5用python24,centos6用python26,ubuntu基本默认都是27。所以一定要最大限度的保证语言的跨版本兼容性,要是每个 *** 作系统和每一个版本我都写一个代理,我一个人就累死了。

四、浏览器端的model,view,controller

这里面你要封装好所有的通信协议,以及需要在节点上面执行的脚本。发送文件的 *** 作和数据库 *** 作也要在model里面完成。

如果对tcl/tk很熟,也可以写基于 *** 作系统界面方式的管理,不用浏览器就是了。

view对我来说是最痛苦的事,都是现学的jQuery怎么用,前端的工作太可怕了。关于这方面,没有太多可描述的,html和js带给我的只有痛苦的回忆,万恶的undefined。

五、跨 *** 作系统的安装文件封装。

要适应不同的 *** 作系统也是个很麻烦的事情,需要用agent提前获知 *** 作系统的发行分支,版本号。然后去找到对应的安装文件去执行。你不能保证一个分布式系统的集群中所有的节点都可以访问internet,更多的情况是这些节点都存在在一个安全的内网中。只有个别几个节点是可以访问外网的。所以,我势必要把所有的安装文件以及他们的依赖尽可能集中起来。我不确定安装 *** 作系统的lzo,yum或者apt-get会去下什么鬼东西,甚至无论是yum还是apt-get,里面都没有hadoop-lzo的库文件。所以,最好的办法是自己编译打包rpm和deb包。直接安装就好了,别去找repo下载什么。

这就是第五步工作,把需要的依赖的东西自己编译打包成rpm和deb。

deb包很好解决,但是rpm就没那么好办了,需要学习rpm的编译文件如何编写,这块是挺麻烦的,但是这玩意用好了还是挺不错的。现在我自制的安装包里面就已经包含了自己编译的lzo和snappy两种压缩库,以及hadoop-gpl-packaging的rpm和deb。下一个发布的easyhadoop将直接支持centos5,6,suse,以及ubuntu/debian的系统上安装hadoop。已经自带了lzo和snappy以及lzop和snzip。

六、把这些所有东西,整合到一个系统里面。

关联这些所有事情间的联系,整合到一个浏览器界面里面去。写一个分布式的管理脚本不难,写一个界面也不难,但是也许是我的水平不行,这两件事结合起来让他们协同工作还是有点难度的。对我来说,写界面的工作可能更难一点。

Cloudera可能是十来个人在写Manager的东西,ambari也是放到github和apachesvn上面,apache基金会的各种committer在写。easyhadoop没他们功能那么强大,一年来只有我一个人设计架构,功能,各种语言的编码,测试,发布。Fortheloveofgod,WhathaveIdone(英文部分请站在山顶仰天长啸)T_T。从前台到后台,到hadoop和生态系统以及他们的依赖软件的单独patch、编译打包。(系统yum或者apt-get的包不如自己打的好使。)

从时间上来看,全球第一款开源的hadoop部署管理系统应该还是属于ambari,2011年8月开始写的,2012年9月底进入apache的incubator。我是大概2012年8月开始写的easyhadoop,全球第一没赶上,估计国内第一个开源的hadoop管理系统还是可以排上的。

VMware:vSphere4VMware的虚拟化产品包括vSphere等一系列数据中心虚拟化产品以及vCenter等一系列应用程序和基础架构管理工具
,可以帮助企业以一种渐进的、非破坏性的方式实现云计算,获得高效、灵活、可靠的“IT即服务”。其中的vSphere4是业界首款云 *** 作系统,能够聚合和全面管理大型基础架构资源池,包括处理器、存储和网络等,使其成为一种无缝、灵活、动态的 *** 作环境。无论是企业当前的应用还是下一代的应用,都能在vSphere4之上更高效地运行并确保服务水平。而vCenter能够帮助客户大幅度提高数据中心的运行效率,获得更强的控制服务水平和更高的灵活性。除服务器虚拟化产品外,VMware还提供VMwareView、VMwareWorkstation等一系列桌面虚拟化产品,VMwareView产品组合可让IT人员在数据中心管理虚拟桌面,终端用户可以在任何位置的任何设备上使用他们熟悉的个性化环境,并通过一个单一的视图查看所有应用程序和数据,从数据中心更加灵活、可靠、高效和安全地管理桌面和应用程序。而VMwareWorkstation则面向开发、测试、部署及支持软件的专业人员,它提供快速配置及重新设置功能,能模拟出多种应用环境,从而允许用户在自己偏爱的 *** 作系统上运行任何应用程序。最新版本的VMwareWorkstation65具备诸多革命性的新功能,包括在不同虚拟机上的窗口之间无缝切换、支持DirectX三维图形以及利用虚拟机的录制与回放功能进行开创性调试工具。移动虚拟化是VMware正在不断扩展的新的虚拟化应用领域,2008年底推出的移动虚拟化平台(MVP),开拓性地将虚拟化技术及已获证明的诸多虚拟化技术应用好处引入到手机上。思杰:CitrixDesliveryCenter思杰交付中心(CitrixDeliveryCenter)通过集中化管理和交付各种应用和桌面,将IT转变成一种按需提供的服务。思杰交付中心通过网络优化与端到端的虚拟化技术(包括应用、桌面、服务器虚拟化技术)让用户不管身处何地都可获得最佳的应用性能,从而更高效地工作。思杰交付中心包含以下组件:
CitrixXenApp:一种Windows应用交付系统,可在数据中心集中管理应用,并将应用作为按需服务交付给使用任何设备的各地用户。XenApp将应用管理成本降低了高达48%,改善了IT将应用交付给分布式用户时的响应度,并增强了应用和数据的安全性。
CitrixXenDesktop:一种桌面虚拟化系统,可在数据中心集中管理桌面的生命周期,从而可集中管理桌面,并将桌面作为一种服务交付给各地用户,同时还可将桌面TCO降低高达40%,并增强数据安全性。
CitrixXenServer:一种开放的、功能强大的服务器虚拟化系统,可将静态的、复杂的数据中心环境转变成更为动态的、更易于管理的服务器工作负载交付中心,从而大大降低数据中心的运营成本。基于开源Xen系统管理程序,XenServer提供了安全的、成熟的服务器虚拟化平台,实现了接近裸机的性能。

服务器虚拟化,就能实现在指定的物理服务器主机上以访客身份运行多个服务器 *** 作系统。这样就能将服务器软件从物理计算机抽离出来,服务器就会成为与物理层面分离的虚拟机 ,尽管服务器认定它拥有专属计算和内存资源,然而实际上,它是在服务器硬件的虚拟仿真品上运行。

服务器虚拟化能够比以往更高效地利用 IT 资源。在服务器虚拟化之前,同一数据中心内的硬件利用不足或过度利用的情况比比皆是。通过虚拟化,数据中心可以根据负载情况在虚拟机之间转移工作负载。同一台物理服务器也可以运行多个服务器 *** 作系统和配置,从而进一步提高效率。服务器虚拟化是云计算和混合 IT 的基础。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13059566.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存