虚拟化技术概念基础
虛擬化技術概念基礎
- 引言
- 狹義虛擬化
- 廣義虛擬化
- 虛擬機
- Duck Typing
- 共享經濟
- 資源復用的藝術
- KVM
- QEMU-KVM
- Libvirt
引言
計算機是為了計算而誕生的,從最早期的機械式計算器開始,復雜的計算需求一直在推動著計算設備的規模化增長,在控制機械上消耗的成本和代價也越來越高,只能被迫尋求新的方向
為了戰爭,為了殺人,為了勝利,為了讓發射出去的導彈可以依照人的意志在指定的位置又快又準確地炸裂,第一臺占地面積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
總結
- 上一篇: linux 丢包排查思路简述(tcp+r
- 下一篇: mlx rdma网卡指标参数简介