信息科技发展,将计算机资源集中起来放在网络上共享是大势所趋,逐渐发展成现在大家都知道的一个热词“云计算”。云计算理解并不困难,但是其实现方式,就非常复杂了——特别是对于需要设计一个超大容量、超高并发(同时访问)、超快速度、超强安全的云计算系统,才能满足业务平稳运行要求的系统。

第一层次:是最底层的硬件资源,主要包括CPU(计算资源),硬盘(存储资源),还有网卡(网络资源)等。

    第二层次:要高级一些,不打算直接使用CPU、硬盘、网卡,却希望把操作系统(例如Windows、Linux)装好,把数据库软件装好,再来使用。

    第三层次:更高级一些,不但要装好操作系统这些基本的,还要把具体的应用软件装好,例如FTP服务端软件、在线视频服务端软件等,可以直接使用服务。

这三种层次,就是耳熟能详的IaaS、Paas、SaaS:

: Infrastructure-as-a-Service(基础设施即服务),Infrastructure-as-a-service。国内典型代表是阿里云,国际上的是IWS。

    PaaS: Platform-as-a-Service(平台即服务),Platform-as-a-service。国内典型代表是新浪云,docker也是属于PaaS。

    SaaS: Software-as-a-Service(软件即服务),office 365.github的Codespaces。

  目前主流的云计算服务提供商,说白了,都是为大家提供以上三个层次的云资源。你想要什么,它们就提供什么。你想要多少,它们就提供多少。那它们是如何工作的呢?人工安排?——如果你要八核CPU、16GB内存、500GB硬盘的服务器,阿里临时安排工程师帮你组装?如果你要装CentOS 7.8,MySQL 5.7.31,阿里也临时让工程师帮你安装配置?

  以上方式显然是不可能的,耗不起人力,也等不起时间。于是,就有了各种软件和平台,负责对资源进行快速调用和集中管理。这其中就利用到了虚拟化技术。

可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。

  那究竟什么是虚拟化呢?  

如果要对物理资源进行管理,第一步,就是“虚拟化”。虚拟化是云计算的基础。简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,VirtualMachine)。从表面来看,这些虚拟机都是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源。通过模拟计算机的硬件,来实现在同一台计算机上同时运行不同的操作系统的技术,常用的vmwore、openstack、kvm都是使用的虚拟化技术:

    物理机,通常称为“宿主机(Host)”

    虚拟机,则称为“客户机(Guest)”。

Hypervisor 。

  Hypervisor也叫做VMM(Virtual Machine Monitor,虚拟机监视器)。它不是一款具体的软件,而是一类软件的统称。Hypervisor是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如:cpu,硬盘,内存,声卡等资源。然后我们可以通过在虚拟化出来的资源之上安装操作系统,也就是所谓的虚拟机。

Hyperviosr我们可以创建不同的虚拟机,并且每个虚拟机都是分离、独立的系统。这样操作,我们就可以在一台硬件服务器和本地操作系统之上虚拟化出很多服务器,用来部署应用程序。一台硬件服务器可以虚拟化多台服务器,让计算机资源得以充分利用。

  Hypervisor分为两大类:

hypervisor直接运行在物理机之上。虚拟机运行在hypervisor之上。

Linux或Windows),然后在正常操作系统上安装hypervisor,生成和管理虚拟机。像VMware、KVM、Xen、Virtual Box,都属于Hypervisor。

  什么是容器?

  在Docker容器及其常用命令 提及了容器并设计了专属的命令对其进行操作。那什么是容器?它是如何诞生的呢?

使用虚拟化一段时间后,发现它确实能解决一些资源不足的问题,同时也可能造成更多的资源浪费。比如以下业务场景:

    1、不同的用户,有时候只是希望运行各自的一些简单程序,跑一个小进程。为了不相互影响,需要建立虚拟机。如果建虚拟机,显然浪费就会有点大,而且操作也比较复杂,花费时间也会比较长。

    2、生成需要,迁移相关的服务程序,就要迁移整个虚拟机。显然,迁移过程也会很复杂。

  所以,并不是安装的虚拟机越多越好,有时候反而消耗的资源对应更多。同时环境兼容性问题,开发时的环境运行正常,部署到虚拟机环境进行测试则有可能发生错误。

更灵活快速一些呢?于是引入了“容器(Container)”。

另一种虚拟化技术——容器化技术——中运用的术语,其本质就是在隔离环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,IP地址,主机名等。其目的和虚拟机一样,都是为了创造“隔离环境”,同时又与虚拟机有显著不同:

虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。

容器是将代码和环境打包在一起的一个集合,而虚拟机是在物理层面上分离出来一个操作系统。

    3、多个容器可以运行在同一台硬件服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台服务器上,但每个虚拟机都需要有一个完整的操作系统。

  虚拟化技术可以进行如下分类:

CPU虚拟化:虚拟化在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。简单说来,CPU的虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。

    网络虚拟化:网络虚拟化是目前业界关于虚拟化细分领域界定最不明确,存在争议较多的一个概念。VPN 对网络连接的概念进行了抽象,允许远程用户访问组织的内部网络,就像物理上连接到该网络一样。网络虚拟化可以帮助保护 IT环境,防止来自 Internet 的威胁,同时使用户能够快速安全的访问应用程序和数据。    

与网络虚拟化不同,服务器虚拟化却是虚拟化技术最早细分出来的子领域。这个产生于20世纪60年代的技术日益显示出其重要价值。由于服务器虚拟化发展时间长,应用广泛,所以很多时候人们几乎把服务器虚拟化等同于虚拟化。

    存储虚拟化:随着信息业务的不断运行和发展,存储系统网络平台已经成为一个核心平台,大量高价值数据积淀下来,围绕这些数据的应用对平台的要求也越来越高,不光是在存储容量上,还包括数据访问性能、数据传输性能、数据管理能力、存储扩展能力等等多个方面。可以说,存储网络平台的综合性能的优劣,将直接影响到整个系统的正常运行。因为这个原因,虚拟化技术又一子领域——虚拟存储技术,应运而生。

    应用虚拟化:前面几种虚拟化技术,主要还专注于对硬件平台资源的虚拟优化分配,随着IT应用的日益广泛,应用虚拟化作为虚拟化家族的明日之星登上了历史舞台。当今的机构现在将应用虚拟化当作是业务上的一个必由之路,而不是一个IT决策。据统计,全世界目前至少有超过18万个机构在利用应用虚拟化技术进行集中IT管理、加强安全性和减少总体成本。