實現雲端運算的關鍵基礎:虛擬機 (Virtual Machine)

虛擬機 (Virtual Machinie) 在雲端運算的三種服務中,是一種 IaaS 層級的服務,提供了基礎架構給開發者及 IT 人員,可以在上面安裝、運行各種應用程式。

雲端運算之所以能夠統整運算資源、彈性調配資源、應付大量運算需求,關鍵就在於虛擬化與分散式運算技術,少了這兩項技術,雲端運算可能就無法在今日實現。

自從 IBM 在 2014 年把自家的半導體業務賣給格羅方德後,便極力往雲端運算與人工智慧上積極轉型。在這樣的背景之下,「虛擬機」 (Virtual Machinie) 也因而成了 IBM 相當重要的業務。

到底什麼是虛擬機?它的出現是為了解決什麼樣的問題?

事實上早在 1960 年代,IBM 也是商用上第一個實踐虛擬化技術的公司,只是沉寂了這麼久的虛擬化 (Virtualization) 技術,為什麼又會在近幾年捲土重來、重回熱門呢?

今天將為大家介紹虛擬化技術的由來與發展,讓讀者能對整個雲端運算中相當重要的虛擬化技術 (和 IBM 到底在賣什麼)有個初步的概念。

 

虛擬機出現的時代背景

虛擬機出現在 1960 年代,為了提高珍貴的硬體資源 (主機) 利用率,促使企業對虛擬技術的研究與應用。而IBM 在虛擬化方面的歷史由來已久,最早的虛擬化提出者和實施者就是 IBM。

1960 年代時,個人電腦 (Personal Computer) 尚未出現,只有政府與大型企業級的大型主機 (Mainframe Computer) ,主要用於大量資料和關鍵專案的計算,例如銀行金融交易及資料處理、人口普查、企業資源規劃等。

該時,IBM 擁有穩定的軍方與金融業客戶,市佔率高達 70%。以 IBM 的 Z 系列大型主機來說,由於強悍、穩定的優勢,一直處於一個霸主地位。但當時在大型主機的應用上,面臨了幾個問題:

問題 1. 無法多人/多應用共享效能強悍的主機資源

大型主機造價昂貴,價格從數十萬到數百萬美元不等 (五十年前的數百萬美元… ),客戶購買一台後就只能專機專用、無法共享。

一台強大電腦主機能做 30 台電腦的事,即便價格高昂、效能強悍,卻有大部分效能是閒置的,不但無法發揮大型主機的真正效能優勢,也讓讓許多客戶望之卻步。

 

問題 2. 新應用服務的安裝、測試不但耗時,風險又高

想像你今天是一位在 IBM 任職的 Sales,客戶以政府或大型金融業者為主,比如美國軍方或花旗銀行。

作為一個優秀的 Sales,你通常都會在公司有新產品上架時,鼓吹客戶再砸一次大錢:「這個新系統的功能比原有的舊系統還強,保證能提升貴公司的業務效率、加速你們對客戶的服務… (下略五千字) 」

面對你的推銷,花旗銀行的 CTO 雖然有點心動、卻也表示猶豫:「我也覺得你們的新產品不錯… 但我們每日在運行的業務都是幾億的規模,你敢保證你裝新系統上去的時候不會出差錯、導致我們業務全部停擺嗎?這誰責任誰負得起。」

在這邊,讀者可能會好奇:如果怕新系統有問題,不買不就好呢?讓我們再退一步,假設花旗銀行不購買新系統,但舊系統卻出了差錯,需要修復 Bug 呢?

要修改一個作業系統是一件十分困難的事情,作業系統不但是一個大型的複雜程式、又負責監督和執行電腦上的工作排程與資源管理,只要一個不小心、就很有可能毀掉整個機器的檔案系統。安裝與測試一個大型的新系統通常得耗費數週到數月不只。

然而作業系統又是在整台機器上運行和進行控制,要對作業系統修改和測試、就必須把系統停下來不能運作;24 小時都在運作的金流系統是要怎麼停止運作?

甚至是供應鏈系統、顧客管理系統… 如果修改中間發生錯誤,導致整個系統當機、重要資料通通流失,造成的損失是極為龐大的… 。

要如何才能在一個安全的環境進行新系統的試行?或舊系統的修改測試?

 

虛擬機 (Virtual Machine) 的基本原理

