热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

虚拟化_深度:资源虚拟化

篇首语:本文由编程笔记#小编为大家整理,主要介绍了深度:资源虚拟化相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了深度:资源虚拟化相关的知识,希望对你有一定的参考价值。





前言


前阵子听到IT圈内的朋友聊到,IaaS相关领域的软件工程师应该是当前IT产业中待遇最高的一批人。云计算作为IT基础产业,已经获得国内外IT界的高度投入。当前只要是大型的互联网公司,不论是做门户的、视频的、搜索的,还是电商的、社交的、游戏的公司都在云计算上投入巨额的人力物力,以期望占领Iaas的制高点。他们通常是以自身业务需求为起点,来部署IaaS。一旦成功部署,也可以利用IaaS来创建新的业务领域。此外,这两年因IaaS而获得风投的创业企业也颇多,他们手上有大笔的现金,不惜以重金和高股票来笼络软件人才。不过,相比于各大公司对云人才的渴求,这个市场上真正合格的IaaS软件研发工程师却非常少。主要原因大概是因为IaaS系统本身涉及的内容比较广泛,需要软件开发人员对IT领域有一定的积累。前阵子,我造访了电子科技大学,和计算机专业的大学生进行了一些交流。发现同学们对云计算技术非常感兴趣,但是对它的具体功能和原理很难准确描述。



本人从10年前开始玩虚拟化,之后由于工作和兴趣,也对云计算有了一些了解。个人感觉IaaS并没有像云一般难以琢磨和理解,并非需要很高深的计算机知识,有很多方面也是很多基本的计算机概念组成。于是在回上海的飞机上就有了要写一点关于介绍基本的IaaS概念和基础的想法。希望能帮助对IaaS感兴趣的人能够了解和进入这个领域,也希望有更多的人能加入IaaS软件的开发中来,让这个潮流技术尽快普及。



虽然IaaS并不一定需要虚拟化,但是通常来说虚拟化被认为是IaaS的基础,本篇短文将会主要介绍IaaS环境下各种资源是如何被虚拟化的。



IaaS的基本概念


IaaS (Infrastructure as aService)基础架构即服务,是云计算的一种类型,它是PaaS(Platform as a Service 平台即服务)SaaS(softwareas a service软件即服务)的基础。IaaS软件通常用于管理大规模的物理硬件(IaaS可以管理小到一台物理主机,多到成千上万的物理服务器)并把客户所需的软硬件资源(CPU,内存,网络,存储等)以“主机”的形式提供(这里的主机可以是一台独立物理主机,但更多的情况是虚拟机,VirtualMachine, 简称VM)。



IaaS的根本目的在于计算资源的池化、统一的、智能的(如按需)管理调度。计算资源的池化,也就是把所有的资源放在一个大池子里并按照较小的单元进行管理。例如把1001TB的硬盘放在存储池中,这个池子便有了100TB的容量,分配存储的时候,不再是以1TB这样的独立硬盘单元进行分发,而是可以分发一个较小的容量(例如10GB,具体的分配的单元可以由IaaS进行配置)。IaaSService,现在普遍都是以WebService的形式来提供,因为非常容易操作。



IaaS所提供的虚拟机通常都会至少包含一个可以连上网络的操作系统(如LinuxWindows)。用户通过网络可以登录并操作虚拟机并按照虚拟机的资源配置和使用时间来付费。用户在虚拟机上进行的操作就同操作一台本地刚刚安装好操作系统的电脑一样,他可以在虚拟机上安装更多的软件(如ApachemysqlSQL-ServerPythonGCC等等)。他还可以加载自己的程序以完成更多的功能(例如搭建一个网站,或者VPN服务器)。用户还可以灵活的按需申请存储空间。由于这些提供给用户的功能都是最基础的计算机功能,所以这种服务形式也就被形象的称为基础架构即服务。


