虚拟化技术概念基础
发布日期:2021-06-29 11:22:49 浏览次数:2 分类:技术文章

本文共 2977 字,大约阅读时间需要 9 分钟。

虚拟化技术概念基础

引言

计算机是为了计算而诞生的,从最早期的机械式计算器开始,复杂的计算需求一直在推动着计算设备的规模化增长,在控制机械上消耗的成本和代价也越来越高,只能被迫寻求新的方向

为了战争,为了杀人,为了胜利,为了让发射出去的导弹可以依照人的意志在指定的位置又快又准确地炸裂,第一台占地面积167平方米的通用计算机ENIAC诞生了

起初,计算机的计算资源是既珍贵又匮乏,为了完成计算,要求使用者自我压缩需求,或者提高使用者的时间成本,以此来迎合在如今看来羸弱不堪的计算机

那个时候的科学家们大概难以想象也就几十年的功夫,在计算机计算能力暴增地同时,还诞生了一种用来提高计算机资源使用率,避免计算资源浪费的技术 - “虚拟化”

狭义虚拟化

大多数语境下的虚拟化,就是指虚拟机/虚拟主机/虚拟操作系统。虚拟机的英文词为Virtual Machine,也是虚拟机主流缩写vm的来源,虚拟机一般也被称之为虚机

与虚拟机对应的则是物理机,物理机相应的写做Physical Machine。由于虚拟机的存在依赖于物理机,从这个角度来看,彷佛虚拟机”寄宿“在了物理机之上,所以虚拟机的身份被定义为客户(Guest),而物理机的身份则是宿主(Host)

从最简单也是最直接的角度来看,物理机就是一台真实存在的实体计算机,比如笔记本,比如台式机。

在这样的设备上存在着一个非常“理所应当”的操作系统,比如Windows,MacOS,Ubuntu Desktop等,你只需要在这些操作系统之上安装好提供虚拟化功能的软件后,比如VirtualBox, VMware Workstation, Hyper-V,即可借助这些软件来创建一个或多个虚拟机

这样,你就可以在一台Mac上操作一个Windows虚拟机,它既不会干扰破坏你Mac上的数据,同时还可以运行很多Mac上没法使用的软件产品,如果Windows被搞坏了,直接删除重新安装一次就好,这比把自己笔记本上的操作系统重做一遍要容易太多,也没有什么丢失数据的心理负担(毕竟,通常这只是玩具,你也不会放什么数据,:p)。这大概就是大多数人第一次接触虚拟化概念时的应用场景。

广义虚拟化

虚拟化在本质上,其实就是把资源进行逻辑抽象和实体隔离,从而达到资源复用或资源隔离的目的

资源隔离又是建立在资源复用的基础之上

虚拟机

如果你的计算机组成原理基础还算不错,或者说你自己独自购买组装过PC机,就虚拟机而言,只要多关注一下细节,你会发现,虚拟化软件在你创建虚拟机时“随意”的给你罗列了一份清单,那些在书上说的必要组件,那些你得花钱购买的酷睿cpu/金士顿内存/Nvidia显卡/三星ssd/intel网卡,就这么轻而易举的呈现在你的面前了。事实上,你可能会好奇:“列出来就代表我真的有了吗?”,是的,可以这么说,你确实是“拥有”了它们,不过这得在虚拟机内部观察才能得出这个结论,所谓庄周梦蝶,在梦里的你是不知道你自己就在梦里的,说不准你就是在梦里阅读着这篇文章,哈哈

这个时候,也许你的重点不应该再继续放在思考何为虚拟化上了,我们尝试着换个角度来思考一个更基础的问题,何为计算机?

Duck Typing

Go语言的繁荣,让Duck Typing这种编程理念开始被人们熟知,“如果你叫起来像鸭子,走起路来也像鸭子,那么你就是鸭子”,追求严谨的人自然会觉得这是无稽之谈,当然了,我们这里也不是想要重新定义“鸭子”,只不过借鉴这个概念,我们可以知道,大多数时候人们更在意的是事物的关键特征,如果你一直开保时捷上班,我是不相信你家没有矿的