根據「切割硬體資源進行彈性分配」與「安全的系統測試環境」等需求的背景下,,IBM 開發出了「虛擬機」(Virtual Machine) 作為解方。

運用軟體技術、如 CPU 排程與虛擬記憶體,作業系統就能創造出一個多處理程式的假象:每個程式都具備自己的記憶體 (雖然是虛擬的),且在屬於自己的處理器上面運作。

也就是藉由軟體虛擬技術,提供一個與底層硬體功能一模一樣的介面,這樣系統就能為每個程式都提供了一份底層硬體的 Copy,稱為虛擬機 (Virtual Machine)。簡單來講,就是用軟體技術模擬出一個硬體的環境。

若用更好懂一點的比喻… 現在你有一台實體電腦,可以視為鳴人的本體  (硬體, Host Hardware)

透過影分身之術 (虛擬化, Virtualization) 變出來分身 (虛擬機, Virtual Machine),共享鳴人這個單一的實體資源、查克拉都是源於鳴人。但把其中一個影分身打倒,並不會傷到鳴人本身。

來看看虛擬機是怎麼解決上述提到的兩個問題吧:

問題 1. 無法多人/多應用共享效能強悍的主機資源

IBM 將一臺大型機通過虛擬技術,分割為幾臺機器為客戶的不同業務服務。

虛擬機可允許一台實體主機同時執行多個作業系統,方法就是在一台實體主機內執行多個虛擬主機,每一台虛擬主機既可以互相用線路連線、又可以獨立運作,互不干涉,在佔用面積、耗電量、空調、維護人事成本上,都能做到有效的節約。

更進一步,也可將多台實體主機合併成一台大的資源池 (Resource Pool),統籌管理、分配在上面的虛擬機。

如此一來,既能發揮大型主機的優勢,又能幫助客戶省下一大筆開銷,可謂兩全其美的一個方案。

問題 2. 新應用服務的安裝、測試不但耗時,風險又高

基於這種虛擬機器,使用者可以執行任何作業系統,比如可以在他們「個人的」虛擬電腦上執行兩個不同的作業系統 (也被稱為「Guest」)。

這樣的話,新版的實驗性作業系統就可以與舊版的較穩定版本一同在單獨的虛擬機器上執行;IBM 就在執行於舊版的虛擬機器上的虛擬機器上偵錯它新版的虛擬機器作業系統。

 

虛擬機的基本名詞與類型

  • 虛擬機的基本名詞

> Host (鳴人的查克拉)

實際的作業系統和硬體環境。(Underlying hardware system or Operating System)

> Virtual Machine Manager (鳴人的影分身忍術) 

簡稱 VMM、又叫 Hypervisor,用以建立,並管理、執行虛擬機的模組。

VIRTUAL MACHINE (鳴人的影分身) 

透過 VMM 創造出來、模擬底層硬體 (鳴人本人) 的軟體。

> Guest (鳴人的分身用來打架或做事)

運行在虛擬機上的作業系統或軟體程式。(Process provided with virtual copy of the host)

  • 關於 Kernel Mode 與 User Mode 的備註:

作業系統可以在同一個時間內執行多個程式。為了不讓程式任意存取硬體資源、或修改到其他使用者的程式, 作業系統的運作模式會至少區分出兩種模式:Kernel Mode 與 User Mode。

(Intel x86 的保護模式定了四種等級,但是 Linux 只用到 Kernel Mode 及 User Mode 兩種)

許多 CPU 除了執行指令外,還會為指令訂定多種不同的優先等級。任何可能造成作業系統重大危害的運作或指令,可以設為「特權指令」(privileged instructions),優先權最高。

而特權指令只能在 Kernel Mode 之下執行,不可在 User Mode下執行。若 User Mode 企圖執行,會中斷並通知作業系統的 Kernel, Kernel 就會把該 User 程式砍掉。

 

  • Virtual Machine Manager (VMM) 的建置

 

Type 1: bARE-METAL Hypervisor (裸機HYPERVISOR)

I .原理:此 VMM 運行在作業系統的 Kernel Mode。也就是做一個跟作業系統一模一樣的軟體服務,VMM 直接安裝於空機或新機上,
直接掌控硬體資源,硬體無須先有作業系統,這也是它被稱為「裸機」的原因。

II. 特點:需要硬體支持、VMM 直接作為主作業系統、運行效率高。