虽然讲了IaaS的基本概念,大家对为什么需要IaaS也许还有疑问。IaaS软件提供的功能和传统的不使用IaaS软件相比,究竟有什么好处呢?我们来举一个例子,在传统方式里,当客户由于业务(开设一个社交网站)需要搭建一个小型服务器,在搭建上层服务软件之前,他还需要购买硬件和安装操作系统,这往往都需要至少一天的时间,由于直接购买硬件会导致一次性产生大量的花费,而且用户需要对软硬件提供日常的保养维护。相反,IaaS软件通常可以在分分钟就提供客户所需的全部资源,而且是按需(使用的时间和空间)收费。这不仅节省了用户的时间,还节省了客户初期的投资,也降低了客户构建服务器的门槛(很多人往往需要花费大量的时间来调查购买什么样的服务器,安装什么样的操作系统。当使用了IaaS软件后,用户可以在业务开始之初只申请配置较小的虚拟机,当业务需求提高后,再升级到更高配置的虚拟机)。此外IaaS软件还会提供全方位的安全保障,用户不必担心自己在云上的数据会因为普通的硬件故障而导致丢失。所以IaaS提供的按需服务,是一种先进的,快捷的,更经济的和更安全的软件服务形式。有了IaaS之后,PaaSSaaS会更加容易的叠加和部署。


那么谁会使用IaaS软件呢?公有云服务提供商是IaaS概念的发明者(Amazon2005年推出了最早的公有云AWS服务),也是目前IaaS软件商业使用的主力军。公有云服务提供商,他们拥有海量的物理服务器(数千,到数十万),大规模的网络带宽和稳定的机房环境。要管理这些海量的物理服务器,如果仅仅通过人工方式来进行是不可想象的。IaaS软件可以做到自动的通过网络来管理物理服务器的配置和运行。另外考虑到大量的客户往往只需要比较小的服务器资源,这些小资源的配置往往比单台物理服务器小很多,那么就需要通过软件的方法把单台物理服务器的资源在保证数据安全隔离的情况下分配给不同的用户使用。IaaS软件可以轻松的把一台服务器的资源划分成几个或几十个虚拟机的形式提供给客户(IaaS软件也可以把一台服务器的全部资源做成一个虚拟机;或者不采用任何虚拟化技术而直接使用物理服务器,通常这种形式被称为Baremental)。这种降低了单个客户成本的方式,扩大了客户量,也就大大提高了公有云服务提供商的营收。除了公有云提供商外,私有云和混合云是IaaS软件的主要使用者。使用私有云的企业往往是中大型的公司,他们内部有大量的服务器需要管理,这点和公有云服务商的类似,他们也需要高效的自动化IaaS软件来帮助管理这些大量的服务器。当采用了IaaS来管理私有云之后,企业的业务模式也可以发生拓展,在内部私有云超负荷的情况下(例如当节日促销活动时,客户服务的需求量可能是平时的十几甚至几十倍),可以和公有云组建混合云,这就让企业的服务能力变得无限。目前IaaS软件还没有在家庭用户中直接使用,不过未来个人云创新后,家庭用户可能可以直接使用IaaS软件的衍生产品。



目前最主流IaaS软件有亚马逊的AWS,微软的Azure和开源的OpenStack。其中前两个都是闭源的仅供内部使用,想参与开发,只能加入亚马逊或者微软了。OpenStack是目前最火的开源软件,已经有183家公司和3386名开发人员参与研发。据分析,到2018OpenStack将会拥有33亿美元的云市场。国内超过一半的IaaS研发公司都在使用OpenStack。因为开源,OpenStack非常有利于学习和研究IaaS的基本概念。



IaaS的基本资源

深度:资源虚拟化

IaaS把众多的物理资源进行划分和重组,提供给用户。IaaS具体管理的物理资源,可以分为三大类:计算资源(CPU加内存),存储资源和网络资源。从计算资源角度来讲,IaaS软件管理的最小的物理单元为一个物理服务器(Host)。根据需求,服务器上会被创建多个虚拟机。若干配置相同(相同的虚拟化软件Hypervisor和网络设备以及拓扑结构)的物理服务器会组成一个集群(Cluster),要求配置相同的主要原因是因为需要支持虚拟机动态迁移。通常一些集群还会组成更大规模的区域(Zone)。某些IaaS软件,还能支持由若干Zone组成的地区(Region)。集群、区域的划分会体现在对网络和存储不同配置。例如一个集群可以共享相同的网络主存储,以支持虚拟机的动态迁移。一个区域可以共享相同的网络备份存储,可用来存放共享的虚拟机镜像文件。


