看了一些虛擬化的部落格,還有文章,發現很多人對於虛擬化技術到底是什麼,為什麼要使用虛擬化技術還不是很明白。絕大多數人目前理解的虛擬化技術就是把作業系統和硬體分離,一個硬體能夠同時執行多個作業系統認為就是虛擬化技術,其實這只是虛擬化技術中很小的一個部分,和很初級的階段。
 
什麼是虛擬化技術?
百度百科中給出的解釋其實也是相對片面的:
“ 虛擬化是一個廣義的術語,在計算機方面通常是指計算元件在虛擬的基礎上而不是真實的基礎上執行。虛擬化技術可以擴大硬體的容量,簡化軟體的重新配置過程。CPU的虛擬化技術可以單CPU模擬多CPU並行,允許一個平臺同時執行多個作業系統,並且應用程式都可以在相互獨立的空間內執行而互不影響,從而顯著提高計算機的工作效率。
         虛擬化技術與多工以及超執行緒技術是完全不同的。多工是指在一個作業系統中多個程式同時並行執行,而在虛擬化技術中,則可以同時執行多個作業系統,而且每一個作業系統中都有多個程式執行,每一個作業系統都執行在一個虛擬的CPU或者是虛擬主機上;而超執行緒技術只是單CPU模擬雙CPU來平衡程式執行效能,這兩個模擬出來的CPU是不能分離的,只能協同工作。”
 
雖然其強調廣義概念,但是在後面的描述上也都是在強調作業系統與硬體的隔離。
 
gartner給過一個相對簡單但是很準確的定義(記不住原文,大概含義):將不同的資源和邏輯單元剝離,形成鬆耦合的關係的技術。
 
其實根據計算過程中的邏輯組成部分,將他們的緊耦合,變為鬆耦合(耦合大家學過軟體工程的都應該懂什麼意思了吧)。其實“耦合”的概念是計算機領域一直研究的內容:
  • 物件導向的設計講,不同的類應該是鬆耦合的,而類內部的資訊應該是緊耦合的,這樣可以更好地應對需求變化,快速動態地調整,構建新的系統; 
  • web service其實也是將傳統的緊耦合功能,轉變為可以靈活組織的,像搭積木一樣的鬆耦合關係,使得我們可以將很多大家都需要的功能通用化,我們可以利用不同的服務組合構建我們的應用。
  • 而虛擬化,只是對計算環境這個更高層次的概念進行“鬆耦合化”,讓我們的IT應用就像我們攢機器一樣,幾個通用的標準模組搭起來就能夠成一個滿足特定需求的計算環境。
我們可以看到,“鬆耦合化”是很多很熱的技術的主線,之所以它是計算機研究中的重要元素之一,就是因為它會給我們提供更多的靈活性!
 
舉個簡單的比喻:計劃經濟時代,我們都是每個工廠有自己的食堂,自己的澡堂,託兒所,幼兒園,學校等等,這就好比我們的計算環境,或者是一個軟體,所有的組成部分都緊緊的配合在一起,是比較全,對於自己工廠的員工來說很方便;但是對於工廠來說,這個很不經濟,成本很高,因為什麼都要做,什麼都做不好,而且沒有規模經濟,自然就不好,對於社會來說,浪費非常多。後來市場經濟,所有的都專業化了,於是我們一個寫字樓的所有人都可以去樓下的食堂吃飯,也可以去別的地方吃飯;洗澡也有專業澡堂了,託兒所與學校也分出去了。這樣我們的選擇性多了,可以選好的地方或者合適的地方,另外專業化也提高了效率,社會浪費也少了,這就跟我們的web service或者虛擬化一樣,每個公司或者個體都是提供一個專業服務,效率高,成本低;而你要做一種事情,可以有多種選擇,選擇最合適你的,也讓你整體成本地,而且更好地完成任務。對於社會來說,浪費少了,而且更靈活了。
 
世間諸多事情都一脈相通,而諸多廠商所謂的“敏捷IT”,本質上就是利用“鬆耦合”帶來的靈活性來實現的,實現“IT系統的計劃經濟向市場經濟的過渡!”。而這就是為什麼,在計算環境層面,我們需要“虛擬化”技術的原因。
 
但是,計算環境的虛擬化可不僅僅指的是 硬體與作業系統的鬆耦合,它是更大的一個概念,包含更廣泛的內容。