Windows Server AppFabric Cache測試分享

微軟在新一代的分散式運算平台產品可算是Windows Server AppFabric了,它不僅增強了IIS 7.0/7.5的許多功能與管理功能,也可以作為企業私有雲建置平台的首選平台

 

微軟在新一代的分散式運算平台產品可算是Windows Server AppFabric了,它不僅增強了IIS 7.0/7.5的許多功能與管理功能,也可以作為企業私有雲建置平台的首選平台(感謝朱大的提醒使小有更正確的方向而找到許多相關的資料),其中的新功能之一,也是許多人最感興趣的功能就是Caching了。網路上已有許多專家部落格都已經實作與討論過此功能,這也讓筆者躍躍欲試,由於他所提供的Caching機制提供叢集的方式,跨網路多台機器分享Cache記憶體,甚至支援上百台以上的伺服器,也就是說,要加大記憶體,就在增加一台伺服器加入叢集即可!這樣的叢集的Caching,不僅加快了應用程式執行的效率,也減輕了後端資料庫的負擔。

在開發之前,有一些前置作業需要先完成,

(1).以系統管理員身分開啟PowerShell管理工具

image

(2).執行use-CacheCluster 表示伺服器啟用Caching機制

(3).執行start-CacheCluster (2,3動作均由此圖表示)

image

(4).建立具名的快取(Name Cache)物件,名稱為test

image

(5).建立一個空的WebSite專案,取名為WebCacheClusterTest,並加入一個Default.aspx頁面與一個Porduct類別,並在類別中宣告Name、Desc兩個屬性。

(6).加入參考Microsoft.ApplicationServer.Caching.Client.dll, Microsoft.ApplicationServer.Caching.Core.dll

image

(7).設定Web.config,內容如下

   1:  <?xml version="1.0"?>
   2:  <!--
   3:    如需如何設定 ASP.NET 應用程式的詳細資訊,請造訪
   4:    http://go.microsoft.com/fwlink/?LinkId=169433
   5:    -->
   6:  <configuration>
   7:      <configSections>
   8:          <section
   9:              name="dataCacheClient"
  10:              type="Microsoft.ApplicationServer.Caching.DataCacheClientSection, 
  11:              Microsoft.ApplicationServer.Caching.Core, 
  12:              Version=1.0.0.0, 
  13:              Culture=neutral, 
  14:              PublicKeyToken=31bf3856ad364e35"
  15:              allowLocation="true"
  16:              allowDefinition="Everywhere"
  17:              />
  18:      </configSections>
  19:      <dataCacheClient>
  20:          <hosts>
  21:              <host name="localhost" cachePort="22233"/>
  22:          </hosts>
  23:      </dataCacheClient>
  24:      <system.web>
  25:          <compilation debug="true" targetFramework="4.0">
  26:              <assemblies>
  27:                  <add assembly="Microsoft.ApplicationServer.Caching.Client, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  28:                  <add assembly="Microsoft.ApplicationServer.Caching.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies></compilation>
  29:      </system.web>
  30:  </configuration>

 

關於<configSections>的區段可以使用Export-CacheClusterConfig的PowerShell指令向CacheClusterServer要一個,但是要記得將type的"Microsoft.ApplicationServer.Caching.DataCacheSection"改為Client的"Microsoft.ApplicationServer.Caching.DataCacheClientSection",不要像筆者傻傻得忘了改,就會出現遺漏replicationPort、arbitrationPort等錯誤訊息,因為這些<host>的屬性只有Server才有的。..@@

(8).在Default.aspx.cs 程式碼using Microsoft.ApplicationServer.Caching;並拖曳一個Button,開始寫程式,完整Page的程式如下:

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Web;
   5:  using System.Web.UI;
   6:  using System.Web.UI.WebControls;
   7:  using Microsoft.ApplicationServer.Caching;
   8:  using System.Runtime.Serialization;
   9:   
  10:  public partial class _Default : System.Web.UI.Page
  11:  {
  12:      protected void Page_Load(object sender, EventArgs e)
  13:      {
  14:      }
  15:   
  16:      protected void Button1_Click(object sender, EventArgs e)
  17:      {
  18:          PutToCaching();
  19:      }
  20:   
  21:      void PutToCaching()
  22:      {
  23:          var myCache = new DataCacheFactory();
  24:          var testCache = myCache.GetCache("test");
  25:          Product p = new Product() { Name = "programtest", Desc = "Windows Server AppFabric CacheCluster Test!!" };
  26:          if (testCache.Get("test01") != null)
  27:          {
  28:              testCache.Remove("test01");
  29:          }
  30:          testCache.Put("test01", p);
  31:      }
  32:  }

 

而Product類別就兩個屬性而已,不過要記得加上[Serializable]的屬性標籤,因為可放入Cache的物件必須是可續列化的

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Web;
   5:  using System.Runtime.Serialization;
   6:   
   7:  /// <summary>
   8:  /// Product 的摘要描述
   9:  /// </summary>
  10:  [Serializable]
  11:  public class Product
  12:  {
  13:      public string Name { get; set; }
  14:      public string Desc { get; set; }
  15:      public Product()
  16:      {
  17:          //
  18:          // TODO: 在此加入建構函式的程式碼
  19:          //
  20:      }
  21:  }

 

執行完畢後,再使用Cache提供的統計功能。在PowerShell下指令Get-CacheStatistics得到如下結果

image

如數據可以知道,目前test這個具名的Cache物件中有一個物件,該物件占用491個byte。

不過因為筆者的Windows Server 2008 R2還在重灌中,所以暫時以Windows 7來Demo,如果真的要多台進行叢集必須使用Server Enterprise/Data Center級作業系統才可以。

測試紀錄~以上,有興趣的可以試試看 ^_^


 

簽名:

學習是一趟奇妙的旅程

這當中,有辛苦、有心酸、也有成果。有時也會有瓶頸。要能夠繼續勇往直前就必須保有一顆最熱誠的心。

軟體開發之路(FB 社團)https://www.facebook.com/groups/361804473860062/

Gelis 程式設計訓練營(粉絲團)https://www.facebook.com/gelis.dev.learning/


 

如果文章對您有用,幫我點一下讚,或是點一下『我要推薦,這會讓我更有動力的為各位讀者撰寫下一篇文章。

非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^