1. 程式人生 > >雲端計算技術解析 Amazon EC2 的幕後

雲端計算技術解析 Amazon EC2 的幕後

今天新聞裡報導說,VMWare 拆資 10 億 5 千萬美元,收購 Nicira。Nicira 是一家創業公司,專注於網路虛擬化[注],主打產品是 vSwitch。

今天新聞裡報導說,VMWare 拆資 10 億 5 千萬美元,收購 Nicira。Nicira 是一家創業公司,專注於網路虛擬化,主打產品是 vSwitch。雲端計算[注]產業是技術密集型產業,涉及的技術眾多。要了解雲端計算產業格局,就必須瞭解各家企業主打產品,所提供的核心價值。從而理解各家企業,在整個雲端計算產業鏈中所處的位置,以及與上下游企業的相互關係。

這個文章系列的後續章節,將詳細討論網路虛擬化的問題。Nicira 公司在網路虛擬化方面,引領全球技術前沿。看來我們這個文章系列的寫作進度,得提提速了。

我們在上一節,討論了四種雲端計算的服務方式,出租裸機、出租虛擬機器、出租網站、出租行業服務。Amazon EC2 提供的雲端計算服務,就是其中第二種方式,出租虛擬機器

OpenStack 被視作是 Amazon EC2 的開源版。OpenStack 自稱是“用來搭建雲端計算平臺的開源軟體”。如果追問一句,用 OpenStack 搭建好了雲端計算平臺以後,能提供什麼服務?答案是,如同 Amazon EC2 一樣,提供虛擬機器租賃服務。

VMWare 公司的產品,雖然名目繁多,但是也是圍繞搭建雲端計算平臺,提供虛擬機器租賃服務這個總目標。

所謂提供虛擬機器租賃服務,更明確的解釋方式是,使用者提交什麼輸入,雲端計算系統返回什麼輸出。

輸入:使用者在任何電腦的瀏覽器上,通過訪問雲端計算中心的網頁,先註冊,確定登入姓名和密碼。然後輸入希望租賃的虛擬機器的作業系統及其版本,還有虛擬機器的 CPU 的核心個數、記憶體空間、硬碟空間、實時頻寬、以及流量限額。

輸出:雲端計算中心根據使用者的需求,生成相應配置的虛擬機器,然後把虛擬機器的域名或 IP 地址,返回給使用者。使用者得到這些資訊後,可以通過 SSH、遠端桌面或者 VNC [1] 這樣的遠端訪問(Remote Access)工具,遠端登入並使用執行在雲端計算中心的虛擬機器。

Amazon EC2、OpenStack 和 VMWare 是如何實現這個功能的呢?彆著急看答案,先想想,假如我們是 Amazon EC2、OpenStack 和 VMWare 的系統設計師,我們該如何設計後臺系統?

我們自己先 DIY (Do It Yourself),然後把我們自己的設計,與 Amazon EC2、OpenStack 和 VMWare 的系統架構,做橫向對比,就容易領悟 Amazon EC2、OpenStack 和 VMWare 的系統設計的高妙之處。

當然,任何系統的設計,都會有不足之處。分析缺陷的一個有效方法,也是橫向對比。

我們在自行設計 Amazon EC2 那樣的系統之前,先想想,假如沒有全自動的後臺系統,而是靠人工完成,該怎麼做?換句話說,當雲端計算中心的系統管理員,收到使用者提交的請求時,他該執行哪些操作?

在雲端計算中心開始為使用者提供服務之前,系統管理員需要預先做一些準備工作。當雲端計算中心購置了伺服器裸機以後,系統管理員需要給這些裸機,安裝虛擬化系統。

安裝虛擬化系統包括以下三步。

1. 選擇虛擬化系統。

虛擬化系統是一個軟體系統,目前常用的虛擬化系統有三種,VMWare、Xen、和 KVM。各種虛擬化系統的比較,可參考 [2]。

其中 KVM 是開源軟體,不僅操作簡單,而且系統執行效率較高。更難得的是,KVM 系統結構十分精巧、程式碼量小。

2. 安裝虛擬化系統。

以 KVM 為例,在裸機上安裝 KVM,只需要做兩步。1. 安裝 Linux OS,2. 在 Linux 上安裝 KVM,參考安裝手冊 [3]。

3. 設定網路。

執行在 KVM 之上的虛擬機器例項,與外界網路的資料傳輸,必須經過物理網絡卡。所以,需要做相應的系統設定,使虛擬機器例項與物理網絡卡通訊。設定網路的操作步驟並不複雜,也參見安裝手冊[3]。

這裡有個疑問,為什麼在第二步“安裝虛擬化系統”的時候,不一步到位,把網路也設定好?其實,的確是可以兩步並一步,在“安裝虛擬化系統”時,順帶完成網路的設定。

安裝手冊 [3] 把網路設定單列出來,或許是基於以下考慮。虛擬機器例項與物理網絡卡的通訊,需要用到 vSwitch 技術,但是 vSwitch 的實現方式有多種,包括 Linux Bridge 和 Open vSwitch 等等 [4]。

對於大多數情況,Linux Bridge 基本上能夠滿足需要,所以安裝手冊 [3] 只介紹了 Linux Bridge 的配置方法。但是也有觀點認為,在某些場合下,例如當虛擬機器跨機房遷移時,需要更強大的 vSwitch 的技術實現,例如 Open vSwitch [5]。

關於 vSwitch,以及 Open vSwitch、OpenFlow 等等話題,我們將在後續有關虛擬網路的文章中,詳細討論。

