2011年12月5日 星期一

虛擬化技術淺論:(1) What is virtualization?


虛擬化技術(Virtualization)於近年雲端運算(Cloud computing)逐漸熱門之後,漸漸廣為討論。實作雲端運算的基礎架構的方式很多,並非得利用虛擬化技術不可,而虛擬化技術除了在雲端運算的應用外,也有著許多其他的應用層面。

本系列文章是整理作者對虛擬化技術的所見所聞,希望讓讀者能夠了解虛擬化技術的前世今生,並以一個更廣泛的角度來看虛擬化技術。當然如果敘述中有缺漏或理解錯誤的部份,也歡迎諸位指教。

What is "virtualization"?

要談虛擬化技術(Virtualization),或是要談虛擬機器(Virtual Machine)是什麼之前,我們可以先來探討「虛擬」這個字眼在電腦科學領域到底有什麼含義?

在電腦科學領域當中,有著許多帶有"Virtual"字眼的技術,舉凡「虛擬記憶體」(virtual memory)、「Java虛擬機」(Java Virtual Machine)、「虛擬私人網路」(Virtual Private Network)。這些看似無關的技術之間,都有著共同的"virtual"字眼。他們雖然在電腦科學當中分屬不同子領域,但是都蘊含著「把本來不是......的東西,透過軟體來讓他們變成都是......」,例如VPN,他把本來在實體網路上並不是在同一個網域當中的電腦,透過軟體的方式讓他們看似待在同一個網域。又或像JVM,本來在不同種CPU、OS運行的可執行檔都要事先編成對應的Native code才能執行,例如要在Windows for x86、Linux for x86、Linux for ARM需要分別編成三種不同的可執行檔才能運行,但是透過JVM,我們能夠只要編成一樣的Bytecode,在執行的時候再透過JVM去轉成Native code即可,透過JVM我們把本來不是同一種的Runtime(處理器、OS不同),讓他看似變成同樣的Runtime。

What benefit is from "virtualization"?

那為何我們會需要虛擬化技術呢?本來既有的硬體配置不好嗎?為什麼沒事要用軟體去把實體不存在的環境用軟體模擬出來呢?

通常我們會使用虛擬化技術主要著眼於下列幾點的好處:

  • 資源分享:
    以RAID為例,我們可以把兩顆實體500GB的硬碟透過RAID讓使用者看成1TB去存取,那假設本來每顆硬碟都只剩下30GB的容量,亦即兩顆共剩60GB的容量,但是使用者想放一個50GB的檔案卻無法放入,透過RAID把儲存空間虛擬化,使用者就可以把50GB的檔案放入,而讓後端的虛擬化技術去處理檔案區塊放置的問題,這就達到了資源分享的效果。
  • 安全性考量:
    以JVM為例,我們可以把網路上下載來不確定安不安全的程式放在JVM裡面跑,由於JVM提供了一整套的Runtime environment,在裡面跑的程式不會直接和OS與硬體溝通,這也增加了一層防護,若在JVM裡面跑的程式Crash或是想去越權探知OS當中的訊息,這些越權行為都會被JVM擋住。
  • 彈性:
    以JVM為例,用Java寫程式的程式設計師,不需要為了Windows for x86、Linux for x86、Linux for ARM分別編出三套不同的執行檔再分送出去,只需要編出一組Bytecode,就能在各種執行環境下執行。在程式開發的階段,也不需要去思考這隻程式是在什麼OS、什麼處理器下運行,為高階語言程式開發者增加了許多彈性。
  • ...

虛擬化技術的分類


目前談虛擬化技術通常大多指涉系統虛擬化(System virtualization),意即像VMware、Parallels、Xen、KVM等System VM,然而系統虛擬化並非虛擬化技術的全部,通常我們談虛擬化技術多分為下列三種:

  • Process virtualization:
    是以讓一個Process能夠跨平台運行為目標的虛擬化技術。例如Java Virtual Machine、Apple Rosetta(Apple設計能讓原本運行在PowerPC處理器上的可執行檔能夠無痛運行在x86的處理器上的Process VM)
  • Device virtualization:
    是針對周邊裝置來進行虛擬化,用軟體來模擬周邊裝置,或是將實體上為多台的周邊裝置透過軟體讓使用者看起來只有一台等等。例如:RAID、VPN
  • System virtualization:
    是以讓一個Operating System能夠運行在別的OS上,或是能夠讓一台實體機器同時運行多個OS為目標。例如:VMware、Parallels、Xen、KVM等

我們接下來將會以System virtualization為繼續討論的主題。



To be continue...


沒有留言:

張貼留言