III. 產品:包括市面上的 VMware ESX、Joyent SmartOS、Critix XenServer。

 

> Type 2: hOSTED Hypervisor

I. 原理:此 VMM 運行在作業系統的 User Mode,也就是 VMM 運行在傳統的作業系統上、就像其他電腦程式。VMM 需先有 Windows 或 Linux  等作業系統在機器上才能安裝。

II. 特點:VMM 作為應用程式運行在主作業系統環境內,運行效率一般較 Type 1 還低。

III. 產品:包括市面上的 VMware Workstation、 VMware Fusion、Parallel Desktop、Oracle Virtual Box 等。

(對於那些買 Mac 只是為了外觀潮、想要在 Mac 上使用 Windows 作業系統的使用者來說,Fusion 就是一種 Type-2 Hypervisor 的理想選擇。)

Bare-Metal Hypervisor 在效能、穩定度、安全性優於 Type 2 Hypervisor,所以企業應用的虛擬化解決方案多為 Bare-Metal 形式。另一方面,Type 2 Hypervisor 的成本相對較低,這使得其更加適合於小型的測試環境或個人使用。

對虛擬機有興趣的讀者,也可以在自己的電腦上試著裝一台玩玩看。由於虛擬機和實體電腦是各自獨立的,要瀏覽容易中毒的色情網站、下載看起來有病毒的遊戲或危險檔案、不小心把電腦格式化… 以上,通通都不會影響實體電腦的環境和資料。是不是很方便呢?

 

近年來虛擬化技術重新被重視的原因:雲端運算

為什麼早在 1960 年代虛擬技術就開始發展了,卻一度乏人問津,直到近年來才又熱門起來了呢?這是因為到了 1980 – 1990 年代,Multiprogramming 作業系統的普及、同時硬體成本大幅下降。

講白點,凡是有冠上「虛擬」二字的,都是窮人的玩意兒。比如「虛擬實境」(Virtual Reality) 好了,就是因為沒錢出國,才在自家小房間內帶著頭盔假裝到歐洲旅遊,有錢人機票訂好、就直接飛過去享受瑞士鄉村風光了。

想當然爾,真實到歐洲玩的真實體驗,和進入虛擬實境的體驗當然是不可比的──能實際搭訕超正的東歐妹子啊啊啊啊!同理,就是因為沒錢買實體的機器才會去裝虛擬機啊… (想想為什麼你不直接買一台 PS3 、而要用模擬器在 PC 上玩戰神系列呢?)

也因此在硬體價格下跌後,大家都直接買一台電腦就行了,虛擬機的優勢相對不彰,使得人們對虛擬化技術的研究熱情開始冷卻了下來。

為了要瞭解現今虛擬化技術重回熱門的理由,就讓我們來看看現今資料中心 (Data Center) 的現狀與挑戰。

傳統資料中心主要是使用一個龐大的機房,在機房裡面建置了機架、散熱等基礎設施。在這些基礎設施基礎之上,還有一些網絡設備將伺服器連結起來。

這樣的 IT 資源分配模式會產生三個缺點:

問題 1. 根據統計,伺服器的平均使用率低於 30%,但真正遇到高峰期的業務量時、現有伺服器仍無法滿足需求

也就是說有 70% 的時間,伺服器是處於閒置的狀態。然而大部分的時間雖然處於閒置,但到了某些時段的業務量高峰期時,光是目前的伺服器又無法滿足高峰期的工作需求;只為了滿足這些短暫的高峰期需求,可能企業還得要額外去購買多幾台的伺服器。

就像養了一堆工人,平常的時候只有用到  2、3 個人,其他人閒置還是照樣領薪水;但開始有一堆業務要搬運東西的時候,光是目前的這些人又不夠。無法彈性調整,造成了嚴重的資源不均與浪費問題。

Amazon 資料中心的伺服器 CPU 使用率根據統計,僅有 7.3% 的平均使用率。(2012 年)

問題 2. 資源調整速度緩慢,難以即時響應業務需求

當企業想要佈署一個新的應用服務在資料中心 (比如企業想要買一個新的工廠存貨管理系統) ,整體費用──包括採購、安裝、測試、上線的過程需要花費數週、甚至是數月的時間,耗時又價格高昂,無法即時響應企業的業務需求。

(現在工廠出貨就立刻需要存貨管理系統,結果跟我說一個月後才能佈署完畢?! …)

 