當雲端計算中心,添置了伺服器裸機之後,系統管理員需要執行上述三步操作。這些操作完成以後,新添的伺服器就可以為使用者,提供虛擬機器租賃業務了。

1. 當系統管理員接收到使用者提交的需求後,他根據用戶指定的作業系統及其版本,把相應的作業系統安裝光碟,插入伺服器光碟機。

或者,系統管理員先把作業系統安裝光盤裡的所有內容,匯出成為一個 ISO 映象檔案。這個 ISO 映象檔案,不僅包含安裝光碟上的所有內容資料,而且記錄著每一段內容資料,儲存在光盤裡的哪一個扇區(Sector)。然後,他把這個 ISO 檔案拷貝到伺服器本地檔案系統中。

2. 系統管理員根據使用者提交的,虛擬機器所需配置的 CPU 核心個數、記憶體空間、硬碟空間、以及實時頻寬,通過呼叫 Linux 相應工具,啟動虛擬機器。操作步驟不復雜,也參見操作手冊 [3]。

這裡有兩個問題。

1. 假如開啟一個虛擬機器例項後,使用者在這個虛擬機器例項裡,下載並儲存了某個內容檔案,例如一段視訊。並且,他安裝了某個應用軟體,例如 Apache Web Server。然後他讓 Apache 運行了一段時間,產生了一些狀態檔案,例如日誌檔案。再然後,虛擬機器例項被關閉,或許是被使用者或系統管理員主動關閉的,也可能是因為故障而宕機的。

問題是,這個虛擬機器例項能夠被重啟嗎?虛擬機器例項被重啟後,使用者先前儲存的視訊等等內容檔案、安裝的 Apache Web Server 等等應用軟體、以及應用軟體執行中產生的日誌等等狀態檔案,有沒有被儲存?

答案是,可以重啟這個虛擬機器例項,並且使用者先前儲存的所有內容檔案、安裝的所有應用軟體,以及在應用軟體執行過程中,產生的所有狀態檔案,通通被儲存,可以重新使用。

原理是,在使用者提交的申請租賃虛擬機器例項的請求中,有一個引數是該虛擬機器例項佔用的硬碟空間的大小。當系統管理員在某一臺物理伺服器上,呼叫系統指令,讓 KVM 虛擬化系統,為使用者建立虛擬機器例項時,KVM 虛擬化系統在該物理伺服器的本地硬碟中,建立了一個檔案,作為這個虛擬機器例項的映象檔案(Image)。

這個映象檔案的大小,基本上等於使用者指定的虛擬機器例項佔用的硬碟空間的大小。在虛擬機器例項看來,這個映象檔案,就相當於自己的硬碟,所以映象檔案又被稱為虛擬硬碟。在這個映象檔案或者虛擬硬碟中,虛擬機器例項可以設立不同的虛擬硬碟分割槽,分割槽中可以設立資料夾,資料夾中可以再設立子資料夾,或者存放檔案。

當先前的虛擬機器例項被關閉以後,可以在同一臺物理伺服器上,根據虛擬機器例項的名稱,重啟該虛擬機器例項。這時新的虛擬機器例項,將會找到先前那個虛擬機器例項所使用的虛擬硬碟,也就是映象檔案。

於是,當新的虛擬機器例項開啟以後,將會看到先前虛擬機器例項,它儲存的所有內容檔案、安裝的所有應用軟體、以及應用軟體在執行過程中產生的所有狀態檔案。

2. 問題二,假如先前的虛擬機器例項被關閉以後,能不能在另外一臺物理伺服器上,重啟該虛擬機器例項?

答案是,可以在其它物理伺服器上,重啟虛擬機器例項。但是有兩個前提,1. 這兩臺物理伺服器,必須安裝相同的虛擬機器系統,例如某版本的 KVM。2. 必須把先前那個虛擬機器例項的映象檔案,也就是它的虛擬硬碟,從第一臺物理伺服器的檔案系統,拷貝或者掛載到(mount)到第二臺物理伺服器的檔案系統中去。

原理是,假如我們有兩臺電腦,當我們把第一臺電腦的硬碟,拆下並安裝到第二臺電腦上去。然後開啟第二臺電腦,我們將會看到與第一臺電腦一模一樣的作業系統、檔案、還有應用軟體。映象檔案對於虛擬機器例項來說,就是它的硬碟。遷移虛擬機器例項,可以通過遷移它的虛擬硬碟,也就是映象檔案來實現。

我們之所以不厭其煩地介紹手工設定虛擬化系統、並執行虛擬機器例項的步驟,是因為 Amazon EC2、OpenStack、以及 VMWare 等等系統,它們的主要功能,是讓軟體系統替代人工,自動化地去完成這些操作。

類似於 Amazon EC2 的自動化系統並不難設計。事實上,前述的準備工作,也就是安裝虛擬化系統的三個步驟,是在添置物理伺服器時完成的,是一次性的操作,所以手工完成這些準備工作,無妨大雅。

真正需要實現自動化的,僅僅限於提供虛擬機器租賃業務的兩個步驟,1. 提供作業系統安裝光碟,或相應的 ISO 檔案,2. 根據使用者提交的虛擬機器資源配置,建立虛擬機器例項。

我們在下一節,將自行設計這樣一套系統,然後把它與 Amazon EC2、OpenStack 等等橫向對比。大家會驚奇地發現,我們自行設計的系統,在總體上,與 Amazon EC2、OpenStack 等等系統非常相似。