虚拟机和存储服务是IaaS提供服务的最基本单元。通常存储服务是和虚拟机紧密相关的,这是因为用户主要是通过虚拟机来访问IaaS的存储资源(这点和PaaSSaaS不同)。IaaS依赖于软硬件虚拟化技术(现在主要是硬件虚拟化)在一个服务器上创建多个VM,所以虚拟化(Virtualization)常被称为是云计算的基础。所以如果要了解IaaS,我们就不得不认识一下虚拟化技术。虚拟化技术上也并不神秘,它通过时空复用的技术让资源可以被划分和共享。



IaaS的基本资源的虚拟化



CPU虚拟化

深度:资源虚拟化


首先我们来看一下CPU是如何虚拟化的。对于当代的CPU来说,它具有极高的计算调度能力,它能在一秒钟内可以运算上千万条指令。另外,由于客户的虚拟机往往运行的并不是计算密集型的应用程序(如浏览网页,访问数据库,存储文件等等),换句话说它的程序功能可以在很短时间(毫秒级别)内计算完成,当计算完成或等待其他网络、硬盘等IO操作时,如果没有其他计算任务,CPU便会进入空闲(IDLE)状态。经过统计,通常情况我们的CPU繁忙的时间很短,例如CPU95%的时间都处于空闲状态。如果我们让CPU在等待的时候,也能给别人提供服务,便可以让资源利用率最大化,所以CPU的虚拟化技术的本质就是以分时复用的方式,让所有的虚拟机能够共享CPU的计算能力。因为CPU运算的速度非常快,而且这种分时的单元非常的小,以至于用户完全不会察觉到自己的虚拟机是在CPU上轮流运算的,所以在宏观的世界里,这些虚拟机看起来就是在同时工作的。当然IaaS软件还需要通过一些手段保证每个虚拟机申请的CPU可以分到足够的时间片。这是一个比较简单的便于理解的对于CPU虚拟化的描述,但是CPU虚拟化内幕是非常精巧和复杂的,为了实现高效准确的CPU虚拟化能力,世界上顶尖的软硬件工程师已经为此付出超过十年的努力。



内存虚拟化


深度:资源虚拟化



存储虚拟化

深度:资源虚拟化



网络虚拟化




如果物理机去上只有一个物理网卡,那么不同的虚拟机的网络都是通过同一个网卡连接出去,这是会导致网络安全问题的。例如一个虚拟机可以监听整个网络上的所有数据包,并分析截获感兴趣的别的虚拟机的网络数据。为了解决这个问题,计算机网络提供了一种叫做VLan的技术。通过对网络编辑指定的VLan编号,一个物理网卡可以拓展多达4095个独立连接能力。例如,如果原本的物理网卡为eth0VLan1的网卡设备在操作系统就变成eth0.1VLan1000的网卡设备就是eth0.1000eth0.1eth0.1000之间都无法看到对方的网络包。有了VLan的支持,在相同物理机上的虚拟机就可以分配不同的VLan编号的网络设备,从而进行了网络隔离。



至此,IaaS软件的基本概念和资源虚拟化的部分就介绍完毕了,为了简化,我们并没有涉及资源虚拟化的细节和IaaS是如何管理和分配这些资源的,从了解基本概念的角度来说已经足够。不过要成为IaaS软件研发工程师,还需要熟悉和了解各种资源是如何虚拟化的,并且掌握如何管理和分配这些资源(池化),并用自动化的方法把它们串联起来。为了更好的分配这些资源,IaaS软件通常会构建很多内部的逻辑概念。例如对于存储资源,IaaS会分成主存储和备份存储。由于存储类型的不同,IaaS软件需要支持不同的存储方式,例如NFSiSCSI或者对象存储。由于虚拟化管理程序可能是异构的,例如(KVMvs. VSphere),IaaS软件往往还需要支持几种不同的虚拟化解决方案。每一种虚拟化管理程序的应用程序接口是不同的,IaaS需要能够分别并暴露给用户统一的接口。此外由于管理着成百上千的物理服务器,服务器难免会出现各种问题(例如掉电,电子元件损坏等等),IaaS软件都需要针对不同的错误进行自我隔离、容错和修复。以上这些都是IaaS软件工程师需要处理和解决的常见问题。


