随着云服务器技术和厂商的迅猛发展,越来越多的企业选择将业务系统部署在云服务器上,通常他们会选择成熟的厂商比如亚马逊,阿里云,腾讯云等.谈到云服务器,就避免不了涉及IaaS(Infratructure
as a service)技术.
IaaS
(Infrastructure as aService)基础架构即服务,是云计算的一种类型,它是PaaS(Platformas a Service平台即服务)和SaaS(softwareasaservice软件即服务)的基础。IaaS软件通常用于管理大规模的物理硬件(IaaS可以管理小到一台物理主机,多到成千上万的物理服务器)并把客户所需的软硬件资源(CPU,内存,网络,存储等)以“主机”的形式提供.
IaaS的根本就是将计算资源进行池化,这里的计算单元包括但不限于cpu,内存,网络.这些资源被逻辑切割成更小的可管理单元,然后根据客户需要被灵活的组装成可运作的主机,很明显这里的主机并不是一台真的物理主机,而是虚拟机.这个虚拟机通常都会包含一个可以连上网络的操作系统,用户可以通过网络连接上虚拟主机并且能灵活的进行资源配置以及按照配置及时间来付费.而用户操作这台虚拟主机就像操作一台物理服务器一样,可以在上面安装软件,搭建数据库以及应用服务器,部署web应用.由于这些提供给用户的功能都是最基础的计算功能,所以这种服务形式也被称作基础架构及服务(IaaS)
上面我们提到IaaS的根本是将资源进行池化,这些资源我们把它分为三个大类:计算资源(CPU),存储资源(内存和存储),网络资源;下面我们详细地分析这三类资源的池化,也可以称为虚拟化.
CPU虚拟化
对于CPU来说,它具有极高的计算能力,可以在一秒钟内可以运算上千万条指令。另外,由于客户的虚拟机往往运行的并不是计算密集型的应用程序(如浏览网页,访问数据库,存储文件等等),换句话说它的程序功能可以在很短时间(毫秒级别)内计算完成,当计算完成或等待其他网络、硬盘等IO操作时,如果没有其他计算任务,CPU便会进入空闲(IDLE)状态。经过统计,通常情况我们的CPU繁忙的时间很短,例如CPU有95%的时间都处于空闲状态。如果我们让CPU在等待的时候,也能给别人提供服务,便可以让资源利用率最大化,所以CPU的虚拟化技术的本质就是以分时复用的方式,让所有的虚拟机能够共享CPU的计算能力。因为CPU运算的速度非常快,而且这种分时的单元非常的小,以至于用户完全不会察觉到自己的虚拟机是在CPU上轮流运算的,所以在宏观的世界里,这些虚拟机看起来就是在同时工作的。当然IaaS软件还需要通过一些手段保证每个虚拟机申请的CPU可以分到足够的时间片
内存虚拟化
我们知道,物理内存在计算机上通常是一段以零地址开始以全部内存空间为截止地址的空间。例如4个8GB内存条组成的32GB内存,它在物理服务器上看起来就是0~32GB的空间。CPU在访问内存时的,只要提供内存地址,就可以访问到地址内的数据。对于每个虚拟机来说,不论给它分配1G的内存,还是分配4GB的内存,它通常都认为自己的内存是从零开始的。但实际上,它们都会被映射到物理机上的不同地址段,有的可能是从2G开始的,有的可能是从4G开始的。而且不仅仅是内存的起始地址在物理机上不同,甚至虚拟机的内存在物理机内存上的分布也不是连续的。他们可能会被映射到不同的内存空间。虚拟机管理程序(Hypervisor)负责维护虚拟机内存在物理内存上的映射。当虚拟机访问一段自己的内存空间时,会被映射到真实的物理地址。这种映射对虚拟机的操作系统来说是完全透明的。因为一台物理机上运行了多个虚拟机,所以虚拟机管理程序需要保证,不论在任何时候,来自虚拟机A的访问内存请求不能到达虚拟机B的内存空间里面。这就是所谓的资源隔离。
存储虚拟化
IaaS虚拟存储资源的方法和虚拟内存类似,主要也是通过把一个大的存储空间划分成多个小的存储空间分配给虚拟机使用。但是与内存虚拟化不同,存储虚拟化通常并不是直接发生在硬盘的寻址层面,也就是不会在具体访问硬盘驱动的时候才转化访问的地址。存储虚拟化是以文件为单位来进行资源的存储和隔离的。这个文件不是虚拟机里看到每个具体文件,而是在物理机上用于模拟虚拟机硬盘的一个超大文件,对硬盘地址的访问就是对文件的某个偏移量的访问。这点看似复杂,其实更容易理解。例如一个大小为20GB的独立文件,可以被看成是一个20GB的硬盘空间,当需要访问0地址的时候,也就是访问文件的开头,当需要访问3G这个地址的时候,也就是访问文件的3G偏移量的地方。使用这种灵活分配的方法,理论上可以让一个2TB的物理硬盘,化身身成接近100个20GB或者接近20个100GB的硬盘。需要说明的是,看似一个完整的20GB文件,它在硬盘上可能并不是连续存放的,这完全取决于虚拟机管理程序的文件系统是如何分配硬盘空间的。当然虚拟机本身并不会意识到这点,具体访问硬盘的时候,会由虚拟机管理程序的文件系统来保证访问的准确性。
网络虚拟化
通常用户通常熟悉的计算机网络概念包含,网卡、IP地址,主机名等等。例如在一台物理机上,可能有一个或几个网卡,每个网卡在工作的时候会分配不同的IP地址,对外可能有一个或多个网络主机名。网络连接速度取决于网卡的能力以及网络接入(例如交换机)的能力。在网络上通过IP地址或者网络主机名可以连接不同的物理主机,所以在一个可以路由的网段内IP地址和主机名必须是唯一的。在每个网卡上,还有一个MAC地址,用来标识在相同网段上不同的网卡。用户通常不会注意MAC地址,因为它并不需要用户手动配置。那么什么是网络虚拟化呢?假如原本的物理机只有一个网卡,那么它有一个MAC地址,并且可以分配一个IP地址,其他机器就可以通过IP地址访问这个物理主机。当创建N个虚拟机后,每个虚拟机都需要有独立的网络配置,以便他们可以像物理机一样的处理各种网络连接。但是这个时候物理机上依然只有一个网卡,N个虚拟机通过这一个物理网卡都能进行顺畅的网络连接的过程即为网络虚拟化。
虚拟机上的网络概念和物理机一样。在一个物理机上创建多个虚拟机,就是要创建多份虚拟机的虚拟网卡,并且保证它们能够正确的联通到网络上。这是如何做到的呢?这主要是通过虚拟机管理程序在虚拟层面创建了一个虚拟的网桥(Bridge)。这个网桥就和我们我们看到的交换机一样,上面有很多“接口”可以连接不同的虚拟网卡,当然物理机的真实网卡也需要连在这个网桥上,并且设置了一种特殊的混杂模式(可以允许不论该物理网卡是否为网络包的目的地址都能通过该网卡接收或者发送)。在同一个网桥上的不同虚拟机之间进行的网络通信,只会在本网桥内发生。只有当虚拟机的网络通信的对象不在本机(比如物联网上的其他主机)上的时候,他们就会通过物理机的网卡向外进行传输。由于物理机的网卡带宽能力是固定的,所以在一个网桥上的虚拟网卡也是分时共享相同的网络带宽(如果网络包的交换之发生在本网桥内,速度不会受到物理网卡的影响)。虽然他们在自己传输的时间段内是独占全部带宽(例如1Gbps),但是同时会导致其他虚拟网卡暂时无法传输数据,以至于在宏观范围(秒)来看,虚拟机是没有办法在共享网络的时候占用全部带宽的。如果假设有4个虚拟机都在进行大规模的网络操作(例如大文件的下载和上传),那么理论上他们的实际连接速度最多就只能达到250Mbps。由于网络速度对云计算中虚拟机的能力非常重要,芯片公司也在不断推出各种针对网络连接的硬件虚拟化解决方案(例如SR-IOV,VMDq等等)。
如果物理机去上只有一个物理网卡,那么不同的虚拟机的网络都是通过同一个网卡连接出去,这是会导致网络安全问题的。例如一个虚拟机可以监听整个网络上的所有数据包,并分析截获感兴趣的别的虚拟机的网络数据。为了解决这个问题,计算机网络提供了一种叫做VLan的技术。通过对网络编辑指定的VLan编号,一个物理网卡可以拓展多达4095个独立连接能力。例如,如果原本的物理网卡为eth0,VLan1的网卡设备在操作系统就变成eth0.1,VLan1000的网卡设备就是eth0.1000,eth0.1和eth0.1000之间都无法看到对方的网络包。有了VLan的支持,在相同物理机上的虚拟机就可以分配不同的VLan编号的网络设备,从而进行了网络隔离。
有了资源的虚拟化,并且提供将虚拟化资源灵活管理的能力,
IaaS厂商便可以采购成千上万台物理服务器,并且通过虚拟化技术将这些资源重新拆分,然后按需租赁给客户使用.在IaaS的基础上,
PaaS和SaaS产品也如雨后春笋般出现,接下来的文章我们将对PaaS和SaaS技术做深入探讨.
网友评论