01 虚拟化和云计算的区别

一.云计算(CLOUD COMPUTING)概述

1.什么是云计算

云计算是一种能够跨网络、按需提供基础架构、服务、平台和应用的交付方式,正在快速取代原本通过硬布线连接进行资源共享的方式。

  云计算是指在云中运行工作负载,而云是一种能够抽象、汇集和共享整个网络中的可扩展资源的IT环境。云计算和云本身都不属于技术的范畴。
    (1)云计算是指在云中运行工作负载的功能;
    (2)而云是一种环境,是运行应用的地方;
    (3)技术则是指用于构建和使用云的软件和硬件;
    
  云计算主要分为4种类型:私有云、公共云、混合云和多云。同时,云计算服务主要有3种:基础架构即服务(IaaS)、平台即服务(PaaS)和软件即服务(SaaS)。    
  
  云服务是指由第三方提供商托管的基础架构、平台或软件,可通过互联网提供给用户。  怎么选择云类型或云服务,取决于您的实际需求。世界上没有一模一样的两个云(即使它们的类型相同),也没有两个云服务解决的是同一个问题。但是,通过了解它们的相似之处,您可以更加清楚每种云计算类型和云服务可能会如何影响到您的业务。  
  
  推荐阅读:
    https://www.redhat.com/zh/topics/cloud
    https://www.redhat.com/zh/topics/cloud-computing/what-are-cloud-services
    https://www.redhat.com/zh/topics/cloud-computing/public-cloud-vs-private-cloud-and-hybrid-cloud
    https://www.redhat.com/zh/topics/cloud-computing/what-is-iaas
    https://www.redhat.com/zh/topics/cloud-computing/what-is-paas
    https://www.redhat.com/zh/topics/cloud-computing/what-is-saas
    https://www.redhat.com/zh/topics/cloud-native-apps/what-is-faas
    https://www.redhat.com/zh/topics/cloud-computing/what-is-caas
    https://www.redhat.com/zh/topics/cloud-native-apps/what-is-serverless

2.云计算的类型

	公共云:
    一种利用非最终用户所有的资源创建的云环境,可重新分发给其他租户。全球规模最大的公共云提供商如:阿里云、Amazon Web Services(AWS)、Google云、IBM Cloud及Microsoft Azure等等。
    公共云是一个虚拟资源池,可自动部署并通过自助服务界面在多个客户端间进行分配,其中的虚拟资源来自归第三方公司所有和管理的硬件设备。当工作负载出现意外需求波动时,可直接通过公共云进行横向扩展。
    如今,公共云通常不会作为独立的基础架构解决方案来部署,而是被作为异构混合环境的一部分部署,这样即可以提高安全性和性能,降低成本,还可以改进基础架构、服务和应用的可用性。
    
  私有云:
    可广义地定义为:一种专为最终用户而创建,而且通常位于用户的防火墙内(有时也是内部部署)的云环境。
    私有云是一种专为最终用户而创建,而且通常位于用户的防火墙内的云环境。尽管传统上私有云在内部运行,但现在许多企业构建的私有云位于供应商租赁的外部数据中心(IDC)内。
    如果底层 IT 基础架构归某个拥有完全独立访问权限的客户专有,那这种云就是私有云。

  混合云:
    一种具有一定程度的工作负载可移植性以及编排和管理能力的多云环境。
    混合云是一种IT架构,在两个或更多环境中进行某种程度的工作负载移植、编排和管理。混合云中的环境因企业而异,可能包括:
      (1)至少1个私有云与至少1个公共云;
      (2)含2个或多个相互连接的私有云;
      (3)含2个或多个公共云;
      (4)连接至少一个公共云或私有云的裸机或虚拟环境;
    这些不同的要求源于云计算的早期阶段,那时,公共云与私有云之间的差异可通过位置和所有权明确区分。但是,现在的云类型更加复杂,因为位置和所有权比较抽象。这是因为很多云服务商为了节省成本,并不会自建机房,而是托管到IDC。

  多云:
    一个含有多个云环境(公共云或私有云)的IT系统,云与云之间可能联网也可能不联网。
    多云是一种云架构,由多个云供应商提供的多个云服务组合而成,既可以是公共云,也可以是私有云。

  参考链接:
    https://www.redhat.com/zh/topics/cloud-computing/what-is-public-cloud
    https://www.redhat.com/zh/topics/cloud-computing/what-is-private-cloud
    https://www.redhat.com/zh/topics/cloud-computing/what-is-hybrid-cloud
    https://www.redhat.com/zh/topics/cloud-computing/what-is-multicloud

