云計算技術(shù)解析 Amazon EC2 的幕后
今天新聞里報導(dǎo)說,VMWare 拆資 10 億 5 千萬美元,收購 Nicira。Nicira 是一家創(chuàng)業(yè)公司,專注于網(wǎng)絡(luò)虛擬化,主打產(chǎn)品是 vSwitch。
今天新聞里報導(dǎo)說,VMWare 拆資 10 億 5 千萬美元,收購 Nicira。Nicira 是一家創(chuàng)業(yè)公司,專注于網(wǎng)絡(luò)虛擬化,主打產(chǎn)品是 vSwitch。云計算產(chǎn)業(yè)是技術(shù)密集型產(chǎn)業(yè),涉及的技術(shù)眾多。要了解云計算產(chǎn)業(yè)格局,就必須了解各家企業(yè)主打產(chǎn)品,所提供的核心價值。從而理解各家企業(yè),在整個云計算產(chǎn)業(yè)鏈中所處的位置,以及與上下游企業(yè)的相互關(guān)系。
這個文章系列的后續(xù)章節(jié),將詳細討論網(wǎng)絡(luò)虛擬化的問題。Nicira 公司在網(wǎng)絡(luò)虛擬化方面,***全球技術(shù)前沿??磥砦覀冞@個文章系列的寫作進度,得提提速了。
我們在上一節(jié),討論了四種云計算的服務(wù)方式,出租裸機、出租虛擬機、出租網(wǎng)站、出租行業(yè)服務(wù)。Amazon EC2 提供的云計算服務(wù),就是其中第二種方式,出租虛擬機。
OpenStack 被視作是 Amazon EC2 的開源版。OpenStack 自稱是“用來搭建云計算平臺的開源軟件”。如果追問一句,用 OpenStack 搭建好了云計算平臺以后,能提供什么服務(wù)?答案是,如同 Amazon EC2 一樣,提供虛擬機租賃服務(wù)。
VMWare 公司的產(chǎn)品,雖然名目繁多,但是也是圍繞搭建云計算平臺,提供虛擬機租賃服務(wù)這個總目標。
所謂提供虛擬機租賃服務(wù),更明確的解釋方式是,用戶提交什么輸入,云計算系統(tǒng)返回什么輸出。
輸入:用戶在任何電腦的瀏覽器上,通過訪問云計算中心的網(wǎng)頁,先注冊,確定登錄姓名和密碼。然后輸入希望租賃的虛擬機的操作系統(tǒng)及其版本,還有虛擬機的 CPU 的內(nèi)核個數(shù)、內(nèi)存空間、硬盤空間、實時帶寬、以及流量限額。
輸出:云計算中心根據(jù)用戶的需求,生成相應(yīng)配置的虛擬機,然后把虛擬機的域名或 IP 地址,返回給用戶。用戶得到這些信息后,可以通過 SSH、遠程桌面或者 VNC [1] 這樣的遠程訪問(Remote Access)工具,遠程登錄并使用運行在云計算中心的虛擬機。
Amazon EC2、OpenStack 和 VMWare 是如何實現(xiàn)這個功能的呢?別著急看答案,先想想,假如我們是 Amazon EC2、OpenStack 和 VMWare 的系統(tǒng)設(shè)計師,我們該如何設(shè)計后臺系統(tǒng)?
我們自己先 DIY (Do It Yourself),然后把我們自己的設(shè)計,與 Amazon EC2、OpenStack 和 VMWare 的系統(tǒng)架構(gòu),做橫向?qū)Ρ龋腿菀最I(lǐng)悟 Amazon EC2、OpenStack 和 VMWare 的系統(tǒng)設(shè)計的高妙之處。
當然,任何系統(tǒng)的設(shè)計,都會有不足之處。分析缺陷的一個有效方法,也是橫向?qū)Ρ取?/p>
我們在自行設(shè)計 Amazon EC2 那樣的系統(tǒng)之前,先想想,假如沒有全自動的后臺系統(tǒng),而是靠人工完成,該怎么做?換句話說,當云計算中心的系統(tǒng)管理員,收到用戶提交的請求時,他該執(zhí)行哪些操作?
在云計算中心開始為用戶提供服務(wù)之前,系統(tǒng)管理員需要預(yù)先做一些準備工作。當云計算中心購置了服務(wù)器裸機以后,系統(tǒng)管理員需要給這些裸機,安裝虛擬化系統(tǒng)。
安裝虛擬化系統(tǒng)包括以下三步。
1. 選擇虛擬化系統(tǒng)。
虛擬化系統(tǒng)是一個軟件系統(tǒng),目前常用的虛擬化系統(tǒng)有三種,VMWare、Xen、和 KVM。各種虛擬化系統(tǒng)的比較,可參考 [2]。
其中 KVM 是開源軟件,不僅操作簡單,而且系統(tǒng)運行效率較高。更難得的是,KVM 系統(tǒng)結(jié)構(gòu)十分精巧、代碼量小。
2. 安裝虛擬化系統(tǒng)。
以 KVM 為例,在裸機上安裝 KVM,只需要做兩步。1. 安裝 Linux OS,2. 在 Linux 上安裝 KVM,參考安裝手冊 [3]。
3. 設(shè)置網(wǎng)絡(luò)。
運行在 KVM 之上的虛擬機實例,與外界網(wǎng)絡(luò)的數(shù)據(jù)傳輸,必須經(jīng)過物理網(wǎng)卡。所以,需要做相應(yīng)的系統(tǒng)設(shè)置,使虛擬機實例與物理網(wǎng)卡通信。設(shè)置網(wǎng)絡(luò)的操作步驟并不復(fù)雜,也參見安裝手冊[3]。
這里有個疑問,為什么在第二步“安裝虛擬化系統(tǒng)”的時候,不一步到位,把網(wǎng)絡(luò)也設(shè)置好?其實,的確是可以兩步并一步,在“安裝虛擬化系統(tǒng)”時,順帶完成網(wǎng)絡(luò)的設(shè)置。
安裝手冊 [3] 把網(wǎng)絡(luò)設(shè)置單列出來,或許是基于以下考慮。虛擬機實例與物理網(wǎng)卡的通信,需要用到 vSwitch 技術(shù),但是 vSwitch 的實現(xiàn)方式有多種,包括 Linux Bridge 和 Open vSwitch 等等 [4]。
對于大多數(shù)情況,Linux Bridge 基本上能夠滿足需要,所以安裝手冊 [3] 只介紹了 Linux Bridge 的配置方法。但是也有觀點認為,在某些場合下,例如當虛擬機跨機房遷移時,需要更強大的 vSwitch 的技術(shù)實現(xiàn),例如 Open vSwitch [5]。
關(guān)于 vSwitch,以及 Open vSwitch、OpenFlow 等等話題,我們將在后續(xù)有關(guān)虛擬網(wǎng)絡(luò)的文章中,詳細討論。
當云計算中心,添置了服務(wù)器裸機之后,系統(tǒng)管理員需要執(zhí)行上述三步操作。這些操作完成以后,新添的服務(wù)器就可以為用戶,提供虛擬機租賃業(yè)務(wù)了。
1. 當系統(tǒng)管理員接收到用戶提交的需求后,他根據(jù)用戶指定的操作系統(tǒng)及其版本,把相應(yīng)的操作系統(tǒng)安裝光盤,插入服務(wù)器光驅(qū)。
或者,系統(tǒng)管理員先把操作系統(tǒng)安裝光盤里的所有內(nèi)容,導(dǎo)出成為一個 ISO 鏡像文件。這個 ISO 鏡像文件,不僅包含安裝光盤上的所有內(nèi)容數(shù)據(jù),而且記錄著每一段內(nèi)容數(shù)據(jù),存儲在光盤里的哪一個扇區(qū)(Sector)。然后,他把這個 ISO 文件拷貝到服務(wù)器本地文件系統(tǒng)中。
2. 系統(tǒng)管理員根據(jù)用戶提交的,虛擬機所需配置的 CPU 內(nèi)核個數(shù)、內(nèi)存空間、硬盤空間、以及實時帶寬,通過調(diào)用 Linux 相應(yīng)工具,啟動虛擬機。操作步驟不復(fù)雜,也參見操作手冊 [3]。
這里有兩個問題。
1. 假如開啟一個虛擬機實例后,用戶在這個虛擬機實例里,下載并保存了某個內(nèi)容文件,例如一段視頻。并且,他安裝了某個應(yīng)用軟件,例如 Apache Web Server。然后他讓 Apache 運行了一段時間,產(chǎn)生了一些狀態(tài)文件,例如日志文件。再然后,虛擬機實例被關(guān)閉,或許是被用戶或系統(tǒng)管理員主動關(guān)閉的,也可能是因為故障而宕機的。
問題是,這個虛擬機實例能夠被重啟嗎?虛擬機實例被重啟后,用戶先前保存的視頻等等內(nèi)容文件、安裝的 Apache Web Server 等等應(yīng)用軟件、以及應(yīng)用軟件運行中產(chǎn)生的日志等等狀態(tài)文件,有沒有被保存?
答案是,可以重啟這個虛擬機實例,并且用戶先前保存的所有內(nèi)容文件、安裝的所有應(yīng)用軟件,以及在應(yīng)用軟件運行過程中,產(chǎn)生的所有狀態(tài)文件,通通被保存,可以重新使用。
原理是,在用戶提交的申請租賃虛擬機實例的請求中,有一個參數(shù)是該虛擬機實例占用的硬盤空間的大小。當系統(tǒng)管理員在某一臺物理服務(wù)器上,調(diào)用系統(tǒng)指令,讓 KVM 虛擬化系統(tǒng),為用戶創(chuàng)建虛擬機實例時,KVM 虛擬化系統(tǒng)在該物理服務(wù)器的本地硬盤中,創(chuàng)建了一個文件,作為這個虛擬機實例的鏡像文件(Image)。
這個鏡像文件的大小,基本上等于用戶指定的虛擬機實例占用的硬盤空間的大小。在虛擬機實例看來,這個鏡像文件,就相當于自己的硬盤,所以鏡像文件又被稱為虛擬硬盤。在這個鏡像文件或者虛擬硬盤中,虛擬機實例可以設(shè)立不同的虛擬硬盤分區(qū),分區(qū)中可以設(shè)立文件夾,文件夾中可以再設(shè)立子文件夾,或者存放文件。
當先前的虛擬機實例被關(guān)閉以后,可以在同一臺物理服務(wù)器上,根據(jù)虛擬機實例的名稱,重啟該虛擬機實例。這時新的虛擬機實例,將會找到先前那個虛擬機實例所使用的虛擬硬盤,也就是鏡像文件。
于是,當新的虛擬機實例開啟以后,將會看到先前虛擬機實例,它保存的所有內(nèi)容文件、安裝的所有應(yīng)用軟件、以及應(yīng)用軟件在運行過程中產(chǎn)生的所有狀態(tài)文件。
2. 問題二,假如先前的虛擬機實例被關(guān)閉以后,能不能在另外一臺物理服務(wù)器上,重啟該虛擬機實例?
答案是,可以在其它物理服務(wù)器上,重啟虛擬機實例。但是有兩個前提,1. 這兩臺物理服務(wù)器,必須安裝相同的虛擬機系統(tǒng),例如某版本的 KVM。2. 必須把先前那個虛擬機實例的鏡像文件,也就是它的虛擬硬盤,從***臺物理服務(wù)器的文件系統(tǒng),拷貝或者掛載到(mount)到第二臺物理服務(wù)器的文件系統(tǒng)中去。
原理是,假如我們有兩臺電腦,當我們把***臺電腦的硬盤,拆下并安裝到第二臺電腦上去。然后開啟第二臺電腦,我們將會看到與***臺電腦一模一樣的操作系統(tǒng)、文件、還有應(yīng)用軟件。鏡像文件對于虛擬機實例來說,就是它的硬盤。遷移虛擬機實例,可以通過遷移它的虛擬硬盤,也就是鏡像文件來實現(xiàn)。
我們之所以不厭其煩地介紹手工設(shè)置虛擬化系統(tǒng)、并運行虛擬機實例的步驟,是因為 Amazon EC2、OpenStack、以及 VMWare 等等系統(tǒng),它們的主要功能,是讓軟件系統(tǒng)替代人工,自動化地去完成這些操作。
類似于 Amazon EC2 的自動化系統(tǒng)并不難設(shè)計。事實上,前述的準備工作,也就是安裝虛擬化系統(tǒng)的三個步驟,是在添置物理服務(wù)器時完成的,是一次性的操作,所以手工完成這些準備工作,無妨大雅。
真正需要實現(xiàn)自動化的,僅僅限于提供虛擬機租賃業(yè)務(wù)的兩個步驟,1. 提供操作系統(tǒng)安裝光盤,或相應(yīng)的 ISO 文件,2. 根據(jù)用戶提交的虛擬機資源配置,創(chuàng)建虛擬機實例。
我們在下一節(jié),將自行設(shè)計這樣一套系統(tǒng),然后把它與 Amazon EC2、OpenStack 等等橫向?qū)Ρ取4蠹視@奇地發(fā)現(xiàn),我們自行設(shè)計的系統(tǒng),在總體上,與 Amazon EC2、OpenStack 等等系統(tǒng)非常相似。