2012年4月23日 星期一

[Azure 其實並不難]Windows Azure WebRole 開發,與ConfigurationSettings的使用

在接續著前一篇我們討論雲端運算的概念以及定義之後,我們接著來看微軟提供了那些雲端運算相關的服務?

我們知道NIST對雲端的定義很清楚,除了前面介紹過的五個要素(Essential Characteristics)之外,也定義了雲端運算的三個典型服務型態(Service Models)分別是:
  1. IaaS:Cloud Infrastructure as a Service
  2. PaaS:Cloud Platform as a Service
  3. SaaS:Cloud Software as a Service
這三種服務型態分別以基礎建設(Infrastructure)、平台(Platform)、應用軟體(Software)為產品來提供服務。例如,微軟提供Windows Azure這樣的一個開發平台(Platform),讓軟體公司(例如我們-光岩資訊)在這個平台上建構出應用程式(Software Application),微軟提供的Windows Azure就是一種PaaS。

反過來說,我們稱微軟的Windows Azure是一個PaaS,是因為微軟的Windows Azure符合前面介紹過的雲端運算五要素(Essential Characteristics),同時以服務(as a Service)的面貌進行銷售,讓客戶(軟體公司)得以在該環境中進行開發,因此Windows Azure是一種PaaS(Cloud Platform as a Service)。

而SaaS呢? 則是符合雲端運算定義的應用軟體服務。例如我們公司(光岩資訊)所開發的EasyCloud產品,搭建在Windows Azure上,透過網際網路,全天候服務我們的客戶。讓客戶只需透過申請即可以租用的方式來使用軟體的各樣功能,並且這套產品也符合雲端運算的五個要素,因此我們(光岩資訊)就是一家提供雲端運算應用軟體的SaaS廠商。(類似的SaaS非常多,像是Google App, Office 365, SalesForce...etc)

在台灣,大概絕大部分的軟體公司,將會逐漸把自己轉型成為SaaS,而微軟提供的服務是PaaS,那IaaS呢? 則是符合雲端運算五要素的基礎建設,講白了就是雲端運算資料中心、雲端運算計算中心、或是雲端機房...等。IssS所提供的服務比較傾向是網路或硬體環境,你也可以這麼說,基本上PaaS是IaaS的客戶,而SaaS會是PaaS的客戶(就如同我們公司的產品建構在微軟的Windows Azure上)。IaaS的難度頗高,需要有雄厚的資金和高檔的網路設備才能實現。

好,我們有了這些概念之後,大概也差不多明白傳統的軟體公司,最可能往SaaS轉型,在雲端世界上建構出各式各樣的應用軟體。要建立符合前述雲端五要素(Five Essential Characteristics)的軟體,最簡單的方式就是透過PaaS(但請注意,反過來說,透過PaaS所建構出的應用軟體並不一定符合SaaS,要看有沒有符合前述雲端五要素),這也是我們接下來要介紹Windows Azure的原因(當然,PaaS的產品還有很多,例如GAE, Amazon的EC2...etc,我們在這邊只討論Windows Azure)。



微軟的Windows Azure提供了相當多的功能,用來讓客戶建立Web Server或AP Server的服務,分別是:
  1. Windows Azure Computer Web Role :在雲端運行的網站(或Web/WCF Services)
  2. Windows Azure Computer Worker Role :在雲端運行的應用(或Routine Jobs)
簡單的說,Web Role可以視為我們在n-tier世界中的Web Server,而Worker Role則很自然地可以理解為AP Server。從這邊你可能也已經發現,一般的虛擬主機、主機代管...等服務絕對不可跟Windows Azure相提並論,兩者之間天差地遠,Windows Azure從最基本具有動態Load Balance機制的多主機網站(單單這個簡單的功能,台灣一般中小型主機代管業者都不容易實現),到超大型的商業應用(全國性的投票、購票、報稅、圖書館...等服務),都可以輕易實現。

一般的網站我們只需要透過Web Role即可實現。
所以,我們先來看怎麼利用ASP.NET建立一個最簡單的WebRole,以及如何將ASP.NET所撰寫的網站佈署到雲端。

操作影片請參考這裡

程式碼的部分則是一個非常非常簡單的ASP.NET Web Site,沒有任何正式的功能,只是為了展示把Web Site佈署到雲端,但重要的是,其中的Role Configuration Settings,是雲端運算與傳統網站最主要的環境差異。我們一般在寫ASP.NET時,環境變數和資料庫連線抓取的是web.config中的內容,但上了雲端之後(前面說過),你是隨時可以從一台主機擴展成十幾二十台的,這時候,不可能去手動維護web.config,那如何一次性地修改環境變數呢? 又或者,我們希望網站(或應用)在傳統的虛擬主機環境上採用基本的環境設定,而上了雲端之後,則用另一種環境設定(這種情況很常見,由於雲端的特性和虛擬主機大不相同所導致),因此知道在程式碼當中如何抓取兩種不同運行情境下的設定就噹當重要了,我們看程式碼:
public static string GetConfigValue(string key)
{
    var value = string.Empty;
    if (RoleEnvironment.IsAvailable)
    {   //抓取Cloud Role ConfigurationSettings
        value = RoleEnvironment.GetConfigurationSettingValue(key);
    }
    else
    {   //抓取Web.Config AppSettings
        value = ConfigurationManager.AppSettings[key];
    }
    //錯誤處理
    if (string.IsNullOrWhiteSpace(value))
    {
        throw new ArgumentException(string.Format("The '{0}' setting is not available.", key), "key");
    }
    //回傳值
    return value;
}

上面小小一段程式碼,闡明了在雲端與傳統網站的最大差別,就WebRole而言,我們在ASP.NET當中可以透過RoleEnvironment抓取到Cloud RoleEnvironment環境變數的設定值,就如同我們透過ConfigurationManager抓取 ASP.NET web.config中的環境變數設定值一般...先知道這個基本概念,後面我們繼續討論其他的重要機制...
(待續...)

沒有留言: