Windows Azure 計算服務中的服務配置

       服務配置主要用來描述一些服務模型的補充信息,尤其是一些在服務部署後有可能發生變化信息,如需要實例數目等。這些信息被統一定義在服務配置文件ServiceConfiguration.cscfg中。服務配置文件需要與服務定義文件配合使用,它與後者最大的區別在於,用戶可以在服務發佈以後在線修改配置文件,而不需要重啓實例和重新打包部署。Windows Azure內部有一個事件觸發機制,當監控到服務配置文件發生變化時,Fabric控制器會根據修改內容自動對服務的部署進行相應的調整。

      下面是一些常見的包含在服務配置文件中的信息。

       1、服務角色實例的數量;

       2、虛擬機操作系統的類型和版本;

       3、服務定義文件中自定義設置的初始值;

       4、服務定義文件中定義的證書和指紋;

       5、VM Role的VHD鏡像名稱等。

       服務配置文件ServiceConfiguration.cscfg在發佈服務時獨立存在,因此也非常方便對其進行修改、在Windows Azure管理門戶網站中,用戶可以通過配置按鈕上傳一個新的服務配置文件或直接編輯XML文件。

          一、ServiceConfiguration.cscfg文件

<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="HelloCloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="1" osVersion="*">
  <Role name="WebRole1">
    <Instances count="1" />
    <ConfigurationSettings>
      <Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
    </ConfigurationSettings>
  </Role>
</ServiceConfiguration>


         在上面的代碼中,虛擬機中的操作系統類別被設置爲家族1,即與Windows Server 2008 SP2保持兼容的Windows Azure Guest OS 1.X;其版本設置爲“*”,也就是由Windows Azure來進行自動更新。

         用戶可以通過<Instances>元素中的count屬性來設置對應實例的個數。這個屬性非常重要,因爲服務的水平擴展能力主要由這個設置決定。當部署的服務訪問量超過原先的涉及容量時就需要通過增加這個實例數量來進行計算能力的擴展。

        二、服務配置的應用

        傳統的ASP.NET應用也有一個基於XML格式的配置文件Web.config,這個配置文件會包含模塊的加載信息、安全設置、會話設置等多種信息。而且Web.config文件也可以通過<appSettings>元素來自定義一些變量極其初始化值,如下所示。

<appSetting>
<addkey="UserCustomSetting1" value="Hello Windows Azure!"/>
</appSetting>

       當Windows Azure 服務項目中包含一個基於ASP.NET Web Role時,這個 Web Role實現本身也是一個ASP.NET的Web應用。這樣開發人員就面臨一個選擇:把自定義的變量和初始化值是放在ASP.NET應用自己的Web.config 文件中,還是把它們分開放在服務定義文件和服務配置文件中呢?一個推薦的做法是把變量的定義放在Windows Azure的服務定義文件中,並且把變量的初始化值放在服務配置文件中,而不是把他們定義在ASP.NET應用的配置文件中。也就是說,在ServiceDefinition.csdef中定義變量如下:

<ConfigurationSettings>
<Setting name="UserCustomSetting1">
</ConfigurationSettings>

      然後在ServiceConfiguration.cscfg中初始化如下:

<ConfigurationSettings>
<Setting name="UserCustomSetting1" value ="Hello Windows Azure!"/>
</ConfigurationSettings>

        這麼做的原因主要有兩個:一是服務配置文件可以被動態修改,而Web.config文件會作爲服務代碼的一部分打包,因此服務發佈之後無法在線修改;二是一般的Web Role實例會有多個,因此其上的應用程序代碼會被部署在多個實例上面,也就是說,ASP.NET應用的配置文件也會有多分拷貝,因此更容易維護和管理。

        關於服務器配置的應用一般有以下幾個推薦的做法。

        1、把存儲賬戶的名稱和證書信息放在配置文件中。這麼做可以比較方便地進行存儲賬戶切換:同樣使得用戶可以更換證書信息而不需要停止已發佈的服務。開發測試環境的證書與生產環境的一般是不同的,而且證書也有時效期限的問題。

        2、把日誌的選項定義在配置文件中。因爲在不同的運行階段可能需要不同的日誌級別,因此把他們定義在配置文件中可以方便更改。

        3、也可以爲不同的開發測試階段提供不同的配置文件,比如一個版本的配置文件是給生產環境使用的,一個是給臨時測試環境使用的等。生產環境和測試環境往往會使用不同的數據庫環境,因此在不同的配置文件中可以設置不同的數據庫鏈接字符串。

       總而言之,由於服務配置文件是可以被動態修改的,因此我們可以靈活地應用它來充分發揮這個特點。


  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章