3.云计算服务类型

在没有云计算服务之前,如果您是运维工程师,或者公司要成立信息化部门,需要您管理以下几种环境:
    网络(Networking):
      相互连接的网络组件可实现内部和外部系统之间的网络操作、管理和通信。网络由互联网连接、网络支持、防火墙与安全防护,以及路由器、交换机和电缆等硬件组成。
    存储(Storage):
      解决公司数据的存储,比如是否考虑使用NAS类的存储设备。
    服务器(Servers):
      服务器的选型,包括品牌,硬件配置等。
    虚拟化技术(Virtualization):
      为了节省成本,您可能考虑使用虚拟化技术,将一台服务器虚拟出多台服务器来使用。
    操作系统(Operating System):
      需要您选择合适的操作系统,比如目前主流的Unix,Linux,Windows三大派系的选型。
    中间件(Middleware):
      需要您考虑是否要使用中间件服务,比如数据库服务,消息队列服务等。
    运行环境(Runtime):
      需要考虑是否要部署好相应的运行环境,比如Java,Python,Golang,Perl,PHP编程语言开发的运行时环境可能各有不同,这些都需要您来负责处理。
    数据(Data):
      要考虑数据的处理,比如随着时间的推移,本地磁盘空间使用快占满时应该及时处理这些数据的存储,处理,以及迁移等问题。
    应用程序(Applications):
      这就是针对应用程序的维护,比如大数据平台运维,Web集群运维,数据库运维,容器运维等。

  综上所述,发现如果让我们自己来维护以上所有内容,可能会耗费相当多的人力,财力,物力。为了给企业节省上面提到的成本,衍生了云计算服务类型,大致分为以下三种:
    基础设施即服务(英文名称为:"Infrastructure-as-a-Service",下面简称"IaaS"):
      IaaS表示将由云服务提供商通过互联网连接为您管理基础架构,包括实际的服务器、网络、虚拟化和数据存储。用户可通过 API 或控制面板进行访问,并且基本上是租用基础架构。
      诸如操作系统、应用和中间件等内容由用户管理,而提供商则负责硬件、网络、硬盘驱动器、数据存储和服务器,并负责处理中断、维修及硬件问题。这是云存储提供商的典型部署模式。
    平台即服务(英文名称为:"Platform-as-a-Service",下面简称"PaaS"):
      PaaS表示硬件和应用软件平台将由外部云服务提供商来提供和管理,而用户将负责平台上运行的应用以及应用所依赖的数据。
      PaaS主要面向开发人员和编程人员,旨在为用户提供一个共享的云平台,用于进行应用的开发和管理(DevOps 的一个重要组成部分),而无需构建和维护通常与该流程相关联的基础架构。
    软件即服务(英文名称为:"Software-as-a-Service",下面简称"SaaS"):
      SaaS是将云服务提供商管理的软件应用交付给用户的服务。通常,SaaS应用是一些用户可通过网页浏览器访问的Web应用或移动应用。
      该服务会为用户完成软件更新、错误修复及其他常规软件维护工作,而用户将通过控制面板或 API 连接至云应用。此外,SaaS还消除了在每个用户计算机上本地安装应用的必要性,从而使群组或团队可使用更多方法来访问软件。

  参考链接:
    https://www.redhat.com/zh/topics/cloud-computing/what-is-it-infrastructure
    https://www.redhat.com/zh/topics/cloud-computing/what-is-iaas
    https://www.redhat.com/zh/topics/cloud-computing/what-is-paas
    https://www.redhat.com/zh/topics/cloud-computing/what-is-saas

