微軟在新一代的分散式運算平台產品可算是Windows Server AppFabric了,它不僅增強了IIS 7.0/7.5的許多功能與管理功能,也可以作為企業私有雲建置平台的首選平台
微軟在新一代的分散式運算平台產品可算是Windows Server AppFabric了,它不僅增強了IIS 7.0/7.5的許多功能與管理功能,也可以作為企業私有雲建置平台的首選平台(感謝朱大的提醒使小有更正確的方向而找到許多相關的資料),其中的新功能之一,也是許多人最感興趣的功能就是Caching了。網路上已有許多專家部落格都已經實作與討論過此功能,這也讓筆者躍躍欲試,由於他所提供的Caching機制提供叢集的方式,跨網路多台機器分享Cache記憶體,甚至支援上百台以上的伺服器,也就是說,要加大記憶體,就在增加一台伺服器加入叢集即可!這樣的叢集的Caching,不僅加快了應用程式執行的效率,也減輕了後端資料庫的負擔。
在開發之前,有一些前置作業需要先完成,
(1).以系統管理員身分開啟PowerShell管理工具
(2).執行use-CacheCluster 表示伺服器啟用Caching機制
(3).執行start-CacheCluster (2,3動作均由此圖表示)
(4).建立具名的快取(Name Cache)物件,名稱為test
(5).建立一個空的WebSite專案,取名為WebCacheClusterTest,並加入一個Default.aspx頁面與一個Porduct類別,並在類別中宣告Name、Desc兩個屬性。
(6).加入參考Microsoft.ApplicationServer.Caching.Client.dll, Microsoft.ApplicationServer.Caching.Core.dll
(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得到如下結果
如數據可以知道,目前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/
如果文章對您有用,幫我點一下讚,或是點一下『我要推薦』,這會讓我更有動力的為各位讀者撰寫下一篇文章。
非常謝謝各位的支持與愛護,小弟在此位各位說聲謝謝!!! ^_^