云技术(Cloud technology)基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。
------百度百科
这里面最关键的点是资源池(通过虚拟化技术实现),按需提供(隐含动态扩容,客户会因为业务扩展而扩展容量)。
什么是虚拟化虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。
------百度百科
简略来说就是通过虚拟化技术来实现硬件资源的虚拟化(池化)管理。
那么,我们的硬件资源包含哪些资源呢?如下图,可以看到有服务器,存储和网络资源。
那我们就需要对于服务器,存储和网络资源进行虚拟化。下图可以看到虚拟化的技术也分成这3类,通过xen/vmware实现虚拟服务器,通过IBM的XIV或NAS实现存储的虚拟化。通过单根I/O 虚拟化技术等实现网络虚拟化。
资源类型展开
物理服务器资源
物理服务器包含本地硬盘,CPU,RAM,网卡资源。通过vmware/xen/kvm在本地启动多个虚拟机而实现资源的细分粒度化。
存储资源
专用的存储设备,物理服务器本地硬盘。
存储虚拟化可在三个层次上实现,分别是:基于主机的虚拟化、基于存储设备的虚拟化、基于网络的虚拟化。
网络资源
网络资源包含HUB,路由器,交换机,防火墙,网卡设备等。
虚拟化实现技术讲解
计算虚拟化
服务器虚拟化也是目前谈得最多的所谓计算虚拟化。如下我以KVM作为例子来进行讲解。
KVM通过虚拟机实现网络,存储,内存,CPU的虚拟化。
从用户角度来说,其就像拥有一台物理服务器。
通过启动时指定CPU,和RAM实现CPU,内存的虚拟化。通过挂载磁盘(也可以挂载远程磁盘),实现磁盘虚拟化。通过虚拟网卡,linux bridge的方式实现网络虚拟化。
问题:
1) CPU需要进行扩容怎么办?扩容是否有上限?
这个问题,困扰了很久。因为本地物理机可能已经预先把所有的CPU cores分配给了几台虚拟机,如果要扩容,难道要占用其它的虚拟机的CPU资源?
是的,vCPU是可以被KVM进行调度的,KVM可以根据资源调度把vCPU调度到其它GuestOS.
那如果扩容的vCPU超出了本地物理机的CPU cores的上限怎么办?
这可以采用虚拟机热迁移的方式,实现本地虚拟机快速恢复到其它硬件平台上。如此实现扩容。
2) RAM需要扩容怎么办?
内存的虚拟化是通过内存映射实现的。
Guest机器所用的内存,可以大于物理机的内存(专业术语叫:内存超配)。可以通过内存气泡技术,来进行内存回收,把内存释放后给内存使用率高的机器使用。
3) 磁盘需要扩容怎么办?
如果是本地磁盘,可以增加新的磁盘设备挂载。或者增加磁盘到LVM。
4) 需要增加一个网卡设备怎么办?
网卡设备的虚拟化,有很多种实现技术。你需要明白的就是虚拟网卡并不需要与实际物理网卡设备相一致,它是可以远多于物理网卡个数的。如此,增加一个虚拟网卡设备也就是很容易的事情了。
存储虚拟化实现技术讲解
需要注意的是与上面所述的KVM的虚拟化存储分开来。KVM存储虚拟化指的是通过KVM来管理存储设备。而这里的存储虚拟化指的是如何实现存储的虚拟池化。
特别需要指出的是,网络存储设备通常来说时延都比本地磁盘大得多。
而数据库软件对于磁盘IO的性能要求特别的高。所以,这就是为何云RDS,一般都是使用本地磁盘(当然,一般云产商都提供了几种不同性能的磁盘供选择)。
存储虚拟化的原理
裸设备+逻辑卷虚拟化结构
网络虚拟化实现技术讲解
在我们的印象中,网络就是由各种网络设备(如交换机、路由器)相连组成的一个网状结构,世界上的任何两个人都可以通过网络建立起连接。
网络虚拟化和计算、存储的虚拟化类似,总结起来也是“一个虚拟多个,多个虚拟一个”。网络虚拟化包括了网卡的虚拟化、链路层虚拟化、网络层虚拟化。通过SR-IOV技术可以实现一个物理网卡虚拟多个网卡,还可以通过tap/veth等纯软件的方式实现网卡虚拟化。链路层的虚拟化主要通过虚拟交换机,实现网络包的VLAN设置、隧道建立等。网络层虚拟化包括VPN、overlay网络等,创建一套隔离的三层网络。
传统网络架构#
在传统网络环境中,一台物理主机包含一个或多个网卡(NIC),要实现与其他物理主机之间的通信,需要通过自身的 NIC 连接到外部的网络设施,如交换机上,如下图所示。
这种架构下,为了对应用进行隔离,往往是将一个应用部署在一台物理设备上,这样会存在两个问题
1)是某些应用大部分情况可能处于空闲状态,
2)是当应用增多的时候,只能通过增加物理设备来解决扩展性问题。不管怎么样,这种架构都会对物理资源造成极大的浪费。
虚拟化网络架构#
为了解决这个问题,可以借助虚拟化技术对一台物理资源进行抽象,将一张物理网卡虚拟成多张虚拟网卡(vNIC),通过虚拟机来隔离不同的应用。
这样对于上面的问题
针对问题 1),可以利用虚拟化层 Hypervisor 的调度技术,将资源从空闲的应用上调度到繁忙的应用上,达到资源的合理利用;
针对问题 2),可以根据物理设备的资源使用情况进行横向扩容,除非设备资源已经用尽,否则没有必要新增设备。这种架构如下所示。
其中虚拟机与虚拟机之间的通信,由虚拟交换机完成,虚拟网卡和虚拟交换机之间的链路也是虚拟的链路,整个主机内部构成了一个虚拟的网络,如果虚拟机之间涉及到三层的网络包转发,则又由另外一个角色——虚拟路由器来完成。
一般,这一整套虚拟网络的模块都可以独立出去,由第三方来完成,如其中比较出名的一个解决方案就是 Open vSwitch(OVS)。
OVS 的优势在于它基于 SDN 的设计原则,方便虚拟机集群的控制与管理,另外就是它分布式的特性,可以「透明」地实现跨主机之间的虚拟机通信,如下是跨主机启用 OVS 通信的图示。
总结下来,网络虚拟化主要解决的是虚拟机构成的网络通信问题,完成的是各种网络设备的虚拟化,如网卡、交换设备、路由设备等。
总结其实关于云上的虚拟化技术,当然也包含整套云的实现技术本身就是一个相当复杂的工程。这也是为何市面上只存在屈指可数的少数几家云产商。
其实,我也根本没有弄清楚很多具体细节。我的目的只是在头脑中建立关于底层实现的一些概念,如此我使用云产品的时候就会更清晰,更轻车熟路了。
总之,人的时间与精力是有限的。需要根据目前工作的重心进行适当调配。