4.CaaS与FaaS

	容器即服务(英文名称为:"Container-as-a-Service",下面简称"CaaS"):
    CaaS是一种云服务计算的模型,它允许用户使用内部数据中心或云,通过基于容器的抽象来部署和管理应用。
    提供商会提供在其上部署和管理容器的框架或编排平台,而正是通过此编排,才得以实现关键 IT 功能的自动化。
    对于要开发更安全且可扩展的容器化应用的开发人员而言,CaaS 尤为有用。用户只需购买他们想要的资源(调度功能、负载平衡等),从而节省资金并提高效率。
    容器可以创建一致的环境,以便快速开发和交付可在任何地方运行的云原生应用。 
    在云服务范畴内,CaaS被认为是基础架构即服务(IaaS)的一种子集,介于IaaS和平台即服务(PaaS)之间。

  "功能即服务"(英文名称为:"Function-as-a-Service",下面简称"FaaS"):
    FaaS是一种在无状态容器中运行的事件驱动型计算执行模型,这些功能将利用服务来管理服务器端逻辑和状态。 
    它允许开发人员以功能的形式来构建、运行和管理这些应用包,无需维护自己的基础架构。
    FaaS是一种实现无服务器计算的方法,藉此开发人员可以编写业务逻辑,然后在完全由平台管理的Linux容器中执行这些业务逻辑。
    需要注意的是,FaaS 基础架构通常是按需计量的,主要通过事件驱动型执行模型进行,因此它会随时待命,但不需要任何服务器进程在后台持续运行(这一点与平台即服务(PaaS)不同)。 

  参考链接:
    https://www.redhat.com/zh/topics/cloud-computing/what-is-caas
    https://www.redhat.com/zh/topics/cloud-native-apps/what-is-faas
    https://www.redhat.com/zh/topics/cloud-native-apps/what-is-serverless

二.虚拟化(Virtualization)概述

1.什么是虚拟化

  借助虚拟化技术,用户能以单个物理硬件系统为基础创建多个模拟环境或专用资源。

  一款名为"Hypervisor"(虚拟机监控程序)的软件可直接连接到硬件,从而将一个系统划分为不同的、单独安全环境,即虚拟机(virtual machine)。

  虚拟机监控程序能够将计算机资源与硬件分离并适当分配资源,这一功能对虚拟机十分重要。虚拟化可以帮助您充分利用先前所做的投资。

2.虚拟机主机("Host")与客户机("Guest")

  配备了虚拟机监控程序(Hypervisor)的物理硬件叫做"主机"(以下统称为"Host"),而使用其资源的虚拟机则被称为虚拟客户机(它也被称为"Guest")。

  这些虚拟客户机将计算资源(如CPU、内存和存储器)视为一组可进行重新分配的资源。操作员可以控制CPU、内存、存储器和其他资源的虚拟实例,以便虚拟客户机能在需要时收到所需资源。

