虚拟化技术
云计算
云计算的道理是简单的,说白了,就是把计算机资源集中起来,放在网络上。但是,云计算的实现方式,就非常复杂了。
举两个例子:
- 如果你只是在公司小机房摆了一个服务器,开个FTP下载服务,然后用于几个同事之间的电影分享,当然是很简单的。
- 如果是“双11”的淘宝购物节,全球几十亿用户访问阿里巴巴的淘宝网站,单日几十PB(1PB=1024TB=1024×1024GB)的访问量,每秒几百GB的流量……这个,就不是几根网线几台服务器能解决的了。
这时,需要设计一个超大容量、超高并发(同时访问)、超快速度、超强安全的云计算系统,才能满足业务平稳运行的要求。这才是云计算的复杂之处。
第一层次
- 是最底层的硬件资源,主要包括CPU(计算资源),硬盘(存储资源),还有网卡(网络资源)等。
第二层次
- 要高级一些,我不打算直接使用CPU、硬盘、网卡,我希望你把操作系统(例如Windows、Linux)装好,把数据库软件装好,我再来使用。
第三层次
- 更高级一些,你不但要装好操作系统这些基本的,还要把具体的应用软件装好,例如FTP服务端软件、在线视频服务端软件等,我可以直接使用服务。
这三种层次,就是大家经常听到的IaaS、Paas、SaaS。
- IaaS: Infrastructure-as-a-Service(基础设施即服务),Infrastructure-as-a-service。国内典型代表是阿里云。国际上的是AWS。
- PaaS: Platform-as-a-Service(平台即服务),Platform-as-a-service。国内典型代表是新浪云。docker也是属于PaaS。
- SaaS: Software-as-a-Service(软件即服务),office 365,github的Codespaces。
目前主流的云计算服务提供商,例如亚马逊AWS、阿里云、华为云、天翼云、腾讯云,说白了,都是为大家提供以上三个层次的云资源。你想要什么,它们就提供什么。你想要多少,它们就提供多少。
这么多样化多层次的云计算服务,阿里、华为们又是怎么提供的呢?
难道说,是人工安排?——如果你要八核CPU、16GB内存、500GB硬盘的服务器,阿里临时安排工程师帮你组装?如果你要装CentOS 7.8,MySQL 5.7.31,阿里也临时让工程师帮你安装配置?这显然是不可能的,耗不起人力,也等不起时间。于是,就有了各种软件和平台,负责对资源进行快速调用和集中管理。
什么是虚拟化
虚拟化
如果要对物理资源进行管理,第一步,就是 “虚拟化”。虚拟化是云计算的基础。简单来说,虚拟化就是在一台物理服务器上,运行多台“虚拟服务器”。这种虚拟服务器,也叫虚拟机(VM,VirtualMachine)。
从表面来看,这些虚拟机都是独立的服务器,但实际上,它们共享物理服务器的CPU、内存、硬件、网卡等资源。通过模拟计算机的硬件,来实现在同一台计算机上同时运行不同的操作系统的技术。常用的vmwore、openstack、kvm都是使用的虚拟化技术。
- 物理机,通常称为 “宿主机(Host)”
- 虚拟机,则称为 “客户机(Guest)”
Hypervisor
谁来完成物理资源虚拟化的工作呢?就是大名鼎鼎的 Hypervisor 。
Hypervisor也叫做VMM(Virtual Machine Monitor,虚拟机监视器)。它不是一款具体的软件,而是一类软件的统称。Hypervisor是一种运行在基础物理服务器硬件之上的软件层,可以虚拟化硬件资源,例如:cpu,硬盘,内存,声卡等资源。然后我们可以通过在虚拟化出来的资源之上安装操作系统。也就是所谓的虚拟机。通过Hyperviosr我们可以创建不同的虚拟机,并且每个虚拟机都是分离、独立的系统。这样操作,我们就可以在一台硬件服务器和本地操作系统之上虚拟化出很多服务器,供我们用来部署应用程序。一台硬件服务器可以虚拟化多台服务器,让计算机资源得以充分利用。
Hypervisor分为两大类:
- 第一类,hypervisor直接运行在物理机之上。虚拟机运行在hypervisor之上。
- 第二类,物理机上安装正常的操作系统(例如Linux或Windows),然后在正常操作系统上安装hypervisor,生成和管理虚拟机。像VMware、KVM、Xen、Virtual Box,都属于Hypervisor。
问题
人们在使用虚拟化一段时间后,发现它存在一些问题,不同的用户,有时候只是希望运行各自的一些简单程序,跑一个小进程。为了不相互影响,就要建立虚拟机。如果建虚拟机,显然浪费就会有点大,而且操作也比较复杂,花费时间也会比较长。而且,有的时候,想要迁移自己的服务程序,就要迁移整个虚拟机。显然,迁移过程也会很复杂。安装的虚拟机越多,消耗的资源对应越多。环境兼容性问题,开发时的环境运行正常,部署到虚拟机环境进行测试则有可能发生错误。
有没有办法更灵活快速一些呢?有,这就引入了**“容器(Container)”**。
什么是容器
基于硬件级虚拟化技术的缺点和不足,后续又发展出来另一种虚拟化技术,即操作系统级别的虚拟化技术。操作系统级虚拟化是运行在操作系统之上的虚拟化技术,它模拟的是运行在一个操作系统上的多个不同进程,并将其封闭在一个密闭的容器内,该技术也就被称之为容器化技术。
容器就是在隔离环境运行的一个进程,如果进程停止,容器就会销毁。隔离的环境拥有自己的系统文件,IP地址,主机名等。容器也是虚拟化,但是属于“轻量级”的虚拟化。它的目的和虚拟机一样,都是为了创造“隔离环境”。但是,它又和虚拟机有很大的不同——虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离。
容器和虚拟化的区别
容器是将代码和环境打包在一起的一个集合,而虚拟机是在物理层面上分离出来一个操作系统;多个容器可以运行在同一台硬件服务器上,并共享一个操作系统的内核资源。多个虚拟机也可以运行在同一台服务器上,但每个虚拟机都需要有一个完整的操作系统。
虚拟化技术分类
CPU虚拟化
虚拟化在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。简单说来,CPU的虚拟化技术就是单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
网络虚拟化
网络虚拟化是目前业界关于虚拟化细分领域界定最不明确,存在争议较多的一个概念。微软眼中的“网络虚拟化”,是指虚拟专用网络 (VPN)。VPN 对网络连接的概念进行了抽象,允许远程用户访问组织的内部网络,就像物理上连接到该网络一样。网络虚拟化可以帮助保护 IT环境,防止来自 Internet 的威胁,同时使用户能够快速安全的访问应用程序和数据。
服务器虚拟化
与网络虚拟化不同,服务器虚拟化却是虚拟化技术最早细分出来的子领域。根据2006年2月ForresterResearch的调查,全球范围的企业对服务器虚拟化的认知率达到了75%。三分之一的企业已经在使用或者准备部署服务器虚拟化。这个产生于20世纪60年代的技术日益显示出其重要价值。由于服务器虚拟化发展时间长,应用广泛,所以很多时候人们几乎把服务器虚拟化等同于虚拟化。
存储虚拟化
随着信息业务的不断运行和发展,存储系统网络平台已经成为一个核心平台,大量高价值数据积淀下来,围绕这些数据的应用对平台的要求也越来越高,不光是在存储容量上,还包括数据访问性能、数据传输性能、数据管理能力、存储扩展能力等等多个方面。可以说,存储网络平台的综合性能的优劣,将直接影响到整个系统的正常运行。因为这个原因,虚拟化技术又一子领域——虚拟存储技术,应运而生。
应用虚拟化
前面几种虚拟化技术,主要还专注于对硬件平台资源的虚拟优化分配,随着IT应用的日益广泛,应用虚拟化作为虚拟化家族的明日之星登上了历史舞台。2006年7月由Forrester咨询公司在美国对各种不同行业的高层IT管理人员所做的一项研究显示,当今的机构现在将应用虚拟化当作是业务上的一个必由之路,而不是一个IT决策。据统计,全世界目前至少有超过18万个机构在利用应用虚拟化技术进行集中IT管理、加强安全性和减少总体成本。