正確使用Windows Azure 中的VM Role
在2010 PDC大會上,我們介紹了Windows Azure中一個新增的Computational Role- VM Role。這一特性極大的提高了我們對於應用的掌控性,但是可能會和我們Windows Hyper-V中的全基礎設施方案有所混淆。它們都有獨有的架構模式。
虛擬化
虛擬化是一個接管物理電腦的所有硬體並以軟體呈現硬體功能的過程。這意味著單臺電腦可以"託管"或者執行多個"虛擬"電腦。這些虛擬電腦可以位於任何地方-包括執行在供應商處。因為在別處管理和維護這些硬體,所以一些公司將其稱為雲端計算。
基礎設施即服務
對上文更具體的定義應該稱為基礎設施即服務 (Iaas) ,因為它移除了在自己公司中管理維護硬體的需求。作業系統,驅動,或者執行應用所需的所有軟體都仍在你的掌控中,你只需購買授權,升級,以及拓展。微軟在這方面的方案稱為Hyper-V,它執行在Windows作業系統之上。結合硬體託管供應商以及 System Center 軟體來建立和部署虛擬機器(可以稱其為一個提供服務的過程),你對於這些機器仍然擁有完全的控制權,如果願意,甚至包括執行多作業系統。在自己公司內託管機器,並提供服務,我們稱其為私有云。而在別處託管這些機器,則稱之為公有云。
有狀態和無狀態程式設計
該模式並不是建立新的可拓展的計算方式。它只是簡單的移除了硬體的需求。理由便是當你將雲端計算限定於虛擬機器時,你便限制了單個系統所能提供的計算資源。這是因為在此環境下開發的許多軟體都會維護 "狀態" - 我會對此進一步的解釋。
"有狀態程式設計" 意味著計算環境的所有部分在計算週期內始終相互保持連線。 系統會期望記憶體,CPU,儲存和網路在整個過程中都保持始終一致。您可以想象我們日常打電話-你希望對方接起電話、聽你說話,之後他開始回話,這些都發生在同個時間單元內。
在 "無狀態" 計算模式內,系統可以允許程式碼的不同部分的相互獨立的執行。你可以將其想象為電子郵件,你寫了了一封郵件 (當然,你在寫郵件時是有狀態的。) ,之後你可能走開去喝了一杯咖啡。幾分鐘之後,你回來點選了"傳送"按鈕, (網路是有狀態的) ,之後你便去開會了。伺服器收到郵件,將其儲存在郵件資料庫內。(郵件伺服器有狀態) ,之後繼續接受其他的郵件。 最後,另一使用者登陸郵件客戶端,讀取郵件 (使用者是有狀態的) ,回覆郵件等等。這些時間可能相隔幾毫秒到幾天,但是系統仍然可以繼續執行。整個過程都沒有維護狀態,每一個元件也是。這便是Windows Azure程式碼背後的概念。
無狀態程式設計模式使得驚人的拓展能力稱為可能。因為訊息(參考上述的郵件例子),可以被多個程式獨立開來,且並行執行。 (郵件傳送給數百使用者),唯一需要考慮的便是工作重新組織的順序。基於相同的理由,如果系統像Windows Azure那樣執行這些程式,你便會擁有內建的冗餘和恢復功能。這些都是放置於設計之內的。
基礎設施設計和平臺設計的區別
當你只是簡單以私有或者公有的方式虛擬化物理伺服器,你並不能讓程式碼擁有拓展或者恢復的能力。必須通過增加更多的程式碼以及更多的虛擬機器來處理,這會在執行或維護有狀態系統內引入輕微的延遲。增加更多機器會引入更多的延遲,所以並不能無限的拓展。這便是IaaS最主要的限制。同樣部署這些虛擬機器並不容易,更為重要的是移除它們更加繁瑣。IaaS的敏捷性就會受到限制。
Windows Azure 是一個平臺 - 這意味著你可以通過程式碼來進行控制操作。程式碼會以多個拷貝執行在多個節點上,因為神器的無狀態程式設計模式,它們都會執行。你不必關心底下到底執行的是什麼。它可能是Windows (實際上是某種Windows Server),Linux,或者其他任何系統- 但是這些都不是你需要管理,監控維護或者購買授權的。你不會希望部署一個作業系統,而是部署一個應用。你希望程式碼能夠正常執行,而不關心是如何執行的。
PaaS的另一個優勢你可以請求成千上萬的計算節點。你也可以隨時的停止使用這些節點,且你應用中無需編寫這些控制程式碼。
Windows Azure Roles 以及它們的用途
如果希望應用有一個使用者介面,那麼想專案中新增一個 Web Role ,如果程式碼無需包括使用者介面則新增一個Worker Role。它們僅僅是具有特定行為的容器。
我們回來討論VM Role,使用者可能因為其名稱而誤以為它是一個虛擬機器,例如執行著Linux系統,可以部署至Windows Azure。很遺憾,事實並非如此。如果你確實需要此類部署,考慮Hyper-V 和 System Center來建立私有或公有 IaaS 。VM Role 允許使用者對其程式碼所執行的系統擁有相當高的控制權。
如果你聽說過Windows Azure 以及 平臺程式設計,你一定堅信它是一個絕佳的程式設計正規化。但是在公司中,你已經是以其他方式編寫了大量程式碼。如果為了利用Windows Azure的優勢,而重寫程式碼會需要很長的時間週期。又或者你的程式碼依賴於一個特定版本的Apache Web 伺服器。這些情況下,你應該考慮將這些軟體改寫為 "無狀態"的,那麼你只需在程式碼執行之處擁有更多的控制便可以。那麼這些情況下, VM Role 便能發揮其作用了。
回顧
僅僅虛擬伺服器會有拓展,可用性和恢復能力的限制。微軟在這方面的方案是Hyper-V 和 System Center,並不是 VM Role。 VM Role 還只是用於執行無狀態程式碼,除了它允許您對環境擁有更多的控制權之外,它們和Web Role和 Worker Role是一模一樣的。