3.虚拟化技术分类-不同抽象层次的虚拟化技术

	在计算机系统中,从底层至高层依次可分为:硬件层、操作系统层、函数库层、应用程序层。在对某层实施虚拟化时,该层和上一层之间的接口不发生变化,而只变化该层的实现方式。

  从使用虚拟资源的Guest的角度来看,虚拟化可发生在上述四层中的任一层。应当注意,在对Guest的某一层进行虚拟化时,并未对Host在哪一层实现它作出要求,这一点是时常引起混淆的地方。

  关于计算机不同抽象层次的虚拟化技术分为以下四类:
    (1)硬件抽象层上的虚拟化
      是指通过虚拟硬件抽象层来实现虚拟机,为客户机操作系统呈现和物理硬件相同或相近的硬件抽象层,又称为指令集级虚拟化,实现在此层的虚拟化粒度是最小的。
    (2)操作系统层上的虚拟化
      是指操作系统的内核可以提供多个互相隔离的用户态实例。
      这些用户态实例(经常被称为容器)对于它的用户来说就像是一台真实的计算机,有自己独立的文件系统、网络、系统设置和库函数等。
    (3)库函数层上的虚拟化
      操作系统通常会通过应用级的库函数提供给应用程序一组服务,例如文件操作服务、时间操作服务等。这些库函数可以隐藏操作系统内部的一些细节,使得应用程序编程更为简单。
      不同的操作系统库函数有着不同的服务接口,例如Linux的服务接口是不同于Windows的。
      库函数层上的虚拟化就是通过虚拟化操作系统的应用级库函数的服务接口,使得应用程序不需要修改,就可以在不同的操作系统中无缝运行,从而提高系统间的互操作性。
      例如,Wine就是在Linux上模拟了Windows的库函数接口,使得一个Windows应用程序能够在Linux上正常运行。
    (4)编程语言层上的虚拟化
      另一大类编程语言层上的虚拟机称为语言级虚拟机,例如JVM(Java Virtual Machine),PVM(Python Virtual Machine)和微软的CLR(Common Language Runtime)。
      这一类虚拟机运行的是进程级的作业,所不同的是这些程序所针对的不是一个硬件上存在的体系结构,而是一个虚拟体系结构。
      这些程序的代码首先被编译为针对其虚拟体系结构的中间代码,再由虚拟机的运行时支持系统翻译为硬件的机器语言进行执行。

  引用链接:
    https://blog.csdn.net/mumuriyue/article/details/85714900#_Toc27374

4.虚拟化技术分类-系统级虚拟化

