VMware vSphere / XenServer 和 OpenStack / OpenNebula 到底有什麼差別

最近看了一些 OpenStack Summit 演講的影片,尤其是 Moving From Virtualized Infrastructure to OpenStack ,對於虛擬化和雲端運算又有了更深一層的認識。

影片中提到,vSphere 和 OpenStack 是完全不同的產品。vSphere 是從硬體開始打造雲端,意思是先從硬體、hypervisor 的角度來思考問題,也可以說是從 VM 開始考慮問題,由最基本的 ESXi hypervisor ,往上增加功能到 vCenter (但我只用過 ESXi 沒用過 vCenter ,我只是大概知道 vCenter 有什麼樣的功能),而 XenServer 也是類似的概念。 OpenStack / OpenNebula (這兩個是不同的計劃,但是功能、概念接近)則是從完全不同的出發點來考慮問題,OpenStack 是從應用程式本身(的需求)出發,對於應用程式來說,幾個 VM 、幾個 host 並不是重點,重點是怎麼讓應用程式不中斷的運行。

在 vSphere 的環境中,首先是建置 ESXi ,然後在上面一臺一臺的安裝 VM 、然後設定 VM 的網路、安裝應用程式的環境,這部分就跟沒有虛擬化的情形下買一臺伺服器然後安裝的過程一樣,維護應用程式的方式也是和從前沒兩樣,遠端至 VM 裏面和以前一樣進行升級等等的操作。唯一比以前更方便的地方大概就是 live migration ,單一伺服器的硬體維護或是故障不影響 VM 的運行。 vCenter 就多了一些更高階(意思是更抽象化,就是從比較大規模的觀點來看看可能的問題)的功能,這些功能在小規模的環境當中(<10 VM)很可能用不到,像是 High availability, fault tolerance 等等,小規模的環境中就算沒有這些功能,這些應用程式的可用性對於這樣小規模的組織可能也已經夠用。

有沒有注意到,整個 vSphere 環境考慮的主體是 VM ,而不是 Application ,vSphere 的重點是讓 VM 不中斷的運行,對於更上層的 Application ,它其實不太在乎。這樣的好處是,以往的應用程式 (Legacy Application) 很可能並沒有把雲端技術納入應用程式的設計當中,像是沒有考慮 scaling 問題,scaling 的能力大多依賴伺服器端軟體、作業系統的效能調校和底層硬體 (VM) 的效能(這個概念稱作 Scalue up ,把處理能力向上提升)。因此就算你在雲端的環境當中部署了這樣的 Legacy application ,很多雲端環境所提供的功能也是用不到的,而且在雲端環境上做 legacy application 的維護我覺得 overhead 還蠻大的,雲端環境本身的維護我覺得也需要更多的心力。(我覺得 ESXi 本身的維護比 OpenStack / OpenNebula 還要簡單)。

虛擬化是雲端運算的基礎,但是做到虛擬化並不等於做到雲端。vSphere 這樣的產品應該是定位爲虛擬化基礎架構 (Virtual Infrastructure) 而非雲端基礎架構 (Cloud Infrastructure, Infrastructure as a Service) 。

OpenStack / OpenNebula 是以應用程式爲出發點的解決方案,是從比較高階(遠離硬體層面)、比較大規模的觀點來考慮,所以建 VM 的方式不是像 ESXi 這樣一次新增一個 VM 慢慢調硬體參數(當然 vCenter 也有 template 的功能),而是必須使用固定的硬體樣板 (template, OpenStack 稱作 flavor) ,這樣一來對於小規模的環境反而是造成了不便,因爲每個 Application 可能就只有一臺 VM 而已,若是每個應用程式的需求不同,每個 VM 要使用不同的樣板,那這樣也失去樣板的意義了。但是在大規模的環境中這樣就會很方便,當要一次部署10, 20臺一模一樣的 VM 時,樣板就會派上用場了。在部署 VM 的時候每臺 VM 應該要不同的參數也可以由雲端環境插入,像是 IP 、 MAC 、hostname ,雲端環境也會記錄這些資訊,比起 vSphere ,OpenStack 更瞭解 VM 的狀況。

