站内链接:

介绍

虚拟化

定义: Virtualization 是一个一个广义的术语, 对于不同的人意味着不同的东西, 取决于不同的环境.在计算机领域, 虚拟化表示计算资源的抽象, 不局限于虚拟机的概念, 例如虚拟内存,存储虚拟化,网络虚拟化,虚拟机.

目的: 在广义程度上, 虚拟化的目的一般都是为了简化管理, 优化资源,通过动态的分配, 灵活的调度, 独立的空间, 实现将有限的资源根据不同需求进行重新规划以达到最大利用率. 最终呈现的效果: 打碎固化的资源, 以更加高效的方式利用资源.

那么虚拟化有哪些分类呢? 何为服务器虚拟化? 何谓应用虚拟化? 何谓桌面虚拟化? 何谓存储虚拟化?

  • 服务器虚拟化: 将多个服务器硬件资源整合, 创建资源池, 统一调配服务器资源, 这是云计算的基础.
  • 应用虚拟化: 将应用程序和 OS 解耦, 为应用程序提供了一个虚拟的运行环境. 例如 Ctrix, Vmware, 使用虚拟终端提供 office 服务等.
  • 桌面虚拟化: 将计算机的终端系统进行虚拟化, 可以通过任何设备, 在任何地点, 任何时间通过网络访问属于我们个人的桌面系统. 例如 VDI(Virtual Desktop Infrastructure).
  • 存储虚拟化: 将资源的逻辑映像与物理存储分开, 从而为系统和管理员提供一幅简化, 无缝的资源虚拟视图, 一个巨大的存储资源池.

关于虚拟化其他知识点, 见: 虚拟机术语介绍. 那么, 让我们想一想如下问题:

  • 虚拟化现在的应用场景是什么呢?
  • 虚拟化和超线程技术有什么关联呢?
  • 虚拟化和云计算有什么关联呢?
  • 虚拟话和虚拟机是什么关系呢?
  • 虚拟化和 docker 技术有什么关联呢?

虚拟化和超线程

关于Hyper-Threading的知识点, 见: cpu 术语介绍, 这里我们主要将注意力放在超线程虚拟化的关联上. 让我们强调一句话: 超线程是对CPU的虚拟化. 无论何种虚拟化实现方式, 最终都是奔着资源的最大化利用而去, 超线程能够确保每一个逻辑CPU都能想物理CPU一样执行控制流, 让 CPU 一直满负荷运行.

那么, 虚拟化, 多任务, 超线程的区别在哪里呢?

  • 多任务: 一个操作系统运行多个程序, 并发执行, 在操作系统层面对硬件资源进行虚拟化, 每一个任务都能使用整个硬件资源: CPU, 内存等.
  • 超线程技术: 单 CPU 模拟双 CPU 来平衡程序运行性能, 其中模拟出来的 CPU 不能分离, 而是协同方式运行
  • 虚拟化: 目前狭义上的虚拟化主要是对计算机硬件的虚拟化, 以提供更加灵活的资源使用.

所以, 在讨论虚拟化的时候, 实际上可以将超线程多任务同虚拟化区分开来, 虽然前两者也是虚拟化技术, 但是为了方便理解, 还是应当将前两者同虚拟化稍微区分开来.

虚拟化和云计算

在了解了何为虚拟化技术? 何为服务器虚拟化? 何为应用虚拟化之后, 让我们尝试将虚拟化技术和现今最热的云计算服务结合, 了解两者之间的关系.

首先, 虚拟化技术和分布式系统的优势在哪里?

  • 虚拟化技术优势: 解耦, 让 IT 系统的物理拓扑图与逻辑拓扑图无关, 例如服务器虚拟化就可以将整个系统打包放到另外一个硬件设备上完整的运行.

  • 分布式系统优势: 资源池, 将所有的 IT 资源当成一个整体, 利用高效的算法来将计算资源或者存储资源平摊到整个巨大的网络空间的各个角落, 例如 HDFS(分布式存储), MapReduce(分布式计算)

注意, 虚拟化技术将固化的大硬件设备虚拟成一个个小块, 已提供灵活的服务; 分布式技术则将网络中小块资源整合聚合成逻辑上的大资源以提供计算和存储. 虚拟化技术和分布式技术的实现方式完全是相反的, 但是最终目的是一致的: 更高效的资源利用, 通过揉碎再组合的方式, 将整个 IT 资源变为一个非常灵活的系统.

目前通常意义上的虚拟化和分布式主要是:

  • 虚拟化: 服务器虚拟化, 应用虚拟化
  • 分布式: 分布式存储, 分布式计算