系统级虚拟化即硬件抽象层上的虚拟化、指令集级虚拟化,是最早被提出和研究的一种虚拟化技术,当前存在多种此种技术的具体实现方案,在介绍它们之前,有必要先了解实现系统级虚拟化可采取的途径。

  在每台虚拟机中都有属于它的虚拟硬件,通过虚拟化层的模拟,虚拟机中的操作系统认为自己仍然是独占一个系统在运行,这个虚拟化层被称为虚拟机监控器(Virtual Machine Monitor,VMM)。

  VMM对物理资源的虚拟可以归结为三个主要任务:处理器虚拟化、内存虚拟化和I/O虚拟化。其中,处理器虚拟化是VMM中最核心的部分,因为访问内存或进行I/O本身就是通过一些指令来实现的。

  可虚拟化架构和不可虚拟化架构
        在系统级虚拟化中,虚拟计算机系统和物理计算机系统可以是两个完全不同ISA(Instruction Set Architecture,指令集架构)的系统,例如,可以在一个x86的物理计算机上运行一个安腾的虚拟计算机。
        但是,不同的ISA使得虚拟机的每一条指令都需要在物理机上模拟执行,从而造成性能上的极大下降。
        总而言之,判断一个架构是否可虚拟化,其核心就在于该结构对敏感指令的支持上。如果一个架构中所有敏感指令都是特权指令,则称其为可虚拟化架构,否则称为不可虚拟化架构。
  
  系统级虚拟化有许多不同的具体实现方案,按照实现方法的不同,可划分为如下几个类别。
    (1)模拟/仿真(Emulator)
      我们已经知道,通过陷入再模拟敏感指令的执行来实现虚拟机的方法是有前提条件的:所有的敏感指令必须都是特权指令。
      如果一个体系结构上存在敏感指令不属于特权指令,那么其就存在虚拟化漏洞,可以采用一些方法来填补或避免这些漏洞。
      最简单直接的方法是,所有指令都采用模拟来实现,就是取一条指令,就模拟出这条指令执行的效果。这种方法称作仿真。
      使用这种方式的典型实现代表有: PearPC,Bochs,QEMU。

    (2)完全虚拟化(Full virtualization)
      在客户操作系统看来,完全虚拟化的虚拟平台和现实平台是一样的,客户机操作系统察觉不到是运行在一个虚拟平台上,这样的虚拟平台可以运行现有的操作系统,无须对操作系统进行任何修改,因此这种方式被称为完全虚拟化。
      进一步说,客户机的行为是通过执行反映出来的,因此VMM需要能够正确处理所有可能的指令。在实现方式上,以x86架构为例,完全虚拟化经历了两个阶段:软件辅助的完全虚拟化和硬件辅助的完全虚拟化。
        软件实现的完全虚拟化:
          在x86虚拟化技术的早期,没有在硬件层次上对虚拟化提供支持,因此完全虚拟化只能通过软件实现。一个典型的做法是二进制代码翻译(Binary Translation)。
          二进制代码翻译的思想是,通过扫描并修改客户机的二进制代码,将难以虚拟化的指令转化为支持虚拟化的指令。VMM通常会对操作系统的二进制代码进行扫描,一旦发现需要处理的指令,就将其翻译成为支持虚拟化的指令块(Cache Block)。
          这些指令块可以与VMM合作访问受限的虚拟资源,或者显式地触发异常让VMM进一步处理。
          这种技术虽然能够实现完全虚拟化,但很难在架构上保证其完整性。因此,x86厂商在硬件上加入了对虚拟化的支持,从而在硬件架构上实现了虚拟化。
        硬件辅助完全虚拟化
          可以预料,如果硬件本身加入足够的虚拟化功能,可以截获操作系统对敏感指令的执行或者对敏感资源的访问,从而通过异常的方式报告给VMM,这样就解决了虚拟化的问题。
          硬件虚拟化时一种完备的虚拟化方法,因而内存和外设的访问本身也是由指令来承载,对处理器指令级别的截获就意味着VMM可以模拟一个与真实主机完全一样的环境。
          Intel的VT-x和AMD的AMD-V是这一方向的代表。以VT-x为例,其在处理器上引入了一个新的执行模式用于运行虚拟机,当虚拟机执行在这个特殊模式中时,它仍然面对的是一套完整的处理器寄存器集合和执行环境,只是任何敏感操作都会被处理器截获并报告给VMM。
          在当前的系统级虚拟化解决方案中,全虚拟化应用得非常普遍,典型的有知名的产品有Oracle VirtualBox、RedHat KVM、VMware Workstation和VMware ESX(它在其4.0版,被改名为VMware vSphere)、Parallels Desktop、Xen(也支持全虚拟化)。

    (3)类/半虚拟化(Para-Virtualization)
      这样的虚拟平台需要对所运行的客户机操作系统进行或多或少的修改使之适应虚拟环境,因此客户机操作系统知道其运行在虚拟平台上,并且会去主动适应。这种方式被称为类虚拟化,有时也称作半虚拟化。
      另外,值得指出的是,一个VMM可以既提供完全虚拟化的虚拟平台,又提供类虚拟化的虚拟平台。类虚拟化是通过在源代码级别修改指令以回避虚拟化漏洞的方式来使VMM能够对物理资源实现虚拟化。
      上面谈到x86存在一些难以虚拟化的指令,完全虚拟化通过Binary Translation在二进制代码级别上来避免虚拟化漏洞。类虚拟化采取的是另一种思路,即修改操作系统内核的代码,使得操作系统内核完全避免这些难以虚拟化的指令。
      既然内核代码已经需要修改,类虚拟化进一步可以被用于优化I/O。也就是说,类虚拟化不是去模拟真实世界中的设备,因为太多的寄存器模拟会降低性能.相反,类虚拟化可以自定义出高度优化的协议I/O。这种I/O协议完全基于事务,可以达到近似物理机的速度。
      这种虚拟技术以Xen为代表,微软的Hyper-V所采用技术和Xen类似,也可以把Hyper-V归属于半虚拟化。
  
  在系统级虚拟化的实现中,VMM是一个关键角色,前面已介绍过VMM的组成部分。从Host实现VMM的角度出发,还可以将当前主流的虚拟化技术按照实现结构分为如下三类。
    Hypervisor模型:
      Hypervisor这个术语是在20世纪70年代出现的,在早期计算机界,操作系统被称为Supervisor,因而能够在其他操作系统上运行的操作系统被称为Hypervisor。
      在Hypervisor模型中,VMM首先可以被看做是一个完备的操作系统,不过和传统操作系统不同的是,VMM是为虚拟化而设计的,因此还具备虚拟化功能。
      从架构上来看,首先,所有的物理资源如处理器、内存和I/O设备等都归VMM所有,因此,VMM承担着管理物理资源的责任;其次,VMM需要向上提供虚拟机用于运行客户机操作系统,因此,VMM还负责虚拟环境的创建和管理。
      由于VMM同时具备物理资源的管理功能和虚拟化功能,因此,物理资源虚拟化的效率会更高一些。
      在安全方面,虚拟机的安全只依赖于VMM的安全。Hypervisor模型在拥有虚拟化高效率的同时也有其缺点。由于VMM完全拥有物理资源,因此,VMM需要进行物理资源的管理,包括设备的驱动。      我们知道,设备驱动开发的工作量是很大的。因此,对于Hypervisor模型来说这是个很大的挑战。
      事实上,在实际的产品中,基于Hypervisor模型的VMM通常会根据产品定位,有选择地挑选一些I/O设备来支持,而不是支持所有的I/O设备。
      采用这种模型的典型是面向企业级应用的VMware vSphere。
    宿主模型
      与Hypervisor模型不同。在宿主模型中,物理资源由宿主机操作系统管理。
      宿主机操作系统是传统操作系统,如Windows 、Linux等,这些传统操作系统并不是为虚拟化而设计的,因此本身并不具备虚拟化功能,实际的虚拟化功能由VMM来提供。
      VMM通常是宿主机操作系统独立的内核模块,有些实现中还包括用户态进程,如负责I/O虚拟化的用户态设备模型。 
      VMM通过调用宿主机操作系统的服务来获得资源, 实现处理器、内存和I/O设备的虚拟化。VMM创建出虚拟机之后,通常将虚拟机作为宿主机操作系统的一个进程参与调度。
      宿主模型的优缺点和Hypervisor模型恰好相反。宿主模型最大的优点是可以充分利用现有操作系统的设备驱动程序,VMM无须为各类I/O设备重新实现驱动程序,可以专注于物理资源的虚拟化。
      考虑到I/O设备种类繁多,千变万化, 设备驱动程序开发的工作量非常大,因此,这个优点意义重大。
      此外,宿主模型也可以利用宿主机操作系统的其他功能,例如调度和电源管理等,这些都不需要VMM重新实现就可以直接使用。
      宿主模型当然也有缺点,由于物理资源由宿主机操作系统控制,VMM得要调用宿主机操作系统的服务来获取资源进行虚拟化,而那些系统服务在设计开发之初并没有考虑虚拟化的支持,因此,VMM虚拟化的效率和功能会受到一定影响。
      此外,在安全方面,由于VMM是宿主机操作系统内核的一部分,因此,如果宿主机操作系统内核是不安全的,那么,VMM也是不安全的,相应地运行在虚拟机之上的客户机操作系统也是不安全的。
      换言之,虚拟机的安全不仅依赖于VMM的安全,也依赖于宿主机操作系统的安全。
      采用这种模型的典型是KVM、VirtualBox和VMware Workstation。
    混合模型
      混合模型是上述两种模式的汇合体。VMM依然位于最低层,拥有所有的物理资源。与Hypervisor模式不同的是,VMM 会主动让出大部分I/O设备的控制权,将它们交由一个运行在特权虚拟机中的特权操作系统控制。
      相应地,VMM 虚拟化的职责也被分担.处理器和内存的虚拟化依然由VMM来完成,而I/O的虚拟化则由VMM和特权操作系统共同合作来完成。
      I/O设备虚拟化由VMM和特权操作系统共同完成,因此,设备模型模块位于特权操作系统中,并且通过相应的通信机制与VMM合作。
      混合模型集中了上述两种模型的优点。 VMM可以利用现有操作系统的I/O设备驱动程序,不需要另外开发。VMM直接控制处理器、内存等物理资源,虚拟化的效率也比较高。
      在安全方面,如果对特权操作系统的权限控制得当,虚拟机的安全性只依赖于VMM。
      当然,混合模型也存在缺点。由于特权操作系统运行在虚拟机上,当需要特权操作系统提供服务时,VMM需要切换到特权操作系统,这里面就产生上下文切换的开销。
      当切换比较频繁时,上下文切换的开销会造成性能的明显下降。出于性能方面的考虑,很多功能还是必须在VMM 中实现,如调度程序和电源管理等。
      采用这种模型的典型是Xen。

  引用链接:
    https://blog.csdn.net/mumuriyue/article/details/85714900#_Toc27422

