zoukankan      html  css  js  c++  java
  • Docker学习2-虚拟化

    虚拟化就是由位于下层的软件模块,根据上层的软件模块的期待,抽象(虚拟)出一个虚拟的软件或硬件模块,使上一层软件直接运行在这个与自己期待完全一致的虚拟环境上。从这个意义上来看,虚拟化既可以是软件层的抽象,又可以是硬件层的抽象。

    Virtual Machine Monitor VMM,即虚拟机监控系统,也叫 Hypervisor,是虚拟化层的具体实现。主要是以软件的方式实现一套和物理主机环境完全一样的虚拟环境,物理主机有的所有资源,包括 CPU、内存、网络 IO、设备 IO等等,它都有。相当于 VMM 对物理主机的资源进行划分和隔离,使其可以充分利用资源供上层使用。虚拟出的资源以虚拟机的形式提供服务,一个虚拟机本质上和一台物理机没有什么区别,可以跑各种操作系统,在之上再跑各种应用。

    虚拟机通常叫做客户机(guest,物理机叫宿主机(host,VMM 处在中间层,既要负责对虚拟资源的管理,包括虚拟环境的调度,虚拟机之间的通信以及虚拟机的管理等,又要负责物理资源的管理,包括处理器、中断、内存、设备等的管理,此外,还要提供一些附加功能,包括定时器、安全机制、电源管理等。

    Virtual Machine Monitor VMM根据平台类型和实现结构有两种不同的分类,按平台类型可以分为完全虚拟化类虚拟化,完全虚拟化就是 VMM 完全模拟出一个跟物理主机完全一样的环境。但是这个是非常困难的,首先,这需要硬件的支持,而硬件在初期设计的时候,没有那么远的前瞻性,可以预想到为虚拟化提供支持,前次,指令的复杂性,即使通过模拟的方式也很难做到全部指令都模拟。所以,就需要借助其他的一些技术来辅助虚拟化

    软件辅助虚拟化通过优先级压缩(Ring Compression,RC)和二进制代码转译(Binary Translation,BT)来完成。RC 基于 CPU 特权级原理,也就是guest、VMM 和 host 分别处于不同的特权级上,guest 要访问 host 属于越级访问就会抛异常,VMM会截获异常,并模拟出其可能的行为,从而进行相应处理。但是由于硬件设计的缺陷,有些指令并不能被截获,从而导致“漏洞”(即指令不能转为支持虚拟化的指令)。BT可以弥补这个缺陷,通过扫描guest的二进制的代码,将难以虚拟化的指令转为支持虚拟化的指令,从而可以配合VMM 完成虚拟化功能。优先级压缩(Ring Compression,RC)和二进制代码转译(Binary Translation,BT)这两种方式都是通过「打补丁」的方式来辅助虚拟化,因此,很难在架构上保证完整性。后期的硬件厂商在硬件上对虚拟化提供了支持,即硬件辅助的虚拟化。通过对硬件本身加入更多的虚拟化功能,就可以截获更多的敏感指令,填补上漏洞。

    类虚拟化是外一种通过软件来避免漏洞的方式,通过修改客户机 Guest操作系统内核代码(API级)来避免漏洞,因此,可以自定义内核的执行行为,某种程度上对性能进行优化。

    根据Virtual Machine Monitor VMM的实现结构分类,主要分Hypervisor 模型(I 型)和宿主模型(II 型)两类。

    Hypervisor 模型(I 型),也称裸机型:

    直接安装在硬件计算资源上,操作系统安装并且运行在Hypervisor之上。Hypervisor 模型中 VMM 既是操作系统,又是虚拟化软件,即集成了虚拟化功能的操作系统,对上为 guest 提供虚拟化功能,对下管理着所有物理资源,它的优点是效率高,虚拟机的安全性只依赖于VMM,缺点是管理所有的物理资源,意味着 VMM 要承担很多的开发工作,特别是驱动层面的开发,硬件的 I/O 设备有很多,这些设备都需要有对应的驱动来设配才能为虚拟机提供功能。

    宿主模型(II 型):

    宿主模型剥离了管理功能和虚拟化功能,虚拟化功能只是作为内核的一个模块来加载,比如 Kernel Virtual Machine  KVM 技术,一般 KVM 只负责 CPU 和内存的硬件虚拟化,I/O 的虚拟化则由QEMU技术来完成。2006年10月,KVM模块的源代码被正式接纳进入Linux Kernel,成为内核源代码的一部分。因此,KVM是Linux完全原生的硬件虚拟化解决方案。

     

    KVM架构

    上图中,Linux内核运行在物理硬件之上,KVM模块将Linux内核本身变成一个Hypervisor。Hypervisor是位于物理硬件和虚拟硬件之间的一个中间层,可以理解为一个代理,它将虚拟硬件要执行的指令按一定的算法调度给物理硬件去执行。有了虚拟硬件,虚拟机就可以按照正常的流程安装操作系统以及运行APP了。

    Hypervisor核心工作就是对多个虚拟硬件要求的资源进行统筹协调,最主要的就是协调CPU资源和内存资源。对于CPU资源,Hypervisor通过选择合适的调度算法,把物理CPU合理的分配给虚拟CPU使用。对于内存资源,Hypervisor需要先将物理硬件的内存地址转化为虚拟硬件的物理地址,虚拟机Operating System  OS会把虚拟硬件的物理地址映射为虚拟内存地址,进而提供给APP使用。KVM除了对CPU和内存资源进行管理之外,还能够使用Linux支持的任何存储形式来存储虚拟机系统盘。

    型:

    虚拟机运行在传统操作系统上,创建一个独立的虚拟化实例(容器),指向底层托管操作系统,即操作系统虚拟化。操作系统虚拟化是在操作系统中模拟出运行应用程序的容器,所有虚拟机共享内核空间,性能最好,耗费资源最少。但是缺点是底层和上层必须使用同一种操作系统,如底层操作系统运行的是Windows系统,则VPS/VE就必须运行Windows。

     云计算的本质

    云服务器:位于云上的使用虚拟化技术构建出的服务器;

    CSP:Cloud Service Provider;

    在云计算出现之前,互联网公司是需要购买服务器、存储和网关等基础设施的。在云计算出现之后,互联网公司还是需要购买服务器、存储和网关等基础设施的。因此,互联网的基础设施并没有因为云计算的出现而改变。但是可以发现,在云计算出现以前,企业IT采购基础设施的流程至少几个月。而云计算出现之后,企业IT采购基础设施的流程可以在很短时间内完成。因此,云计算颠覆的是互联网基础设施的交付方式。这种对互联网基础设施交付方式的改变就要求,Cloud Service Provider  CSP能够以一种区别于传统硬件的方式提供互联网的基础设施。于是,虚拟化技术就正式进入了历史舞台(虚拟化技术早在云计算出现之前很多年就已经存在,只不过彼时的虚拟化技术使用的场景比较有限,不被大家所关注)。

    虚拟化技术(VMware、Xen、KVM等),即能够虚拟计算机硬件的技术。利用虚拟化技术虚拟出计算机必要的各个组件,再将虚拟出的组件组装起来,就得到一台虚拟的计算机(虚拟机),因此可以虚拟出千万台计算机组成云。

    计算机由五大部分组成:运算器、控制器、存储器、输入设备和输出设备。其中,运算器和控制器统称为中央处理器(CPU)。存储器分为内存和外存(硬盘)。输入设备和输出设备统称外设(键盘显示器等等)

    从Cloud Service Provider  CSP的角度来分析其必要性。首先,CSP的客户是通过网络连接到位于云上的虚拟机(虚拟的计算机)的,为此CSP并不需要关心虚拟机外设的实现。CSP需要关心的是如何利用虚拟化技术对虚拟机的CPU、内存及外存进行实现。

    CPU内存的虚拟化实现统称为虚拟硬件。而外存实际上就是一个特定格式的文件(vid、qcow2等等)。但是单单有外存是没有意义的,还需要给这个外存安装操作系统。把安装了操作系统的外存统称为虚拟系统盘(实际上是一个文件)。CSP要实现一台云服务器,只需要关心两个问题:如何构建虚拟硬件?如何构建虚拟系统盘?

     

    在常见的虚拟化技术中,这两个问题都有完整的解决方案。比如QEMU/KVM能够提供一套完整的虚拟硬件系统环境,而QEMU推荐的qcow2文件可以用来构建虚拟系统盘。

    任何一台云服务器都是由虚拟硬件虚拟系统盘组成的。但是,云上有成千上万台虚拟机,它们背后对应着海量的虚拟硬件和虚拟系统盘,如何组织这些虚拟硬件和虚拟系统盘是一个值得研究和思考的课题。

     为什么用docker

    在微服务的大背景下,一台物理机或者云主机可能要运行很多应用。应用必须依赖于开发环境。当我们遇到拓展物理机、云主机、应用迁移等场景,必然要重新搭建开发环境。这时,虚拟化技术就很好地保证环境一致、配置一致,并且让你更高效地迁移应用。

    Docker正是应对这种场景的虚拟化技术。例如java,只要机器上安装了JVM,一份代码到处运行。应用好比java,只要机器上安装docker,我们事先保存的镜像可以到处运行。这些镜像可以是nginx、php、mysql、数据仓库等,无论你的主机从ubuntu迁移到centos,还是windows迁移linux,只要主机安装了docker,就能迅速地部署好新环境,并且保持环境、配置一致。

    什么是镜像、容器、仓库?

    镜像,是特殊的文件系统,他包含程序、配置、资源等;

    容器,镜像的实例。就像是类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

    仓库,用于保存镜像的服务。

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/jeshy/p/10518905.html
Copyright © 2011-2022 走看看