問題 3. 冰山式的費用支出

目前我們能看到的花費,即為了滿足高峰期業務需求、而去採購的新伺服器設備,或企業成長、必須購買的新軟體服務,如 ERP、CRM 系統。

然而這些看似昂貴,卻僅只佔了真正支出費用不到 30%。至少占總支出 70% 以上的支出,包括日常營運需要的機房冷氣、電力等基礎設施維護,與讓服務 24 小時運作的 IT 人員投入。 (就跟買車真正貴的不是車子本身,而是買完車後每年的保養、維護、停車位… 等支出費用的道理一樣)

這樣的支出結構帶給整個資料中心營運一個相當大的挑戰──如何節省日常的運營支出,讓更多預算能夠投入到基礎設施或應用服務的更新上?

看到上面現金資料中心面臨的挑戰,是不是和 IBM 當年面臨的問題很類似呢?你想的沒錯,答案就是靠虛擬化技術來解決這些問題!

當中小企業或新創的公司業務尚不穩定時,假設買一台好一點 (也貴一點) 的伺服器好了,伺服器可以用十年、結果公司三年就倒閉;或買完之後才發現訂單根本沒那麼多,機器的使用率過低。

但假設一開始沒錢買伺服器,只買了運算功能最低等級的機器,結果業務蒸蒸日上、訂單不斷湧進來,財報、供應鏈系統因為流量過高爆掉、沒辦法運作。

要怎麼辦呢?不用自己買伺服器,只要跟中華電信租借雲端空間就行了:「安安,我要開一台 VM 養在你的 Server 上,CPU 希望有 1.17 GHz、RAM 要 4GB、作業系統要裝 Windows、軟體要 Email Server、Office … 」

中華電信 hicloud 服務的規格與費用,可依 CPU 與作業系統的使用需求進行租借。

不但硬體環境、想安裝的軟體通通能客製化,還可以依照需求彈性調整租借的 VM 數量,比如淡季只租 100 台虛擬機、旺季就加倍開到 200、300 台。

假設現在有花輪和小丸子兩個客戶好了,也可以依據客戶需求 (付錢的多寡) 把 CPU 資源集中給花輪;同時把小丸子 (付的錢較少) 工作的優先權和 CPU 時間降低。也就是達到資源對各個虛擬機的的動態調度和分派!

對於 IBM 來說,也可以把「伺服器 + 虛擬機 + 作業系統 + 應用程式」加起來作為雲端運算的 Total Solution ,可以單賣伺服器、單賣虛擬機,或「虛擬機 + 作業系統」、「作業系統 + 應用程式」之類的搭配銷售,隨客戶需求彈性調整。

(看完這篇文章,想去 IBM 當 Sales 嘴砲看看了嗎 www)

 

總結

讓我們來總結一下虛擬機 (Virtual Machine) 的好處吧:

  1. 提供一個可供測試的隔離環境,可用來測試病毒或新型的作業系統。另外,當工程師在測試和調教新的作業系統時,同時間其他使用者或程式仍可正常運作,不會受到影響而被迫停頓下來。
  2. 能在同一台機器上運行多個作業系統,比如同時運行 Windows 和 Linux,方便跨平台開發者。
  3. 充分發揮伺服器的性能,達到雲端運算的彈性調度理想。

虛擬機的缺點是──效能必定比實體機器還差。想想為什麼企業不直接買 Server 建機房,要去跟雲端服務業者租借雲端空間、開虛擬機呢?只有兩個字:沒錢。

再重申一次:凡是叫 Virtual 的,不管是 Virtual Machine 還是 Virtual Reality,通通都是窮人的玩意兒。(雖然 VR 頭盔現在要兩萬塊,但廠商就是希望它未來能普及到家家戶戶都持有、在家就能”感受”去歐洲旅遊的快樂 QQ)

關於虛擬機 (Virtual Machine) 的介紹就先到這邊為止啦!事實上,虛擬機只是虛擬化技術 (Virtualization) 的其中一種而已,還有針對作業系統虛擬化、 CPU 虛擬化、記憶體虛擬化、I/O 設備虛擬化… 等不同層次與不同種類的虛擬化技術。

由於牽涉到蠻多作業系統的基本原理,實在是一個蠻大的坑,未來有機會再與大家更進一步討論虛擬化技術與其應用。(慢慢填坑…)