5.虚拟化技术分类-操作系统级虚拟化

在操作系统虚拟化技术中,每个节点上只有唯一的系统内核,不虚拟任何硬件设备。通过使用操作系统提供的功能,多个虚拟环境之间可以相互隔离。通常所说的容器(Container)技术,如目前为止最流行的容器系统Docker,即属于操作系统级虚拟化。

  此外,在不同的场景中,隔离出的虚拟环境也被称作虚拟环境(即VE,Virtual Environment)或虚拟专用服务器(即VPS,Virtual Private Server)。

  以容器技术为例,它有自己独特的优点,它的出现,一方面解决了传统操作系统所忽视和缺乏的应用程序间的独立性问题,另一方面,它避免了相对笨重的系统级虚拟化,是一种轻量级的虚拟化解决方案。

  操作系统领域一直以来面临的一个主要挑战来自于应用程序间存在的相互独立性和资源互操作性之间的矛盾,即每个应用程序都希望能运行在一个相对独立的系统环境下,不受到其他程序的干扰,同时又能以方便快捷的方式与其他程序交换和共享系统资源。

  当前通用操作系统更强调程序间的互操作性,而缺乏对程序间相对独立性的有效支持,然而对于许多分布式系统如Web服务、数据库、游戏平台等应用领域,提供高效的资源互操作同保持程序间的相对独立性具有同等重要的意义。

  主流虚拟化产品VMware和Xen等均采用Hypervisor模型(Xen采用的混合模型与Hypervisor模型差别不大,可统称为Hypervisor模型)。

  该模型通过将应用程序运行在多个不同虚拟机内,实现对上层应用程序的隔离。但由于Hypervisor模型倾向于每个虚拟机都拥有一份相对独立的系统资源,以提供更为完全的独立性,这种策略造成处于不同虚拟机内的应用程序间实现互操作非常困难。

  例如,即使是运行在同一台物理机器上,如果处于不同虚拟机内,那么应用程序间仍然只能通过网络进行数据交换,而非共享内存或者文件。而如果使用容器技术,由于各容器共享同一个宿主操作系统,能够在满足基本的独立性需求的同时提供高效的系统资源共享支持。

  容器技术还可以更高效地使用系统资源,由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。

  此外,容器还具有更快速的启动时间,传统的虚拟机技术启动应用服务往往需要数分钟,而对于容器由于,直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间,大大的节约了应用开发、测试、部署的时间。

  引用链接:
    https://blog.csdn.net/mumuriyue/article/details/85714900#_Toc18928

  推荐阅读:
    https://www.cnblogs.com/yinzhengjie2020/p/14013388.html

三.虚拟化和云计算的区别

还记得上面提到的云计算服务类型吗,是否已经发现了Virtualization是在IaaS层呢?
 
  由于两者的核心理念都是从硬件中分离资源,以创建可用的环境,所以很容易被混为一谈。虚拟化有助于创建云,但它并非实现云计算的决定性技术。你可以这样理解:
    (1)虚拟化是一种将功能与硬件分离的技术
    (2)而云计算并不仅仅是依赖于这种分离的解决方案

  美国国家标准与技术协会这样描述云计算的5种功能:一个网络、池化资源、一个用户界面、置备功能、自动化资源控制/分配。

  虽然虚拟化可以创建网络和池化资源,但还需要其他管理和操作系统软件来创建用户界面、部署虚拟机、控制/分配资源。
posted @ 2022-04-19 08:31  潜龙~勿用  阅读(541)  评论(0编辑  收藏  举报