OpenStack 以應用程式爲出發點,但是它考慮的主要是雲端應用程式 (Cloud application) 或是說 cloud-aware application (在這邊 PaaS 或是 SaaS 應該也都可以算是 cloud application),這些應用程式比較瞭解他們所運行的雲端環境,可以跟環境做溝通(透過環境提供的 API ),並且瞭解自身的運作狀況(負載),雲端應用程式的架構上也比較分散,這樣要進行應用程式 capacity (可負載量)會比較方便。雲端應用程式要做 scaling 也很容易,負載量提升時,只要呼叫基礎架構 API 多部署幾臺後端伺服器,整個服務的 capacity 就提升了。呼叫基礎架構 API 的工作可以由其他偵測程式偵測這個應用程式的需求並呼叫來達成,或是,在最佳狀況中,由應用程式本身進行呼叫。ESXi (或 vCenter)的 API 似乎是比較弱的(若有錯請更正我),應用程式要進行呼叫也比較不方便。至於 legacy application 在這樣的環境當中如同前面所提到,就沒有這麼大的好處。

雲端基礎架構的另一個好處是由於近乎統一的 API ,雲和雲之間便可以有連結。像是當你的 application 負載已經超過你整個設施所能負載的量時,應用程式可以透過(幾乎)一樣的 API 對其他提供公開服務的雲端基礎架構設施(公共雲)進行呼叫,把一部分的負載量轉移到公共雲或是你自己的另一朵私有雲。(當然這個過程也有很多問題要考慮)

所以,在一般中小企業、學校當中大多使用的還是 vSphere 這一點,其實也頗爲合理,畢竟規模小,運行的應用程式也是以 legacy application 爲多(因爲要重新開發功能一樣的雲端應用程式成本太高吧)。

至於一個我長久以來的問題:有沒有完全 opensource 的解決方案可以取代 vSphere ? 我目前找到最好的是 Proxmox VE

若是有任何錯誤歡迎在下面留言討論。

參考:http://www.mirantis.com/blog/cloud-prizefight-vmware-vs-openstack/

「誒聽起來很棒我們來做吧!」

進了交大資工,對於這裏的文化灰心之餘,又讓我更加體會到,當時 CNMC 的那個環境是多麼難能可貴。

我今天難得寫了一點 code (跟課程完全無關的 code ),寫到不想停下來,到零點多還是強迫自己去洗澡,洗澡時我在思考,爲什麼上了大學,我寫的 code 反而比高中時還要少?

我一直覺得在交大比在高中時的課業還要繁重(作爲參考:我上學期20學分,這學期21),雖然上課時數比較少,但卻有更多的東西要靠自己讀了,尤其是教授的授課技巧普遍比高中老師還要差。高中時我是偶爾會在上課中舉手問老師問題的,到了大學,課程的同學都互不認識,我就更沒有勇氣問問題了,於是我常遇到的狀況是老師講的有某個地方不懂,然後我就會思考這個地方,但老師的課程是繼續往前,結果是會很容易脫離老師的進度,最後只能看課本。我有很多課都變成這樣:數位設計、線性代數、離散數學,上課變成自己在K書。

每天課程的時間不固定也是我還沒完全適應的一點,不像高中,晚上一定有時間開電腦,就算是段考前幾天。(不過段考前一天我大概沒辦法啦,很多時候還是要抱佛腳)

就算可以處理好課業,要做事情的時候,這裏的文化還是會讓我感到灰心。整個文化會讓你不想做事情 (do/build something)。

我在交大感受到的文化有一點很可怕,我覺得它會讓你一事無成的讀書、考試、交論文、畢業、考研究所、交論文、畢業、進公司。什麼叫一事無成?就是在上面所述的過程當中沒有繞遠路、沒有停下來想一想爲自己做決定,或是除了上面這些東西沒有別的。我深怕我就這樣過了4年。

