Windows Azure 計算服務中的服務角色

       通常在構建一個大型應用時,我們需要對應用進行面向服務和模塊化設計,對應用的層次和功能進行劃分。在應用部署時,我們會根據負載的類型和多少爲不同層次配置相應的服務器硬件,然後在不同的服務器上安裝對應的軟件環境如Web服務器軟件、中間件以及數據庫軟件等,最後再部署應用程序代碼極其配置。在Windows Azure中,應用服務器也遵循類似設計原則。但是爲了簡化應用服務器的部署,Windows Azure根據應用功能和各自運行特點提供了不同種類的運行環境模版,這些不同的運行環境模版就對應Windows Azure中不同的計算角色。用戶Windows Azure服務角色是在其對應服務模型中定義的,每個服務可以根據實際需要的定義一個或多個服務角色。每個服務角色的定義中會包含角色類型、虛擬機大小、通信端點、本地存儲信息等。從開發人員角度,我們可以認爲Windows Azure的服務角色由服務定義、服務配置、服務代碼組成。Windows Azure在剛發佈時提供了Web Role和Worker Role,後來爲了降低舊應用遷移的難度又增加了第三種角色VM Role。對VM Role來說,它的服務代碼是通過包含應用的VHD鏡像來體現的。

        爲了簡化開發人員開發Windows Azure應用,在Visual Studio中安裝相應的開發插件之後,新建項目模版中的雲計算選項下會出現不同角色的模版,如下圖所示


下面進行詳細介紹

1、ASP.NET Web Role。這個角色模版主要用來創建一個基於ASP.NET Web的應用。

2、ASP.NET MVC Web Role。這個角色模版用來創建一個ASP.NET MVC 的 Web 程序。

3、WCF Service Web Role。這個角色用來創建一個託管的WCF服務。

4、Worker Role。這個角色模版用來創建一個基於Worker Role 的應用。如果要開發的應用服務不適合前面的角色模版,那麼Worker Role一般可以實現這個需求。因爲Worker Role在設計上非常靈活,開發人員幾乎可以在這裏編寫任何代碼。

       上面列出的四種角色模版從本質上看都是針對Web Role的模版,但是通過分類讓應用開發變得更爲簡單。通過這些角色模版開發完成的應用程序最終都會做爲Web Role 實例運行在Windows Azure環境中。

角色實例

       在面向對象編程中,開發人員通過類規定了對象所需要的基本屬性和動作要求,這是一種靜態的描述。然後在應用程序運行過程中再根據類生成一個個具體的動態對象。一個類可以根據需要生成一個或多個對象。應用程序具體功能都是由不同對象之間相互痛心和調用方法來實現的。

       在概念理解上,我們可以把服務角色和實例類比面向面向對象編程中類和對象的關係。如果把角色看成是一個運行環境的模版或類型,那麼角色實例就是根據這個模版生成的實例。用戶的應用服務最終是以一個個角色實例運行在Windows Azure之上的,而用戶的請求都是交由這些角色實例來處理完成的。Windows Azure 中的應用服務可以包含一個或多個服務角色,每個角色可以有一個或多個實例。

       Windows Azure 中的角色實例是用戶服務的獨立運行單元。雖然這些角色實例與底層虛擬機沒有直接綁定的關係,但是在Windows Azure目前的實現中,無論是Web Role、Worker Role還是VM Role,他們的每一個實例都對應一個具體的虛擬機,也就是說,實例與虛擬機具有一一對應的關係。因此,一個角色實例目前就是一個部署了用戶服務代碼、服務配置和本地數據的虛擬機。

      每個發佈的服務都會有一個映射到*.cloudapp.net域名的虛擬IP地址,然後由負載均衡器把用戶請求分發給不同的實例處理。那負載均衡器是如何把外部用戶訪問分發到每個實例的呢?實際上每個服務實例都有自己的IP地址,這個IP地址稱爲直接IP地址,這是私有的IP地址,也就是說,window azure數據中心之外是訪問不到這個地址的。它們的作用主要在於內部通信用,包括不同實例之間的通信、負載均衡器和實例之間通信等。負載均衡器的分發規則就是主要基於虛擬的IP地址和直接IP地址之間的映射關係來進行的。如果服務代碼需要具體的地址,則可以通過專用的編程接口來獲取。

       既然實例與虛擬機存在一一對應的關係,因此實例大小也就是虛擬機的大小。如下面設置就指定WebRole1使用超大規模實例即虛擬機配置。

       <webRole name="webRole1" vmsize="ExtraLarge">

角色的生命週期

      角色實例在Window Azure上有自己的生命週期,其主要可以分爲三個階段:從啓動到運行再到停止。無論是Web Role 還是Worker Role,他們在實現上都繼承了共同的基類RoleEntryPoint.

        RoleEntryPoint有三個與狀態有關的方法。

        1、public virtual bool OnStart();

        這個方法由Windows Azure 在初始化角色實例時調用,如果初始化成功則返回True,否則返回False。開發人員可以覆蓋這個方法,把自己初始化代碼添加進去。

        2、public virtual void Run();

        如果這個角色實例成功初始化了,那麼Windows Azure 將調用這個方法來啓動運行角色實例。該方法中應該實現一個長時間的運行現成來實現角色的操作。默認實現是無線循環的睡眠操作。角色實例在這個方法運行過程中的狀態爲“就緒”,也就是說,可以正常處理請求。如果角色執行從Run()方法返回了,那麼這個實例將被Windows Azure回收。

       3、public virtual void OnStop();

       這個方法由Windows Azure在停止實例前調用。如果在停止前需要做一些清理工作,那麼開發人員可以覆蓋這個方法,把自己的清理代碼放在這個方法中。這個方法必須在一定時間內(目前是30秒)返回,否則Windows Azure將強行停止實例。對於ASP.NET的Web Role來說,這些清理代碼也可以寫在ASP.NET的Application()方法中,這個方法在OnStop()方法之前調用。

發佈了93 篇原創文章 · 獲贊 58 · 訪問量 19萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章