其次, 云计算和虚拟化的区别是什么?

  • 云计算是一种服务, 其中虚拟化和分布式是云计算的关键技术之一
  • 云计算提供了一个租借服务, 提供超大容量, 超高并发, 超快速度, 超强安全的计算机系统

再次, 云计算的应用场景或者目的是什么?

目的: 在合理的时间内, 对海量的数据进行分析, 找出背后的目的和趋势. 通过虚拟化和分布式系统来实现, 提供一种IaaS(软件即服务)解决方案, 以向开发者提供如下服务. 通过资源池实现资源的最大化利用, 避免硬件设置的浪费.

云计算依托: 目前, 大部分的云计算都是依托于虚拟化技术, 特别是服务云, 将多台服务器实体虚拟化之后, 构建一个公共的资源池, 实现共同计算, 共享资源, 换言之云计算在一定程度上替代了过去的服务器集群.

虚拟机

Hyervisor

Hypervisor–一种运行在物理服务器/OS 之间的中间软件层, 允许多个 OS 和应用共享一套物理组件. 其可以看做是虚拟环境中元操作系统, 协调物理设备和虚拟机, 又被称为Virtual Machine Monitor. 一般而言, 虚拟化的基本架构如下:
虚拟化架构

VMM为虚拟操作系统的执行提供了独立的虚拟硬件操作平台, 通过隐藏底层硬件设备的, 让操作系统可以透明的使用和共享. 根据VMM运行在 OS 或者运行于裸机, 虚拟化技术分为 2 大类:

  • 基于内核的全虚拟化技术: 例如 KVM
  • 基于裸机的全虚拟化或准虚拟化技术: 例如 Xen

另参考:虚拟化技术分类

Virtual Machine

Virtual Machine: 建立在 Hypervisor 之上的虚拟 OS, 目前主要分为两类:

  • 裸金属架构: 去除 OS, 虚拟化软件直接安装服务器, 更加高效
  • 宿主行架构: 虚拟机需要安装在 OSS 之上

具体架构图如下:
裸金属

虚拟化

让我们重新在理一下虚拟化技术, 以便更好的认识虚拟化技术:

a) 超线程技术, 多线程技术, 多任务, 这是都是虚拟化思想

b) VMM-虚拟机监视器, 用于对硬件资源或者系统资源进行虚拟工作, 从而产生很多的virtual machine

  • Hypervisor 直接运行在物理机上, 对硬件设备直接虚拟
  • Hypervisor 运行在 OS 之上, 对系统资源进行虚拟, 例如 VMware, Virtual Box, KVM

c) KVM(kernel-based virtual machine)基于内核的虚拟机

d) 为了更好的管理虚拟机, 产生了云管理平台-openstack, 负责管理计算资源, 存储资源, 网络资源, 其本身不制造虚拟机, 而是管理 KVM/Xen 等产生的虚拟机.

以上的内容都是在IaaS(基础设施即服务)的语境上讲述, 另见IaaS. 那么 docker 和虚拟化技术有什么关联呢? K8S 又是什么呢?

容器

虚拟机问题

犹记得大学的时候在本来就已经非常差的电脑上安装一个 vmware 虚拟机, 然后运行一个ubuntu系统, 然后分配系统资源的时候非常扣, 生怕宿主机被玩爆了, 但是实际上我只想运行一个简单的程序, 测试一个简单的 ubuntu 命令而已. 同理, 虚拟机技术在工程使用过程中逐渐暴露它的一些不足之处, 为了一个很小的应用去建立一个虚拟机, 这个不符合虚拟化最初的目的: 资源的单元化高效利用, 不浪费任何一个资源, 而且虚拟机的迁移过程也非常麻烦. 于是, 容器技术产生了.

container

container属于轻量级虚拟化, 它和虚拟机一样, 都是为了创建一个独立隔离的环境, 但是容器本质上是进程的隔离, 并非系统级别上的资源隔离, 所以其才能实现毫秒级的启动和关闭. Docker 就是创建容器的工具, 是应用容器引擎, Docker的中文意思就是码头工人, 其 Logo 就是一个鲸鱼背着很多货柜箱. 一般而言, 一台主机可以运行几百, 几千的容器, 每一个容器实际上只需要 MB 级设置 KB 级别的磁盘占用.

k8s

k8s 就是kubernetes, 中文意思就是舵手或导航员, 这是一个容器集群管理系统, 用于容器编排, 容器启动, 自动化部署, 扩展和管理容器应用, 容器回收等. K8S 就是容器的管理中心, 监控容器的运行, 控制容器和外界的通信. 其他容器平台有 Compose,Marathon,Swarm,Mesos 等. 此时 Docker 关注的不再是硬件资源基础设置, 而仅仅是应用层, 即术语PaaS, 另见IaaS.

参考