除了上面那些東西,一定還有些事情值得你全心全力投入,甚至放棄上面那些以全心全力投入的。我在 CNMC 有,我從高一加入 CNMC 一段時間之後,我就決定,爲了學習電腦技術這些東西,如果沒辦法兼顧課業,我絕不會放棄這件事情,第一個放棄的絕不會是這些(就算當維持成績的成本增加的時候,我不會增加投資在課業的時間)。嗯…就是有一點點「我爲了這些東西可以放棄課業」的感覺。

講更多一點,我維持成績在一定水平只是因爲這樣我才能繼續玩電腦(怕父母會限制)。我高中3年的排名是越來越後面的,一部分是我在試探父母的底線,你們可以接受我的成績爛到什麼樣的程度。

但是我在交大看到每個人全心投入的,似乎都還是課業。而且可悲的是,我很少看到有人除了課業之外還有其他東西。

每個人爲了課業,個個有所顧忌。

我懷念以前 CNMC 的時候,我們花整晚在 IRC 上問問題,學架各種伺服器,好像明天沒有考試,不用上課。

我懷念那時候,我跟 Iblis 說(或他對我說):「XXX 看起來很有趣,我們也來弄一個。」他(我)會說:「我看看……」「這東西原來可以幹嘛幹嘛,好像不錯」,然後之後東西就會弄出來,我們就差不多是這樣架起 MRTG, NetFlow 和 CNMC wiki 。高一有一次我跟他說,我們在社辦都沒有 GUI 可以用(好啦那時候應該是有一臺 windows ,不過誰想用 windows 啊),查資料好不方便(其實有另一臺 FreeBSD 有 GUI ,只是帳號還沒開給我們)。然後我們大概總共用了幾節放學前的自習課用社辦舊舊的機器把 Xorg 編完、讀 Xorg 的文件、把 Xorg 設定完、裝上 XFCE 。

在那環境,有人說:「這好像很有趣,而且好像不難,我們來做做看」就會有人說「誒聽起來好棒哦,我們來弄吧」,還會有人(好啦就是學長)說:「你們可以順便研究一下 XXX」、「爲什麼你們這樣設定?這樣有 single point of failure / overhead 很大 [blabla]」、「這我以前弄過,我覺得[…]」

但是我在交大從來不曾遇過類似的對話,唯一的半個例外是大兜學長吧。(會說半個例外是因爲也沒有很多機會和他做這些事)

我試圖想要激起這樣的對話,結果幾乎是:「我還有演算法作業,超多,而且我都不會寫」、「明天考物理我還沒讀」、「我覺得我技術不夠好,我要等修完 XXX 課程之後再看看要不要玩這個」、「我覺得我技術不夠好,我還需要讀很多文件和書/我還要自己研究一陣子」、「噢……那你去啊」

聽同學的對話,我幾乎不曾聽到:「誒你最近在玩什麼技術?」「我最近發現 XXX ,讀了它的文件之後[…]」「我翹掉了早上的課補眠,昨天寫 code /研究 XXX 弄太晚」「誒聽起來很棒我們來做吧!

反而是聽到:「XXX 課程小考的題目怪怪的」「我覺得作業的解答好像有錯」「你期中考準備的如何?」「XXX (某不知名動畫/漫畫角色吧)如何如何如何」「X 遊戲如何如何」

想到這些人是多麼的聰明,把聰明拿來做這些事情,嗯。

沒什麼不好,但是我所期待、想要的環境不是這樣。

I wanna build something! I wanna change/fix something!

是啊,我可以自己一個人做。但是有人跟你一起,旁人會問你你在弄的到底是什麼東西,有人會因爲你所打造的這個東西而感到興奮、期待,這樣不是更好、更激勵人、更令人興奮熱血、滿是衝勁?