-------------------------------------------------------------------------------------

zstack项目介绍:

ZStack是下一代开源的云计算IaaS(基础架构即服务)软件。它主要面向的是未来的智能数据中心, 通过提供全完善的APIs来管理包括计算、存储和网络在内的数据中心的各种资源。 用户可以基于ZStack构建自己的智能数据中心,也可以在稳定的ZStack之上搭建灵活的云应用场景, 例如VDI(虚拟桌面基础架构),PaaS(平台即服务),SaaS(软件即服务)等等。 只需要5分钟,用户就可以在一台Linux机器上轻松完成下载和安装ZStack云环境。 跟着ZStack的用户教程,只需要30分钟就可以部署一个简单的云计算环境,完成云主机的创建。


(长按关注ztack项目订阅号)



推荐阅读
  • 流处理中的计数挑战与解决方案
    本文探讨了在流处理中进行计数的各种技术和挑战,并基于作者在2016年圣何塞举行的Hadoop World大会上的演讲进行了深入分析。文章不仅介绍了传统批处理和Lambda架构的局限性,还详细探讨了流处理架构的优势及其在现代大数据应用中的重要作用。 ... [详细]
  • Maven + Spring + MyBatis + MySQL 环境搭建与实例解析
    本文详细介绍如何使用MySQL数据库进行环境搭建,包括创建数据库表并插入示例数据。随后,逐步指导如何配置Maven项目,整合Spring框架与MyBatis,实现高效的数据访问。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
  • MySQL InnoDB 存储引擎索引机制详解
    本文深入探讨了MySQL InnoDB存储引擎中的索引技术,包括索引的基本概念、数据结构与算法、B+树的特性及其在数据库中的应用,以及索引优化策略。 ... [详细]
  • CentOS下ProFTPD的安装与配置指南
    本文详细介绍在CentOS操作系统上安装和配置ProFTPD服务的方法,包括基本配置、安全设置及高级功能的启用。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
  • 本文探讨了如何通过Service Locator模式来简化和优化在B/S架构中的服务命名访问,特别是对于需要频繁访问的服务,如JNDI和XMLNS。该模式通过缓存机制减少了重复查找的成本,并提供了对多种服务的统一访问接口。 ... [详细]
  • 本文详细介绍了在Linux操作系统上安装和部署MySQL数据库的过程,包括必要的环境准备、安装步骤、配置优化及安全设置等内容。 ... [详细]
  • 本文记录了在Windows 8.1系统环境下,使用IIS 8.5和Visual Studio 2013部署Orchard 1.7.2过程中遇到的问题及解决方案,包括503服务不可用错误和web.config配置错误。 ... [详细]
  • java类名的作用_java下Class.forName的作用是什么,为什么要使用它?
    湖上湖返回与带有给定字符串名的类或接口相关联的Class对象。调用此方法等效于:Class.forName(className,true,currentLoader) ... [详细]
  • flea,frame,db,使用,之 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 如何高效解决Android应用ANR问题?
    本文介绍了ANR(应用程序无响应)的基本概念、常见原因及其解决方案,并提供了实用的工具和技巧帮助开发者快速定位和解决ANR问题,提高应用的用户体验。 ... [详细]
  • 本文详细记录了腾讯ABS云平台的一次前端开发岗位面试经历,包括面试过程中遇到的JavaScript相关问题、Vue.js等框架的深入探讨以及算法挑战等内容。 ... [详细]
author-avatar
烧蕉_233
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有