Windows Azure平台的計算服務用友99.95%的高可用性支援,也就是說部署在Windows Azure平台上的應用幾乎不會出現宕機的情況。但是前提是為每一個部署到Windows Azure的Role至少設定兩個Instance。Windows Azure平台本身隨時監控虛擬機器的運行情況,在發生故障的時候它將使用熱遷移技術在極短的時間內將某個服務遷移到一個運行良好的物理伺服器上面。同時,當使用者進行服務的更新或平台進行Guest OS更新時,Windows Azure也會保證服務不會出現暫停情況。那麼這一切是如何做到的呢?
Windows Azure平台高可用性的實現
Windows Azure平台為所有運行於其上的Role Instance提供了兩個運行域的概念,分別是故障域(Fault Domain)和更新網域(Upgrade Domain)。計算服務的高可用性就是靠這兩個域來保證的。
對於同一個故障域中的Instance,它們很可能會同時發生故障。而在物理架構上,一個故障域可以是一個Windows Azure計算節點中的物理伺服器,或者是一個承載了多個伺服器的機架。Windows Azure Controller Fabric保證部署到Windows Azure平台上的每個Role,只要它設定的Instance數目大於1,那麼必然會被分配到至少兩個故障域上。同時,由於Windows Azure資料中心的伺服器數量非常大,只要使用者的Instance數目大於1,那麼幾乎不會出現所有Instance同時發生故障的情況。Windows Azure平台基於故障域的設計實現了其高可用性的要求。
和故障域類似,在Windows Azure平台中同一個更新網域中的資源(伺服器、虛擬機器等)將會同時進行更新操作。並且Windows Azure平台還會保證,如果Instance的數目大於1,那麼它們肯定不會被分配在同一個更新網域內。也就是說,當我們的Role在更新的時候,無論是通過Developer Portal的Update方法進行更新還是Windows Azure平台執行的Guest OS更新,都不會同時作用在某個Role的所有Instance上。由於伺服器更新的時候其上部署是停用,所以基於這種設計,某個Role就不會由於更新造成其處在停用狀態,因為至少有一個Instance處在別的更新網域而沒有進行中更新操作。
展示了故障域和更新網域的概念。假設當前的Windows Azure項目中有兩個Role,分別是Web Role和Worker Role,而他們分別有四個Instance,因此在部署的時候Windows Azure平台會分配四個計算節點,並且保證每個Role的Instance至少被分配在兩個故障域中,也就是兩個伺服器機架上。
同時,每一個Instance又會被分配在不同的更新網域中。在這樣的分配狀況下,假如故障域Domain 0 - V2出現了問題,由於故障域Domain 1 - V2也包含了Web Role和Worker Role的Instance,因此可以保證整個系統的正常運行。同樣的,如果需要更新這個Hosted Service,那麼平台首先會對更新網域進行更新,即有兩個Web Role的Instance和兩個Worker Roler的Instance無法工作,但是更新網域Domain 0的Instance仍可以照常工作。等更新網域Domain 0的Instance更新完畢後,平台才會開始更新網域Domain 1。而此時系統可以使用已經更新好的更新網域Domain 0。這樣無論什麼狀況都可以保證提供的服務是不間斷的
參考資料:《實戰Windows Azure 微軟雲端運算平台技術詳解》 徐子岩著 電子工業出版社