计算机的定义我没有必要再重复Google上的内容了,我们通过逻辑模拟的方式,在一个逻辑环境下“创造”出了一个全新的,符合计算机定义的空间,我们说这就叫虚拟机

如果你觉得有点不能接受“虚拟机”也是计算机,那么回想一下你玩过的某款角色扮演游戏,魔兽世界,剑网3,当你专注于游戏内容的时候,沉浸其中的你是否曾有过自己身处于另一个世界的错觉?而这个世界,就是模拟出来的,你不能接受“虚拟机”也是计算机,往往你缺少的只是多几次的“全屏显示”带来的沉浸感罢了:p)

共享经济

你躺在床上睡着了,然后又在这张床上醒来了,你是不是觉得你还是你?想象一下,你睡着后,另一个灵魂借用了你的身体,出去度过了一个美好的夜晚,结束后又回来躺下了,直到你睁开双眼。假如你不是柯南,也许你会这么幸福快乐的与另一个不曾知晓的灵魂共度一生,毕竟,你理解这个世界就是你所有睁眼时间的总和

遗憾的是,这么神奇的事情人类是做不到的,因为我们缺少转移人类意志的技术,如果意志可以保存和转移,那会非常迷人。不过在计算机的世界里,“意志”(数据)的保存和转移则是一件很轻松的事情,那么如何让计算机上寄宿有多个“灵魂”呢?

聪明的你应当了解过“分时操作系统原理“,一个可以让你一边挂着QQ一边浏览网页的技术,操作系统把那些”睡着“的进程移出cpu,在内存里保存好”意志“后,在把另一个进程的“意志”载入cpu,从而唤醒它

某种程度上而言,你看,这不也是虚拟化吗,每个进程都觉得自己是cpu的主人,每个进程都过了一个完整的人生

资源复用的艺术

cpu可以分时复用,大胆一点,有什么是我们不可以分时复用的?

正如IP网络的精髓就在于分组传输那样,大段数据切成很多很多小段,一小段一小段的传送,在操作系统边上的你看来,全世界上的每一台计算机都与你是直连在一起的,尽管你明明只有一条网线,而每一个IP地址其实就相当于一条虚拟的网线

所以,只要理论上可被复用,那就理论上可被虚拟化,稍加一点包装,就可以借着本体资源模拟出一个看似独立的资源来

至于资源隔离,则是用一些辅助控制手段,即便是柯南也让他不能发现自己的肉体一直在和别人共享

当然,如果你不介意被柯南发现,去了解一下docker吧

KVM

KVM的核心工作就是提供计算资源(cpu)的虚拟化支持,组成一台可以正常运行的虚拟机光有cpu可不行,还需要很多额外的虚拟设备,这个时候就需要用到QEMU-KVM了

QEMU-KVM

说明QEMU-KVM的作用前,要先说明QEMU是什么

QEMU本身是一套独立且完整的虚拟化方案,和vmware,virtualbox这些完整的虚拟化方案是一个级别的技术,不过由于他的计算资源模拟完全采用了软件模拟,因此执行效率不高

但优秀的是他完整的资源模拟能力,这让它在科研领域独领风骚

假如我们把QEMU的计算资源模拟部分,由纯软件实现改写为使用高效的KVM模拟方案,是不是可以做到,在保留完整的资源模拟能力的基础上,还兼具高效的CPU执行效率

所以QEMU-KVM诞生了

Libvirt

KVM配合QEMU-KVM,就已经是一套独立且完整的虚拟化方案了,libvirt又是什么?

市面上存在较多的虚拟化方案,libvirt提供了一个虚拟化概念的抽象层,屏蔽了不同平台的控制细节,同时还附带提供了大量方便易用的周边工具,这对于开发者来说自然是喜闻乐见的

另外,日常运维过程中,我们会较多的用到virsh命令集,则是用于和libvirt交互的便携工具

所以,最终的控制栈大致为: 开发者 => virsh => libvirt => qemu-kvm => kvm

转载地址:https://blog.csdn.net/zxpoiu/article/details/115752816 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mlx rdma网卡指标参数简介
下一篇:linux 丢包排查思路简述(tcp+rdma)

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月10日 12时04分30秒